Java教程

第3篇:JVM中内存分配及回收策略

本文主要是介绍第3篇:JVM中内存分配及回收策略,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 一、分配原理
  • 二、原理图
  • 小结

一、分配原理

当执行创建对象操作时,首先进行逃逸分析(其实就是该对象是否会被外部方法所引用(就是作用域),若不会则进行标量替换(就是对象中成员变量是基本数据类型的在栈帧/寄存器中进行创建),可以分担堆内存压力,毕竟出栈就会销毁);若逃逸分析不通过则进行大对象(参数:“-XX:PretenureSizeThreshold”)判断;若判断通过则直接进入老年代,若不通过则进行TLAB(Thread Local Allocation Buffer,即线程本地分配缓存区,就是向eden区申请一块很小的内存空间(线程私有的)来存放对象),若大小足够存放该对象则存放,若不够则直接在eden区中进行创建;当eden区满后,会进行Minor GC,存活对象会进入Survivor区,其他对象会由垃圾回收线程进行回收;判断对象年龄是否等于15(默认值为15,设置参数“-XX:MaxTenuringThreshold”),或者当前存放存活对象的Survivor区域的年龄1+年龄2+。。。+年龄n>Survivor内存大小的50%,则对象直接进入老年代。

二、原理图

在这里插入图片描述

小结

原理中涉及的知识点有:

  1. 逃逸分析;
  2. 对象优先在Eden区分配;
  3. 大对象直接进入老年代;
  4. 长期存活的对象将进入老年代;
  5. 动态对象年龄判断;
  6. 空间分配担保。

内存回收与垃圾收集器在很多时候都是影响系统性能、并发能力的主要因素之一,虚拟机之所以提供多种不同的收集器以及大量的调节参数,是因为只有根据实际应用需求,实现方式选择最优的收集方式才能获取最高的性能。没有固定收集器、参数组合,也没有最优的调优方法,虚拟机也就没有什么必然的内存回收行为。因此,学习虚拟机内存知识,如果要到实践调优阶段,那么必须了解每个具体收集器的行为、优势和劣势、调节参数。

这篇关于第3篇:JVM中内存分配及回收策略的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!