![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
文章平均质量分 93
梦呓0104
这个作者很懒,什么都没留下…
展开
-
深入理解java虚拟机(第三版)笔记-垃圾收集器
第二章介绍了java内存运行时的各个部分,其中程序计数器、虚拟机栈、本地方法栈随线程而生,随线程而灭,栈中的栈帧随着方法的进入和退出而有条不紊地执行入栈和出栈的操作,每一个栈帧中分配多少内存基本都是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收都具备确定性,在这几个区域内不需要过多考虑如何回收的问题,当方法结束或线程结束的时候,内存自然就随着回收了。但是java堆和方法区这两个区域有着显著的不确定性:一个接口的多个实现类需要的内存可能不同,一个方法所执行不同条件分支所需要的内存也可能不一样,只原创 2021-03-11 14:31:31 · 144 阅读 · 0 评论 -
深入理解java虚拟机(第三版)笔记-OOM实战
java堆溢出我们只要不断创建对象,保证GC Roots到对象之间有可达路径来避免垃圾回收机制清楚这些对象,那么随着对象数量的增加,总容量触及最大堆的容量限制后就会发生内存溢出异常。可以限制java堆的大小为20MB,不可扩展(将堆的最小值-Xms和最大值-Xmx设置为一样可以避免堆自动扩展),通过参数-XX:+HeapDumpOnOutOfMemoryError可以让虚拟机在出现内存异常的时候Dump出当前的内存堆快照以便进行事后分析。public class OOMTest { stat原创 2021-03-10 15:41:57 · 158 阅读 · 0 评论 -
深入理解java虚拟机(第三版)笔记-内存区域
运行时数据区域根据《Java虚拟机规范》的规定,java虚拟机所管理的内存将会包括以下几个运行时区域:方法区、堆、虚拟机栈、本地方法栈、程序计数器。程序计数器是一块比较小的内存空间,可以看作是当前线程执行的字节码的行号指示器。在虚拟机概念模型中(即设计规范,实际上每个商用虚拟机都不一定完全按着概念来设计),字节码解释器工作时就是通过改变计数器的值来选取下一条需要执行的字节码指令。它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复都需要依赖计数器完成。该内存区域是唯一一个在虚拟机规范中原创 2021-03-09 22:32:59 · 102 阅读 · 0 评论