回想至今,关于java虚拟机的理解并不多。当初安装完jdk配置完环境变量后对这些并没有着重的深入。最对知道一个堆区共享,栈区独立。现在重新开始。做一个系统的学习。学习总结。
大体学习路线为:
- 内存结构
- 垃圾回收机制
- 性能调试工具
- 性能调优
- 类的文件结构
- 类加载机制
- 字节码执行引擎
- 虚拟机编译及运行时的优化(早期优化及晚期优化)
- java的线程
学习jvm虚拟机 第一步就要知道什么是虚拟机 了解jdk,jre,jvm三者之间的关系
通俗来讲,三者就是一个包含关系 jdk包含了jre jre又包含了jvm
jdk : 是开发人员所使用的,软件开发工具包 提供了java的开发环境与 运行环境(jre)
第一部分就是Java运行时环境,这其实就是JVM。
第二部分就是Java的基础类库,这个类库的数量还是非常可观的。
第三部分就是Java的开发工具,它们都是辅助你更好的使用Java的利器
jre : java运行环境 运行在虚拟机之上 包含了jvm
jvm : java 虚拟机
我们来看一下官网给出的定义 : https://docs.oracle.com/javase/8/docs/
- JVM 模拟内存溢出
写了一个死循环,我们来看内存情况
OutOfMemoryError 内存溢出错误 但是当一个项目过于庞大时 怎么才能看到错误信息?
- 在Idea中我们可以设置jvm
- Run ——> Edit Configurations.. 的 Configuration 中设置
-xms20m -Xmx20m 分配了20M最大空间 ,启动最小空间20M
-XX:+HeapDumpOnOutOfMemoryError参数表示当JVM发生OOM时,自动生成DUMP文件。
- 这时的报错信息
- 生成的快照文件默认在你项目的根目录之下
快照文件是无法直接看的,我们需要专门的查看工具
下载地址为:http://www.eclipse.org/mat/downloads.php
选择对应的版本,点击 Select Another Mirror 选择最近的镜像地址 最好点击click here 下载
安装完毕之后就可以导入刚才的快照文件进行查看啦 放两张图片
Shallow Heap 代表当前对象的大小,不包含它的引用对象
Retained Heap 表示当前对象的大小加上直接或间接引用对象的大小的总和