jvm内存自动管理之垃圾收集器(一)

本文探讨了JVM内存自动管理中的垃圾收集器,包括引数计数法和可达性分析法来判断对象是否存活。接着,介绍了复制和标记-整理两种垃圾收集算法及其适用场景。此外,讲解了分代收集策略以及Serial和ParNew两个收集器的工作原理,Serial是单线程的,而ParNew支持多线程垃圾处理。
摘要由CSDN通过智能技术生成


在java程序中,没有了像其他类型编程语言那样的由程序创建者所自行管理内存的方法。转而把内存管理交给了jvm自动进行管理,包含了创建到销毁的全过程。其中销毁的过程由一个垃圾收集器的进行管理。
往往在我们考虑内存问题的时候,我们可能会有以下问题:
垃圾怎么回收
垃圾什么时候回收
什么样的内存需要被回收

在jvm的数据区域中,我们知道程序计数器和本地方法栈、虚拟机栈都是随着线程的创建而产生的,是为每一个线程所私有的。在每一个栈的栈帧随着方法的进入和结束进行的进栈和出栈的操作,内存也随着类信息的确定而被确定下来,在这一部分随着线程和方法的结束而结束。GC就管理我们的方法区和堆的内存。这一部分动态创建和回收。是我们所关注的内容。

垃圾回收的重要一环就是判断这个对象是不是还“存活”?我们可以有以下的方式可以判断

一、引数计数法

基本思路是:给每一个对象分配一个计数器,每次对象被引用时,计数器都加一,引用生效时,计数器减一,当计数器为零的时候,认定当前对象已经“死亡”。

二、可达性分析法

创建一个GC Roots 指针,每次对象被引用时这个根指针就可以指向这个对象,最终以树的形式进行排列,在这个指针下的对象可以通过根指针到达该对象,有一些是不可达的,如object 5、object 6、object 7,虽然它们相互之间有所联系,但是已经不可用了。可以判定该部分的对象已经“死亡”。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值