java老年代_Java新生代老年代的划分及回收算法

Java堆(Java Heap)是JVM所管理的最大内存区域,也是所有线程共享的一块区域,在JVM启动时创建。

此内存区域存放的都是对象的实例和数组。JVM规范中说到:”所有的对象实例以及数组都要在堆上分配”。

Java堆是垃圾回收器管理的主要区域,百分之九十九的垃圾回收发生在Java堆,另外百分之一发生在方法区,因此又称之为”GC堆”。根据JVM规范规定的内容,Java堆可以处于物理上不连续的内存空间中。

当前JVM对于堆的垃圾回收,采用分代收集的策略。根据堆中对象的存活周期将堆内存分为新生代和老年代。在新生代中,每次垃圾回收都有大批对象死去,只有少量存活。而老年代中存放的对象存活率高。

这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。

标记清除算法

标记清除算法是最基础的回收算法,分为标记和清除两个部分:首先标记出所有需要回收的对象,这一过程在可达性分析过程中进行。在标记完之后统一回收所有被标记的对象。

标记清除算法有如下不足

效率问题

标记和清除这两个过程的效率不高

空间问题

清除之后会产生大量不连续的内存碎片,内存碎片太多会导致以后的程序运行中无法分配出较大的内存,从内不得不触发另外的垃圾回收。

9e2f90c1024311d1f5a3b4c4417b966b.png

如上图中,经过标记清除之后,假设有了100M空间,但是这100M是不连续的,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java垃圾回收机制中,堆内存被划分为不同的代,其中年代(Old Generation)是其中的一部分。 年代主要用于存放生命周期较长的对象。这些对象通常是经过多次垃圾回收后仍然存活的对象。在新生代中经过一定次数的垃圾回收后,依然存活的对象会被晋升到年代年代的垃圾回收主要采用标记-清除(Mark-Sweep)算法或标记-整理(Mark-Compact)算法。标记-清除算法首先标记所有存活对象,然后清除未标记的对象,释放空间。而标记-整理算法则会将存活对象向一端移动,然后清除其它端上的所有对象,使得内存空间连续。 年代的垃圾回收通常涉及到全局暂停(Stop-The-World)的情况。在垃圾回收期间,应用程序的执行会暂停,直到垃圾回收完成。这可能会对应用程序的性能和响应时间产生影响。为了减少全局暂停时间,Java虚拟机使用了一些优化技术,如并发标记、并发清除等,并发垃圾回收器(如CMS、G1)可以在一定程度上减少全局暂停的时间。 年代的大小通常比新生代大,并且在应用程序中往往存放着大量的对象。因此,合理配置年代的大小以及选择合适的垃圾回收器对于应用程序的性能和内存利用率至关重要。 总结来说,年代Java垃圾回收机制中用于存放生命周期较长对象的一部分堆内存。它采用标记-清除或标记-整理算法进行垃圾回收,通常涉及全局暂停,但可以通过并发垃圾回收器来减少暂停时间。合理配置年代的大小和选择合适的垃圾回收器对于应用程序的性能和内存管理至关重要。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值