JDK体系结构
Java编译运行过程
Java内存模型
堆结构和垃圾搜集过程![堆结构和垃圾搜集过程](https://i-blog.csdnimg.cn/blog_migrate/c0a29128971e128b233aa21ec07e3dd3.png)
- new 出来的对象都会往 Eden(伊甸)区放 然后满了 会进行minor gc
- 存活的放到s0中
- 再次满了 再次搜集s0和Eden存活对象 放到s1中
- …s1,eden–>s0 不断调换
- 年龄到达15的或大对象 进入老年区
- 老年区满了 会启动full gc 启动full gc时候必须暂停所有执行的代码也就是STW(stop the world) 因为我们的对象必须要有一个确定的状态 不暂停的话就无法确定
可达性分析(minor GC、full GC):
GC Roots根节点:线程栈的本地变量、静态变量、本地方法栈的变量等
JVM调优
JVM调优的目的:减少GC
图像化查看jvm进程
jvisualvm # Visual GC
Linux调优工具
阿里Arthas
curl -O http://arthas.aliyun.com/arthas-boot.jar
java -jar arthas-boot.jar
dashboard # 查看整个进程的运行情况,线程、内存、GC、运行环境
thread # 查看线程详细情况
thread 1 # 选择进程序号1,进入进程信息操作
jad 类名 # 查看运行的代码
调整性能时,JM有三个组件
- 堆大小调整
- 垃圾收集器调整
- JIT编译器调整
参数调优
java -Xms3G -Xmx3G -Xss1M -XX:MetaspaceSize=512 -XX:MaxMetaspaceSize=512M -jar microservice-eureka-server.jar
- -Xms:初始内存,此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存
- -Xmx:最大可用内存
- -Xmn:设置年轻代大小
- -Xss:每个线程的堆栈大小
- -XX:NewRatio:设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)
- -XX:SurvivorRatio:设置年轻代中Eden区与Survivor区的大小比值
垃圾回收器
参考资料:
JVM优化 提取码:dsqk