Skip to content

Commit 38cd860

Browse files
committed
8363816: Refactor array name creation
Reviewed-by: shade, ccheung, dholmes
1 parent 743c821 commit 38cd860

File tree

2 files changed

+26
-19
lines changed

2 files changed

+26
-19
lines changed

src/hotspot/share/oops/objArrayKlass.cpp

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,26 @@ ObjArrayKlass* ObjArrayKlass::allocate_klass(ClassLoaderData* loader_data, int n
5353
return new (loader_data, size, THREAD) ObjArrayKlass(n, k, name);
5454
}
5555

56+
Symbol* ObjArrayKlass::create_element_klass_array_name(JavaThread* current, Klass* element_klass) {
57+
ResourceMark rm(current);
58+
char* name_str = element_klass->name()->as_C_string();
59+
int len = element_klass->name()->utf8_length();
60+
char* new_str = NEW_RESOURCE_ARRAY_IN_THREAD(current, char, len + 4);
61+
int idx = 0;
62+
new_str[idx++] = JVM_SIGNATURE_ARRAY;
63+
if (element_klass->is_instance_klass()) { // it could be an array or simple type
64+
new_str[idx++] = JVM_SIGNATURE_CLASS;
65+
}
66+
memcpy(&new_str[idx], name_str, len * sizeof(char));
67+
idx += len;
68+
if (element_klass->is_instance_klass()) {
69+
new_str[idx++] = JVM_SIGNATURE_ENDCLASS;
70+
}
71+
new_str[idx] = '\0';
72+
return SymbolTable::new_symbol(new_str);
73+
}
74+
75+
5676
ObjArrayKlass* ObjArrayKlass::allocate_objArray_klass(ClassLoaderData* loader_data,
5777
int n, Klass* element_klass, TRAPS) {
5878

@@ -79,25 +99,7 @@ ObjArrayKlass* ObjArrayKlass::allocate_objArray_klass(ClassLoaderData* loader_da
7999
}
80100

81101
// Create type name for klass.
82-
Symbol* name = nullptr;
83-
{
84-
ResourceMark rm(THREAD);
85-
char *name_str = element_klass->name()->as_C_string();
86-
int len = element_klass->name()->utf8_length();
87-
char *new_str = NEW_RESOURCE_ARRAY(char, len + 4);
88-
int idx = 0;
89-
new_str[idx++] = JVM_SIGNATURE_ARRAY;
90-
if (element_klass->is_instance_klass()) { // it could be an array or simple type
91-
new_str[idx++] = JVM_SIGNATURE_CLASS;
92-
}
93-
memcpy(&new_str[idx], name_str, len * sizeof(char));
94-
idx += len;
95-
if (element_klass->is_instance_klass()) {
96-
new_str[idx++] = JVM_SIGNATURE_ENDCLASS;
97-
}
98-
new_str[idx++] = '\0';
99-
name = SymbolTable::new_symbol(new_str);
100-
}
102+
Symbol* name = create_element_klass_array_name(THREAD, element_klass);
101103

102104
// Initialize instance variables
103105
ObjArrayKlass* oak = ObjArrayKlass::allocate_klass(loader_data, n, element_klass, name, CHECK_NULL);

src/hotspot/share/oops/objArrayKlass.hpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ class ObjArrayKlass : public ArrayKlass {
5252
static ObjArrayKlass* allocate_klass(ClassLoaderData* loader_data, int n, Klass* k, Symbol* name, TRAPS);
5353

5454
objArrayOop allocate_instance(int length, TRAPS);
55+
56+
protected:
57+
// Create array_name for element klass
58+
static Symbol* create_element_klass_array_name(JavaThread* current, Klass* element_klass);
59+
5560
public:
5661
// For dummy objects
5762
ObjArrayKlass() {}

0 commit comments

Comments
 (0)