MCPcopy Create free account
hub / github.com/async-profiler/async-profiler / init

Method init

src/vmEntry.cpp:142–308  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

140}
141
142bool VM::init(JavaVM* vm, bool attach) {
143 if (_jvmti != NULL) return true;
144
145 _vm = vm;
146 if (_vm->GetEnv((void**)&_jvmti, JVMTI_VERSION_1_0) != 0) {
147 return false;
148 }
149
150 bool is_hotspot = false;
151 bool is_zero_vm = false;
152 char* prop;
153 if (_jvmti->GetSystemProperty("java.vm.name", &prop) == 0) {
154 is_hotspot = strstr(prop, "OpenJDK") != NULL ||
155 strstr(prop, "HotSpot") != NULL ||
156 strstr(prop, "GraalVM") != NULL ||
157 strstr(prop, "Dynamic Code Evolution") != NULL;
158 is_zero_vm = strstr(prop, "Zero") != NULL;
159 _zing = !is_hotspot && strstr(prop, "Zing") != NULL;
160 _jvmti->Deallocate((unsigned char*)prop);
161 }
162
163 if (is_hotspot && _jvmti->GetSystemProperty("java.vm.version", &prop) == 0) {
164 if (strncmp(prop, "25.", 3) == 0 && prop[3] > '0') {
165 _hotspot_version = 8;
166 } else if (strncmp(prop, "24.", 3) == 0 && prop[3] > '0') {
167 _hotspot_version = 7;
168 } else if (strncmp(prop, "20.", 3) == 0 && prop[3] > '0') {
169 _hotspot_version = 6;
170 } else if ((_hotspot_version = atoi(prop)) < 9) {
171 _hotspot_version = 9;
172 }
173 _jvmti->Deallocate((unsigned char*)prop);
174 }
175
176 // JVM symbols are globally visible on macOS
177 void* libjvm = RTLD_DEFAULT;
178 if (OS::isLinux() && (libjvm = dlopen("libjvm.so", RTLD_LAZY)) == NULL) {
179 Log::warn("Failed to load libjvm.so: %s", dlerror());
180 libjvm = RTLD_DEFAULT;
181 }
182 _asyncGetCallTrace = (AsyncGetCallTrace)dlsym(libjvm, "AsyncGetCallTrace");
183 _totalMemory = (JVM_MemoryFunc)dlsym(libjvm, "JVM_TotalMemory");
184 _freeMemory = (JVM_MemoryFunc)dlsym(libjvm, "JVM_FreeMemory");
185
186 Profiler* profiler = Profiler::instance();
187 if (VMStructs::libjvm() == NULL) {
188 profiler->updateSymbols(false);
189 VMStructs::init(profiler->findLibraryByAddress((const void*)_asyncGetCallTrace));
190 }
191
192 _openj9 = !is_hotspot && J9Ext::initialize(_jvmti, profiler->resolveSymbol("j9thread_self"));
193
194 CodeCache* lib = profiler->findJvmLibrary("libj9vm");
195 if (lib == NULL) {
196 return false;
197 }
198
199 if (isOpenJ9()) {

Callers

nothing calls this directly

Calls 11

dlopenFunction · 0.85
applyPatchFunction · 0.85
updateSymbolsMethod · 0.80
findLibraryByAddressMethod · 0.80
resolveSymbolMethod · 0.80
findJvmLibraryMethod · 0.80
findSymbolMethod · 0.80
isDefaultMethod · 0.80
setMethod · 0.80
markMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected