jvm内存分配与回收策略

wjq2017 wjq2017     2022-10-22     143

关键词:

  Java堆是垃圾收集器管理的主要区域。因为基本采用分代收集算法,所以Java堆可以细分为新生代和老年代,更细致是Eden、From Survivor和To Survivor。划分的目的是更好地回收内存或更快地分配内存。根据JVM规范,Java堆可以处于物理上不连续的内存空间中,要求逻辑上连续。

 

  1 对象优先在Eden区中分配

  大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间分配时,虚拟机发起一次Minor GC。

  2 大对象直接进入老年代

  大对象指需要大量连续内存空间的Java对象,例如很长的字符串和大数组。大对象对于JVM的内存分配来说是一个坏消息,比遇到一个大对象更坏的消息是遇到一群“朝生夕灭”的“短命大对象”,经常出现大对象容易导致内存还有不少空间时提前触发垃圾收集以获取足够的连续空间来“安置”它们。

  3 长期存活的对象将进入老年代

  JVM给每个对象定义了一个对象年龄(Age)计数器。如果对象在Eden区分配并经过第一次Minor GC后仍然存活,并且能被Survivor容纳,则将该对象移动到Survivor空间中,对象年龄设为1。对象在Survivor区中每“熬过“一次Minor GC,年龄增加1岁,当年龄增加到一定程度(默认为15岁),晋升到老年代。

  

  新生代GC(Minor GC):因为Java对象大多具备朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度比较快。

  老年代GC(Full GC / Major GC):经常会伴随至少一次的Minor GC。Major GC的速度一般会比Minor GC慢10倍以上。

  

  参考资料

  《深入理解Java虚拟机 JVM高级特性与最佳实践 第2版》P41 P91-97

jvm内存分配与回收策略

...致是Eden、FromSurvivor和ToSurvivor。划分的目的是更好地回收内存或更快地分配内存。根据JVM规范,Java堆可以处于物理上不连续的内存空间中,要求逻辑上连续。   1对象优先在Eden区中分配  大多数情况下,对象在新生代Eden... 查看详情

内存分配与回收策略

内存分配与回收策略  Java技术体系中的自动内存管理最终可以归结为自动化地解决两个问题:给对象分配内存和回收分配给对象的内存。关于内存回收这一点,我们在Java垃圾收集机制中详细介绍了各种回收算法以及JVM中常见... 查看详情

jvm内存分配与回收策略

...致是Eden、FromSurvivor和ToSurvivor。划分的目的是更好地回收内存或更快地分配内存。根据JVM规范,Java堆可以处于物理上不连续的内存空间中,要求逻辑上连续。  1对象优先在Eden区中分配  大多数情况下,对象在新生代Eden区中... 查看详情

jvm学习十-(复习)内存分配与回收策略

内存分配与回收策略对象的内存分配,就是在堆上分配(也可能经过JIT编译后被拆散为标量类型并间接在栈上分配),对象主要分配在新生代的Eden区上,少数情况下可能直接分配在老年代,分配规则不固定,取决于当前使用的... 查看详情

jvm系列三:内存分配与回收策略

内存分配策略1、对象优先分配在新生代Eden区多数情况下,对象分配在新生代的Eden,若Eden区域内存不够,则引发一次MinorGC 2、大对象直接进入老年代大对象直接分配在老年代,避免新生代里出现从Eden到Survivor频繁的内存复制... 查看详情

jvm之内存分配与回收策略

前言   对象的内存分配,往大的方向上讲,就是在堆上分配,少数情况下也可能会直接分配在老年代中,分配的规则并不是百分之百固定的,其细节决定于当前使用的是哪种垃圾收集器组合,当然还有虚拟机中与内存... 查看详情

jvm学习十-(复习)内存分配与回收策略(代码片段)

内存分配与回收策略对象的内存分配,就是在堆上分配(也可能经过JIT编译后被拆散为标量类型并间接在栈上分配),对象主要分配在新生代的Eden区上,少数情况下可能直接分配在老年代,分配规则不固定,取决于当前使用的... 查看详情

jvm内存分配与回收策略

对象优先在Eden分配大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次MinorGC。MinorGC:新生代GC,指发生在新生代的垃圾收集动作,因为Java对象大多具备朝生夕灭的特性,所以MinorGC非... 查看详情

jvm系列jvm垃圾收集器与内存分配策略

众所周知,在java语言中,内存分配和回收是由jvm自动管理的。因此内存的分配和回收也是jvm三大功能之一。垃圾收集器(GC)需要完成三件事情:哪些内存需要回收?什么时候进行回收?如何回收?本篇博客将解答jvm是如何处理... 查看详情

jvm之gc日志分析与对象内存分配回收策略(代码片段)

GC日志分析与内存分配回收策略一.GC日志分析的引入二.GC的分类与GC日志结构剖析三.JDK1.9以前的日志分析四.JDK1.9以后的日志分析五.对象内存分配回收策略一.GC日志分析的引入🐬GC日志分析的重要性:阅读分析虚拟机和垃... 查看详情

jvm,深入理解java虚拟机,内存分配与回收策略(代码片段)

Java技术体系中所提倡的自动内存管理最终可以归结为自动化地解决了两个问题:给对象分配内存以及回收分配给对象的内存。关于回收内存这一点,我们已经使用了大量篇幅去介绍虚拟机中的垃圾收集器体系以及运作原... 查看详情

jvm内存分配与回收

1.内存分配与回收策略内存自动管理:自动化的解决了对象内存分配和回收对象内存的问题。一般在堆上分配对象,也可能经过JTI编译后间接在栈上分配。主要分配在新生代的Eden区,如果启动了本地线程分配缓冲(线程缓冲区TLA... 查看详情

java虚拟机序列java中的垃圾回收与内存分配策略

...】java虚拟机系列之JVM总述中我们已经详细讲解过java中的内存模型,了解了关于JVM中内存管理的基本知识,接下来本博客将带领大家了解java中的垃圾回收与内存分配策略。垃圾回收(GarbageCollection,GC)是java语言的一大特色,在J... 查看详情

jvm-内存分配与回收策略

  JAVA技术体系中的自动内存管理实际上就是自动化的解决了给对象分配内存以及回收给对象分配的内存这两个问题。回收部分通过之前的《GC设计思路分析》和《垃圾收集器》这两篇博文进行了总结,那么接下来主要就是谈... 查看详情

jvm-垃圾收集器与内存分配策略

判断对象是否存活引用计数法:强引用->软引用(内存溢出异常前第二次回收)->弱引用->虚引用可达性分析算法:一个对象到GCRoots没有任何引用链(ReferenceChain),则证明此对象不可用无用的类标准该类所有的实例都已回收... 查看详情

《深入理解jvm——gc算法与内存分配策略》

 JVM深入理解JVM(2)——GC算法与内存分配策略 PostedbyCrowonAugust10,2017说起垃圾收集(GarbageCollection,GC),想必大家都不陌生,它是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行... 查看详情

《深入理解jvm——gc算法与内存分配策略》(代码片段)

 JVM深入理解JVM(2)——GC算法与内存分配策略 PostedbyCrowonAugust10,2017说起垃圾收集(GarbageCollection,GC),想必大家都不陌生,它是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行... 查看详情

深入理解_jvm内存管理内存分配和回收策略06

解决两个问题:   1、对象分配内存;   2、回收分配给对象的内存。本节详细讲解分配的问题:名词解释:新生代GC(MinorGC):指发生在新生代的垃圾回收动作,非常频繁,回收速度很快。老生代GC(MajorGC/FullGC)... 查看详情