JVM的GC机制以及大数据中应用

本文详细介绍了JVM中的垃圾回收机制,包括堆内存和方法区的管理,以及各种垃圾回收算法,如标记清除、复制、标记整理和分代收集。讨论了HotSpot虚拟机的Serial、ParNew、CMS、Parallel Scavenge和Parallel Old等收集器,以及它们的特点和应用场景。此外,文章还提到了在大数据组件中遇到的GC问题案例,如HBase的CMS调优。
摘要由CSDN通过智能技术生成

    本文主要针对JVM中的GC算法和实现做了一些说明,并将平时遇到或收藏的在大数据相关组件中出现的GC问题解决案例整理到这里,便于平时回顾学习。

一、需要管理和回收的内存

    JVM中的“程序计数器”的内存随线程结束而回收,“虚拟机栈”和“本地方法栈”的内存随方法结束而回收,即类结构确定下来,在编译期内存分配也基本确定。因此,”堆内存“和”方法区(非堆内存、hotspot永久代)“是需要在运行期动态分配和垃圾收集器管理的。

 

    1、堆内存:

     python等语言采用“引用计数法”来确定堆内存中的对像是否被使用,计数为0则回收。该方法实现简单效率高,但不能解决java中对象间相互“循环引用”的问题,故引入“可达性分析算法”,任何对象和GC Roots之间必须存在一个“引用链”,否则该对象不可用。

    无论哪种方式,关键还是在“引用”。JDK1.2+,引用分为强引用(不会回收)、软引用(SoftReference类,第二次gc时内存紧张会回收)、弱引用(WeakReference类,无论内存是否紧张下一次gc前都会回收)、虚引用(PhantomReference类,用于回收时接收系统通知)。

    对象确定死亡前,需要经过“两次标记过程”。可达性分析确定对象和GC Roots之间没有引用链则进行第一次标记,并将需要执行finalize()方法的对象放入F-queue中,等待jvm的finalizer线程去执行,对F-queu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值