JVM_08JVM调优实战及常量池
2023-03-27 11:24:37 17 举报
AI智能生成
JVM调优实战主要涉及对Java虚拟机的内存管理、垃圾回收机制、线程管理等方面进行优化,以提高程序运行效率和稳定性。常量池是Java虚拟机中用于存放字面量和符号引用的地方,包括字符串常量池、类常量池等。通过对常量池的优化,可以减少内存占用和提高访问速度。在JVM调优实战中,需要结合具体的应用场景和需求,选择合适的优化策略和技术手段,如调整堆内存大小、选择合适的垃圾回收器、使用缓存技术等。同时,还需要关注程序的性能指标和瓶颈,以便针对性地进行优化。总之,JVM调优实战是一个系统性、综合性的工作,需要深入理解Java虚拟机的原理和技术细节,才能取得理想的优化效果。
作者其他创作
大纲/内容
常用调优工具
Arthas
官方学习文档https://alibaba.github.io/arthas/commands.html#arthas
使用场景
dashboard
查看整个进程的运行情况,线程、内存、GC、运行环境信息
thread
thread加上线程ID 可以查看线程堆栈
thread -b 可以查看线程死锁
gceasy
官方网站https://gceasy.io
GC日志详解
JVM参数
JVM参数
-Xloggc:./gc-%t.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintGCCause
-XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M
java -XX:+PrintFlagsInitial 表示打印出所有参数选项的默认值
java -XX:+PrintFlagsFinal 表示打印出所有参数选项在运行程序时生效的值
java -XX:+PrintFlagsFinal 表示打印出所有参数选项在运行程序时生效的值
PARALLEL
-Xloggc:./gc-adjust-%t.log -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+PrintGCDetails -XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps -XX:+PrintGCCause -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M
microservice-eureka-server.jar
-XX:+PrintGCTimeStamps -XX:+PrintGCCause -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M
microservice-eureka-server.jar
可以看到GC的频率
CMS
-Xloggc:d:/gc-cms-%t.log -Xms50M -Xmx50M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+PrintGCDetails -XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps -XX:+PrintGCCause -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC
-XX:+PrintGCTimeStamps -XX:+PrintGCCause -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC
可以看到并发标记,并发清理的过程
G1
-Xloggc:d:/gc-g1-%t.log -Xms50M -Xmx50M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M -XX:+PrintGCDetails -XX:+PrintGCDateStamps
-XX:+PrintGCTimeStamps -XX:+PrintGCCause -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=100M -XX:+UseG1GC
可以看到并发标记,筛选回收的过程
Class常量池与运行时常量池
基础信息
常量池
字面量
由字母、数字等构成的字符串或者数值常量
符号引用
类和接口的全限定名
字段的名称和描述符
方法的名称和描述符
字段的名称和描述符
方法的名称和描述符
动态链接
运行时会被转变为被加载到内存区域的代码的直接引用
字符串常量池
设计思想
提高性能和减少内存开销
为字符串开辟一个字符串常量池,类似于缓存区
创建字符串常量时,首先查询字符串常量池是否存在该字符串
对象池
基本类型的包装类的大部分都实现了常量池技术(严格来说应该叫对象池,在堆上)
实现类型
Byte,Short,Integer,Long,Character,Boolean
对应值小于等于127时才可使用对象池
不负责创建和管理大于127的这些类的对象
两种浮点数类型的包装类则没有实现
0 条评论
下一页