static { addField("capacity", FIELD_CAPACITY); addField("used", FIELD_USED); addField("forEachObject", FIELD_FOR_EACH_OBJECT); addField("forEachClass", FIELD_FOR_EACH_CLASS); try { Class myClass = JSJavaHeap.class; forEachObjectMethod = myClass.getMethod("forEachObject", new Class[] {Object[].class}); forEachClassMethod = myClass.getMethod("forEachClass", new Class[] {Object[].class}); } catch (RuntimeException re) { throw re; } catch (Exception exp) { throw new RuntimeException(exp); } }
private static synchronized void initialize(TypeDataBase db) { Type type = db.lookupType("Threads"); threadListField = type.getAddressField("_thread_list"); numOfThreadsField = type.getCIntegerField("_number_of_threads"); // Instantiate appropriate platform-specific JavaThreadFactory String os = VM.getVM().getOS(); String cpu = VM.getVM().getCPU(); access = null; // FIXME: find the platform specific PD class by reflection? if (os.equals("solaris")) { if (cpu.equals("sparc")) { access = new SolarisSPARCJavaThreadPDAccess(); } else if (cpu.equals("x86")) { access = new SolarisX86JavaThreadPDAccess(); } else if (cpu.equals("amd64")) { access = new SolarisAMD64JavaThreadPDAccess(); } } else if (os.equals("win32")) { if (cpu.equals("x86")) { access = new Win32X86JavaThreadPDAccess(); } else if (cpu.equals("amd64")) { access = new Win32AMD64JavaThreadPDAccess(); } } else if (os.equals("linux")) { if (cpu.equals("x86")) { access = new LinuxX86JavaThreadPDAccess(); } else if (cpu.equals("amd64")) { access = new LinuxAMD64JavaThreadPDAccess(); } else if (cpu.equals("sparc")) { access = new LinuxSPARCJavaThreadPDAccess(); } else if (cpu.equals("ppc64")) { access = new LinuxPPC64JavaThreadPDAccess(); } else if (cpu.equals("aarch64")) { access = new LinuxAARCH64JavaThreadPDAccess(); } else { try { access = (JavaThreadPDAccess) Class.forName( "sun.jvm.hotspot.runtime.linux_" + cpu.toLowerCase() + ".Linux" + cpu.toUpperCase() + "JavaThreadPDAccess") .newInstance(); } catch (Exception e) { throw new RuntimeException("OS/CPU combination " + os + "/" + cpu + " not yet supported"); } } } else if (os.equals("bsd")) { if (cpu.equals("x86")) { access = new BsdX86JavaThreadPDAccess(); } else if (cpu.equals("amd64") || cpu.equals("x86_64")) { access = new BsdAMD64JavaThreadPDAccess(); } } else if (os.equals("darwin")) { if (cpu.equals("amd64") || cpu.equals("x86_64")) { access = new BsdAMD64JavaThreadPDAccess(); } } if (access == null) { throw new RuntimeException("OS/CPU combination " + os + "/" + cpu + " not yet supported"); } virtualConstructor = new VirtualConstructor(db); // Add mappings for all known thread types virtualConstructor.addMapping("JavaThread", JavaThread.class); if (!VM.getVM().isCore()) { virtualConstructor.addMapping("CompilerThread", CompilerThread.class); virtualConstructor.addMapping("CodeCacheSweeperThread", CodeCacheSweeperThread.class); } virtualConstructor.addMapping("JvmtiAgentThread", JvmtiAgentThread.class); virtualConstructor.addMapping("ServiceThread", ServiceThread.class); }