Вот простая программа, которую вы можете использовать для выгрузки CodeCache на JDK 8.
import sun.jvm.hotspot.code.CodeBlob;
import sun.jvm.hotspot.code.CodeCacheVisitor;
import sun.jvm.hotspot.debugger.Address;
import sun.jvm.hotspot.runtime.VM;
import sun.jvm.hotspot.tools.Tool;
public class DumpCodeCache extends Tool {
@Override
public void run() {
VM.getVM().getCodeCache().iterate(new CodeCacheVisitor() {
public void prologue(Address start, Address end) {
}
public void visit(CodeBlob blob) {
System.out.printf("%8d %s\n", blob.getSize(), blob.getName());
}
public void epilogue() {
}
});
}
public static void main(String[] args) {
new DumpCodeCache().execute(args);
}
}
Инструмент основан на технологии Serviceabiliy Agent .
Чтобы скомпилировать и запустить его, включите $JAVA_HOME/lib/sa-jdi.jar
в classpath.
java -cp $JAVA_HOME/lib/sa-jdi.jar:. DumpCodeCache PID
Начиная с JDK 9 есть встроенная функция для выгрузки CodeCache с помощью jcmd:
jcmd PID Compiler.codelist
Начиная с JDK 11 появилась еще более мощная команда для вывода подробной статистики CodeCache:
jcmd PID Compiler.CodeHeap_Analytics