Java提高:不要主动进行垃圾回收

一、建议 

不要调用system.gc,即使经常出现内存溢出也不要调用,内存溢出是可分析的,是可以查找原因的,GC可不是一个好招数 

二、分析 

System.gc主动进行垃圾回收时一个非常危险的动作。因为它要停止所有的响应,才能检查内存中是否有可回收的对象,这对一个应用系统风险极大。  

三、场景 

如果一个Web应用,所有的请求都会暂停,等待垃圾回收器执行完毕,若此时堆内存(Heap)中的对象少的话则可以接受,一旦对象较多(现在的Web项目越做越大,框架工具越来越多,加载到内存中的对象就更多了),这个过程非常耗时,可能是0.01秒,也可能是1秒,甚至可能是20秒,这就会严重影响到业务的正常运行。 

又如这样一段代码:new String("abc"),该对象没有任何引用,对JVM来说就是个垃圾对象。JVM的垃圾回收器线程第一次扫描(扫描时间不确定,在系统不繁忙的时候执行)时把它贴上一个标签,说“你是可以给回收的”,第二次扫描时才真正地回收该对象,并释放空间。如果我们直接调用System.gc,就等于说“嗨,你,那个垃圾回收器过来检查一下有没有垃圾对象,回收一下”。程序主动招来了垃圾回收器,这意味着正在运行着的系统要让出资源,以供垃圾回收器执行。

新技术,新未来!欢迎大家关注 “1024工场”微信服务号 ,时刻关注我们的最新的技术讯息! (甭客气!尽情的扫描或者长按!)

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
### 回答1: 在 Android 中,可以使用 `System.gc()` 方法来主动触发一次垃圾回收,具体代码如下: ```java System.gc(); ``` 但是需要注意的是,这只是对系统的一个建议,不能保证系统会立即执行垃圾回收。因为系统会根据需要自动调整垃圾回收的时间,确保系统的稳定性和性能。如果你频繁地手动调用垃圾回收,反而会影响系统的性能。 在应用程序的常规操作中,不应该频繁地手动触发垃圾回收。因为这可能会导致性能问题。如果您的应用程序需要频繁地创建和销毁对象,可以考虑使用对象池等技术来减少垃圾回收的频率。 总之,建议在大多数情况下,不要手动触发垃圾回收,让系统自动管理垃圾回收即可。 ### 回答2: Android 是一种基于 Linux 内核的开放源代码移动操作系统,其内置自带了垃圾回收机制来管理内存。Android 的垃圾回收器是一个主动进行垃圾回收的机制,它使用了一种叫分代式垃圾回收(Generational Garbage Collection)的算法。 Android 系统中的垃圾回收器主要负责回收不再被使用的对象,以便释放内存空间供其他对象使用。具体来说,在Android 应用程序的运行过程中,垃圾回收器会定期扫描应用程序的堆内存,标记那些仍然被引用的对象,并且清除那些未被引用的对象。 Android 的垃圾回收器采用了分代式垃圾回收算法。这种算法将堆内存分为新生代和老年代两个部分。新生代主要存放那些存活时间短暂的对象,而老年代则存放那些存活时间较久的对象。垃圾回收器会根据对象的存活时间将它们分配到不同的堆内存区域,并在不同的时间点进行回收。 分代式垃圾回收器的工作原理如下:当新生代内存区域填满时,垃圾回收器会通过一种叫 "复制" 的操作,将存活的对象从新生代区域拷贝到老年代区域。在此过程中,会同时进行对象的标记和清除操作。而老年代的回收则采用了更为复杂的算法,以避免对整个堆内存的扫描。 总的来说,Android 的垃圾回收器能够主动地监测和回收不再被引用的对象,从而提升内存的利用效率,并避免因为内存泄漏导致的系统崩溃或者性能下降。这个过程是在后台进行的,使得开发人员无需手动管理内存,从而更加专注于应用程序的开发和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值