探索JVM的ABC
序章
JVM 是什么?JVM 是 Java Virtual Machine 的缩写。
“它直接和操作系统进行交互,与硬件不直接交互,而操作系统可以帮我们完成和硬件进行交互的工作。”
各种语言(Java、Kotlin、Groovy、Scala 等)编写的程序,编译成字节码,再加载到JVM中运行。
通过 JVM,程序员可以屏蔽与 不同操作系统(Windows、MacOS、Linux、Unix等)交互的细节。
#参考资料1 重要资料。
JVM 规范:The Java® Virtual Machine Specification
https://docs.oracle.com/javase/specs/jvms/se8/html/index.html
#官网
最新的是 Java 23的。
https://docs.oracle.com/javase/specs/index.html
文档中是 规范的介绍,具体规范的实现有不同种类,比如,HotSpot、JRockit、J9 等。HotSpot 是最常用的。
注,读者还没看过该文档。
JVM运行时内存
在 阅读 参考资料1 后,总结自己对JVM的理解。
组成:
- 堆内存
- 新生代
- Eden 区
- Survivor 区
- From Survivor 区
- To Survivor 区
- 老年代
- 新生代
- 非堆内存
- 方法区
- <= Java 7 永久代 PermGen
- >= Java 8 元空间 MetaSpace
- 方法区
- 线程(栈,也是 非堆内存)
- 虚拟机栈
- 本地方法栈
- 程序计数器
画了个草图:
堆内存 理解:组成、默认分配。
堆内存和 垃圾回收:
JVM的几个调优参数
注意,参数试用的版本主要针对 Java 8,更高版本会有不同的参数,还需探索。
1、调整最大堆内存和最小堆内存
“-Xmx –Xms:指定 java 堆最大值(默认值是物理内存的 1/4(<1GB))和初始 java 堆最小值(默认值是物理内存的 1/64(<1GB))。”
两者一般设置为相同,可以减少 gc。
示例:
-Xmx512m -Xms512m。
2、打印GC
-XX:+PrintGCDetails。
示例,
-Xmx512m -Xms512m -XX:+PrintGCDetails。
3、OOM时输出 dump 文件进行分析
-Xmx512m -Xms512m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=你要输出的日志路径。
---END---
下一步:
垃圾回收算法、dump文件分析、jstack(jhsdb jstack)的用法等。
看的越多,对JVM的了解就感觉越不够,什么 Safe Point、TLAB 等,之前都没听过过。
知道有 Stop The World 这个东西,知道在 full gc 时会发生,谁知,还有其它七八种会导致 STW 的方式。
keep going...国庆快乐🎈
声明,本文中的自制图片可用于任何非商业用途的活动中,比如,其它博文。
本文链接:
https://www.cnblogs.com/luo630/p/18442257
参考资料
1、大白话带你认识 JVM【推荐】
https://javaguide.cn/java/jvm/jvm-intro.html
原文:
来自 说出你的愿望吧丷投稿,
原文地址:https://juejin.im/post/5e1505d0f265da5d5d744050
2、三款主流 Java Virtual Machine丨HotSpot、JRockit、J9
https://blog.csdn.net/qq_15609303/article/details/104125408
3、
ben发布于博客园
ben发布于博客园