Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/src/hotspot/share/memory/oopFactory.cpp
40949 views
1
/*
2
* Copyright (c) 1997, 2021, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*
23
*/
24
25
#include "precompiled.hpp"
26
#include "classfile/javaClasses.hpp"
27
#include "classfile/symbolTable.hpp"
28
#include "classfile/vmSymbols.hpp"
29
#include "gc/shared/collectedHeap.inline.hpp"
30
#include "memory/oopFactory.hpp"
31
#include "memory/resourceArea.hpp"
32
#include "memory/universe.hpp"
33
#include "oops/instanceKlass.hpp"
34
#include "oops/instanceOop.hpp"
35
#include "oops/objArrayKlass.hpp"
36
#include "oops/objArrayOop.hpp"
37
#include "oops/oop.inline.hpp"
38
#include "oops/typeArrayKlass.hpp"
39
#include "oops/typeArrayOop.inline.hpp"
40
#include "runtime/handles.inline.hpp"
41
#include "utilities/utf8.hpp"
42
43
typeArrayOop oopFactory::new_boolArray(int length, TRAPS) {
44
return TypeArrayKlass::cast(Universe::boolArrayKlassObj())->allocate(length, THREAD);
45
}
46
47
typeArrayOop oopFactory::new_charArray(int length, TRAPS) {
48
return TypeArrayKlass::cast(Universe::charArrayKlassObj())->allocate(length, THREAD);
49
}
50
51
typeArrayOop oopFactory::new_floatArray(int length, TRAPS) {
52
return TypeArrayKlass::cast(Universe::floatArrayKlassObj())->allocate(length, THREAD);
53
}
54
55
typeArrayOop oopFactory::new_doubleArray(int length, TRAPS) {
56
return TypeArrayKlass::cast(Universe::doubleArrayKlassObj())->allocate(length, THREAD);
57
}
58
59
typeArrayOop oopFactory::new_byteArray(int length, TRAPS) {
60
return TypeArrayKlass::cast(Universe::byteArrayKlassObj())->allocate(length, THREAD);
61
}
62
63
typeArrayOop oopFactory::new_shortArray(int length, TRAPS) {
64
return TypeArrayKlass::cast(Universe::shortArrayKlassObj())->allocate(length, THREAD);
65
}
66
67
typeArrayOop oopFactory::new_intArray(int length, TRAPS) {
68
return TypeArrayKlass::cast(Universe::intArrayKlassObj())->allocate(length, THREAD);
69
}
70
71
typeArrayOop oopFactory::new_longArray(int length, TRAPS) {
72
return TypeArrayKlass::cast(Universe::longArrayKlassObj())->allocate(length, THREAD);
73
}
74
75
// create java.lang.Object[]
76
objArrayOop oopFactory::new_objectArray(int length, TRAPS) {
77
assert(Universe::objectArrayKlassObj() != NULL, "Too early?");
78
return ObjArrayKlass::cast(Universe::objectArrayKlassObj())->allocate(length, THREAD);
79
}
80
81
typeArrayOop oopFactory::new_charArray(const char* utf8_str, TRAPS) {
82
int length = utf8_str == NULL ? 0 : UTF8::unicode_length(utf8_str);
83
typeArrayOop result = new_charArray(length, CHECK_NULL);
84
if (length > 0) {
85
UTF8::convert_to_unicode(utf8_str, result->char_at_addr(0), length);
86
}
87
return result;
88
}
89
90
typeArrayOop oopFactory::new_typeArray(BasicType type, int length, TRAPS) {
91
Klass* type_asKlassOop = Universe::typeArrayKlassObj(type);
92
TypeArrayKlass* type_asArrayKlass = TypeArrayKlass::cast(type_asKlassOop);
93
typeArrayOop result = type_asArrayKlass->allocate(length, THREAD);
94
return result;
95
}
96
97
// Create a Java array that points to Symbol.
98
// As far as Java code is concerned, a Symbol array is either an array of
99
// int or long depending on pointer size. Only stack trace elements in Throwable use
100
// this. They cast Symbol* into this type.
101
typeArrayOop oopFactory::new_symbolArray(int length, TRAPS) {
102
BasicType type = LP64_ONLY(T_LONG) NOT_LP64(T_INT);
103
Klass* type_asKlassOop = Universe::typeArrayKlassObj(type);
104
TypeArrayKlass* type_asArrayKlass = TypeArrayKlass::cast(type_asKlassOop);
105
typeArrayOop result = type_asArrayKlass->allocate(length, THREAD);
106
return result;
107
}
108
109
typeArrayOop oopFactory::new_typeArray_nozero(BasicType type, int length, TRAPS) {
110
Klass* type_asKlassOop = Universe::typeArrayKlassObj(type);
111
TypeArrayKlass* type_asArrayKlass = TypeArrayKlass::cast(type_asKlassOop);
112
typeArrayOop result = type_asArrayKlass->allocate_common(length, false, THREAD);
113
return result;
114
}
115
116
117
objArrayOop oopFactory::new_objArray(Klass* klass, int length, TRAPS) {
118
assert(klass->is_klass(), "must be instance class");
119
if (klass->is_array_klass()) {
120
return ArrayKlass::cast(klass)->allocate_arrayArray(1, length, THREAD);
121
} else {
122
return InstanceKlass::cast(klass)->allocate_objArray(1, length, THREAD);
123
}
124
}
125
126
objArrayHandle oopFactory::new_objArray_handle(Klass* klass, int length, TRAPS) {
127
objArrayOop obj = new_objArray(klass, length, CHECK_(objArrayHandle()));
128
return objArrayHandle(THREAD, obj);
129
}
130
131