java垃圾回收机制

来源:互联网 发布:抽数字软件在线 编辑:程序博客网 时间:2024/06/05 13:33

垃圾回收(garbage collection,简称GC)可以自动清空堆中不再使用的对象。使用垃圾收集器的技术监视java程序的运行,当对象不在使用时,自动释放对象使用的内存。java通过一系列的软指针跟踪对象的引用,并通过一个对象表将这些软指针映射成对象的引用。垃圾回收器以单独的线程在后台运行,依次检查每一个对象,通过修改对象表项,垃圾收集器可以标记对象、移除对象、检查对象。

垃圾收集器自动运行,可以不停检测和回收没有引用的各个对象,使用System.gc()可以不管JVM使用的是哪一种垃圾回收的算法,都可以请求Java的垃圾回收,但不保证立即回收指定对象。(JVM接受这个消息后,并不是立即做垃圾回收,而只是对几个垃圾回收算法做了加权,使垃圾回收操作容易发生,或提早发生,或回收较多而已。)

在JVM垃圾回收器收集一个对象之前,一般要求程序调用适当的方法释放资源,但在没有明确释放资源的情况下,Java提供了缺省机制来终止该对象心释放资源,这个方法就是finalize()。它的原型为:protected void finalize() throws Throwable 在finalize()方法返回之后,对象消失,垃圾收集开始执行。原型中的throws Throwable表示它可以抛出任何类型的异常。

一旦垃圾回收器准备好释放对象占用的存储空间,首先会去调用finalize()方法进行一些必要的清理工作。只有到下一次再进行垃圾回收动作的时候,才会真正释放这个对象所占用的内存空间。

是否符合垃圾收集器的标准:
1.给对象赋予了空值null,以后再没有调用过。
2.给对象赋予了新值,即重新分配内存空间,原来对象会被收集。
(Object sobject=new Object(); sobject= new Object())

减少GC开销的措施:
(1)尽量减少临时对象的使用

  临时对象在跳出函数调用后,会成为垃圾,少用临时变量就相当于减少了垃圾的产生,从而延长了出现上述第二个触发条件出现的时间,减少了主GC的机会。

  (2)对象不用时最好显式置为Null

  一般而言,为Null的对象都会被作为垃圾处理,所以将不用的对象显式地设为Null,有利于GC收集器判定垃圾,从而提高了GC的效率。

  (3)尽量使用StringBuffer,而不用String来累加字符串

  由于String是固定长的字符串对象,累加String对象时,并非在一个String对象中扩增,而是重新创建新的String对象,如Str5=Str1+Str2+Str3+Str4,这条语句执行过程中会产生多个垃圾对象,因为对次作“+”操作时都必须创建新的String对象,但这些过渡对象对系统来说是没有实际意义的,只会增加更多的垃圾。避免这种情况可以改用StringBuffer来累加字符串,因StringBuffer是可变长的,它在原有基础上进行扩增,不会产生中间对象。

  (4)能用基本类型如Int,Long,就不用Integer,Long对象

  基本类型变量占用的内存资源比相应对象占用的少得多,如果没有必要,最好使用基本变量。

  (5)尽量少用静态对象变量

  静态变量属于全局变量,不会被GC回收,它们会一直占用内存。

  (6)分散对象创建或删除的时间

  集中在短时间内大量创建新对象,特别是大对象,会导致突然需要大量内存,JVM在面临这种情况时,只能进行主GC,以回收内存或整合内存碎片,从而增加主GC的频率。集中删除对象,道理也是一样的。它使得突然出现了大量的垃圾对象,空闲空间必然减少,从而大大增加了下一次创建新对象时强制主GC的机会。

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 母狗生不出来了怎么办 电视锁屏失败了怎么办? 海尔户户通位置信息改变怎么办 户户通e02智能卡通信失败怎么办 户户通e04未授权怎么办 查环保没生意做怎么办 怎么办扬大牛奶直销点 军人在退伍的时候带病怎么办 个税密码忘记了怎么办 地税网上申报密码忘记了怎么办 国税银行缴款凭证丢失了怎么办 税务局让法人缴税法人不缴会怎么办 税盘忘记清卡怎么办 7年没申报地税怎么办 已报税忘了清卡怎么办 国税报税密码忘了怎么办 有一个月忘报税了怎么办 地税报税密码忘了怎么办 电子税务账号忘记了怎么办 国税ukey密码忘了怎么办 电子税务局显示版本低怎么办 电子税务局2.0不显示打印怎么办 青海建筑三级资质初申是怎么办 欠钱败诉没钱还怎么办 学校退款卡丢了怎么办 学校发的卡掉了怎么办 汇款回执单丢了怎么办 大学交学费的卡丢了怎么办 交学费的银行卡丢了怎么办 学校补助卡丢了怎么办 学校交学费的卡丢了怎么办 采购零星材料无发票怎么办 租房合同弄丢了怎么办 买房的合同丢了怎么办 押金的收据丢了怎么办 房东的合同掉了怎么办 个人档案里单位没有放合同怎么办 签的合同掉了怎么办 一方合同弄丢了怎么办 合同丢了怎么办如何补 签了定金合同对方违约怎么办