探索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发布于博客园

 

posted @ 2024-10-01 07:07  快乐的欧阳天美1114  阅读(5)  评论(0编辑  收藏  举报