comparison src/share/vm/oops/typeArrayKlass.cpp @ 2177:3582bf76420e

6990754: Use native memory and reference counting to implement SymbolTable Summary: move symbols from permgen into C heap and reference count them Reviewed-by: never, acorn, jmasa, stefank
author coleenp
date Thu, 27 Jan 2011 16:11:27 -0800
parents d4fca0a6abde
children e5383553fd4e
comparison
equal deleted inserted replaced
2176:27e4ea99855d 2177:3582bf76420e
51 51
52 klassOop typeArrayKlass::create_klass(BasicType type, int scale, 52 klassOop typeArrayKlass::create_klass(BasicType type, int scale,
53 const char* name_str, TRAPS) { 53 const char* name_str, TRAPS) {
54 typeArrayKlass o; 54 typeArrayKlass o;
55 55
56 symbolHandle sym(symbolOop(NULL)); 56 Symbol* sym = NULL;
57 // bootstrapping: don't create sym if symbolKlass not created yet 57 if (name_str != NULL) {
58 if (Universe::symbolKlassObj() != NULL && name_str != NULL) { 58 sym = SymbolTable::new_symbol(name_str, CHECK_NULL);
59 sym = oopFactory::new_symbol_handle(name_str, CHECK_NULL);
60 } 59 }
61 KlassHandle klassklass (THREAD, Universe::typeArrayKlassKlassObj()); 60 KlassHandle klassklass (THREAD, Universe::typeArrayKlassKlassObj());
62 61
63 arrayKlassHandle k = base_create_array_klass(o.vtbl_value(), header_size(), klassklass, CHECK_NULL); 62 arrayKlassHandle k = base_create_array_klass(o.vtbl_value(), header_size(), klassklass, CHECK_NULL);
64 typeArrayKlass* ak = typeArrayKlass::cast(k()); 63 typeArrayKlass* ak = typeArrayKlass::cast(k());
65 ak->set_name(sym()); 64 ak->set_name(sym);
66 ak->set_layout_helper(array_layout_helper(type)); 65 ak->set_layout_helper(array_layout_helper(type));
67 assert(scale == (1 << ak->log2_element_size()), "scale must check out"); 66 assert(scale == (1 << ak->log2_element_size()), "scale must check out");
68 assert(ak->oop_is_javaArray(), "sanity"); 67 assert(ak->oop_is_javaArray(), "sanity");
69 assert(ak->oop_is_typeArray(), "sanity"); 68 assert(ak->oop_is_typeArray(), "sanity");
70 ak->set_max_length(arrayOopDesc::max_array_length(type)); 69 ak->set_max_length(arrayOopDesc::max_array_length(type));