GC为什么影响程序效率

5 篇文章 0 订阅

java垃圾回收机制 早期的jvm使用引用计数,现在大多数jvm采用对象引用遍历。对象引用遍历从一组对 象开始,沿着整个对象图上的每条链接,递归确定可到达(reachable)的对象。如果某对 象不能从这些根对象的一个(至少一个)到达,则将它作为垃圾收集。在对象遍历阶段, gc必须记住哪些对象可以到达,以便删除不可到达的对象,这称为标记(marking)对象。下一步,gc要删除不可到达的对象。删除时,有些gc只是简单的扫描堆栈,删除未标 记的对象,并释放它们的内存以生成新的对象,这叫做清除(sweeping)。这种方法的问 题在于内存会分成好多小段,而它们不足以用于新的对象,但是组合起来却很大。因此,许 多gc可以重新组织内存中的对象,并进行压缩(compact),形成可利用??空间。 为此,gc需要停止其他的活动。这种方法意味着所有与应用程序相关的工作停止,只有 gc运行。结果,在响应期间增减了许多混杂请求。另外,更复杂的gc不断增加或同时运行 以减少或者清除应用程序的中断。有的gc使用单线程完成这项工作,有的则采用多线程以 增加效率
用户Java程序运行过程中,Java虚拟机提供了另外一个系统级的线程,专门负责回收不再被使用的对象占用的内存,这一过程称为垃圾回收。
垃圾回收需要对堆内存中的对象进行标记,并对堆内存进行整理。这一过程的某些阶段需要暂时终止用户Java线程,等回收工作完成后再恢复执行。
因此,频繁地触发虚拟机垃圾回收操作的行为会影响程序的运行效率。
那么什么情况下会频繁地出发垃圾回收操作呢?
- 比如:堆内存设置过小
- 再比如:程序频繁地分配大型局部对象数组

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值