实战性能优化
重新认知JVM
之前我们画过一张图,是从Class文件到类装载器,再到运行时数据区的过程,现在咱们把这张图不妨丰富完善一下,展示了JVM的大体物理结构图。
执行引擎:用于执行JVM字节码指令
主要由两种实现方式:
(1)将输入的字节码指令在加载时或执行时翻译成另外一种虚拟机指令;
(2)将输入的字节码指令在加载时或执行时翻译成宿主主机本地CPU的指令集。这两种方式对应着字节码的解释执行和即时编译。
9.2 堆内存溢出
9.2.1 代码
记得设置参数比如-Xmx20M -Xms20M
9.2.2 运行结果
访问->http://localhost:8080/heap
Exception in thread “http-nio-8080-exec-2” java.lang.OutOfMemoryError: GC overhead limit exceeded
9.2.3 回顾jps和jinfo
9.2.4 回顾jmap手动导出和参数自动导出
jmap手动导出:jmap -dump:format=b,file=heap.hprof PID
参数自动导出:
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof
9.3 方法区内存溢出
比如向方法区中添加Class的信息
9.3.1 asm依赖和Class代码
9.3.2 代码
设置Metaspace的大小,比如-XX:MetaspaceSize=50M -XX:MaxMetaspaceSiz