JVM堆内存划分及简单调整
来源:互联网 发布:热门小说大全软件 编辑:程序博客网 时间:2024/06/05 08:53
一、内存划分
java中堆内存用于存储对象的数据,堆内存分为新生代、老年代、永久代(1.8之前)/元空间(1.8之后):
其中新生代用于分配给刚刚产生的对象,老年代则是分配给已经存货很久的对象,或者在新生代中经常被使用的对象(后面解释什么时候会出现这种情况),元空间则是直接使用的是物理内存,比如说32G的内存,分配给java的为24G,则元空间指的是剩下的8G,而新生代和老年代则是位于24G内。1.8之前的永久带也是位于24G内,这是前后的不同之处。GC垃圾回收只处理新生代和老年代中的垃圾,但是并不是说元空间(方法去就不存在GC),方法去也存在有GC。
二、GC流程和空间分配过程
如上图所示,当有一个新的对象需要分配空间时,流程如下:
- 首先查看Eden区是否有剩余足够的空间,如果存在,对象空间申请成功,如果不足,进行下一步
- Eden空间不足时,将会出发MinorGC,JVM回收不活跃对象,回收完成以后,再进行查看当前Eden区是否有充足的空间,有则申请成功,不足则下一步
- 当Eden空间不足时,会进一步查看Survivor区是否充足,如果充足,将Eden区部分活跃的对象保存到Survior区,再在Eden区分配空间,如果不足,进行下一步
- 当Survior区依然空间不足时,会进一步判断Tenured区(老年代区)是否充足,如果充足,将会将Survior区的部分对象保存到Tenured区,然后将Eden的部分对象保存到Survior区,最后在Eden区分配空间,申请成功,如果Tenured区空间也不充足,则会触发FullGC,再判断,这时候如果还是不满足,则会抛出OOM异常,即内存空间不足的异常(OutOfMemoryError)。
三、堆内存空间调整参数
一般将Xms和Xmx值设置成相等可以避免JVM频繁检测内存是否充足以提高性能,此时对应一图内存划分中,将不会存在伸缩区
阅读全文
0 0
- JVM堆内存划分及简单调整
- JVM内存划分及管理
- JDK8中JVM堆内存划分
- JDK8中JVM堆内存划分
- JVM堆大小调整参数及建议
- jvm 内存划分 栈区 堆区 方法区
- jvm 内存划分 栈区 堆区 方法区
- 浅析JVM 第三篇(堆内存参数调整)
- Eclipse中查看及调整JVM堆内存大小
- JVM内存区域划分
- JVM内存划分
- 浅析JVM内存划分
- 学习JVM:内存划分
- jvm内存区域划分
- JVM内存划分
- JVM内存区域划分
- jvm 内存区域划分
- JVM内存区域划分
- Hash长度扩展攻击--MD5
- BDTC 2017丨大数据在金融、交通、医疗、工业领域落地实践与应用
- javascript中的原型与继承1--原型链Prototype Chaining
- form表单中input readonly 和 disable的区别
- HTTP协议之multipart/form-data请求分析
- JVM堆内存划分及简单调整
- leetcode_11. Container With Most Water ? 待解决
- 在python代码中输出一个字符的unicode编码
- python3和python2的区别
- SQL的join链接之inner join和full join
- 转载 csdn 博客
- 变量的提升是分作用域的,变量的搜索原则
- HDU
- access 中使用sql切分查询 客户时刻群之前的记录