zoukankan      html  css  js  c++  java
  • Java垃圾回收机制--入门

    Java垃圾回收机制(gc)
            在程序运行过程中,每创建一个对象都会被分配一定的内存用以存储对象数据。如果一味的去占用内存而不释放,则会遇到内存溢出的问题。
            在程序运行的过程中,gc会用引用计数法去统计对象被多少其他对象持有,如果对象已经没有被引用,那么该对象转变为可复活状态
    (对于gc线程来说对象有三种状态:

        1.     可触及状态:程序中还有变量引用,那么此对象为可触及状态。

        2.     可复活状态:当程序中已经没有变量引用这个对象,那么此对象由可触及状态转为可复活状态。CG线程将在一定的时间准备调用此对象的finalize方法(finalize方法继承或重写自Object),finalize方法内的代码有可能将对象转为可触及状态,否则对象转化为不可触及状态。

        3.     不可触及状态:只有当对象处于不可触及状态时,GC线程才能回收此对象的内存。

    GC为了能够正确释放对象,必须监控每一个对象的运行状态,包括对象的申请、引用、被引用、赋值等,GC都需要进行监控,所以无论一个对象处于上文中的任何状态GC都会知道。
     
    GC线程会在一定的时间执行可复活状态对象的finalize方法,那么何时执行呢?由于不同的JVM实现者可能使用不同的算法管理GC,所以在任何时候,开发者无法预料GC线程进行各项操作(包括检测对象状态、释放对象内存、调用对象的finalize方法)的时机。虽然可以通过System.gc()和Runtime.getRuntime().gc()函数提醒GC线程尽快进行垃圾回收操作,但是这也无法保证GC线程马上就会进行相应的回收操作。
    Java中垃圾收集器自动地定期扫描Java对象的动态内存,并将所有的引用对象加上标记,在对象运行结束后(无引用变量对该对象进行关联),清除其标记,并将所有无标记的对象作为垃圾进行回收,释放垃圾对象所占的内存空间。
     
    对于占用空间比较大的对象(比如大数组),推荐在确认不再使用的时候将其值为null,jvm在回收大对象的时候不如小对象来的及时,置为null就能强制在下次GC的时候回收掉他
    奋斗
  • 相关阅读:
    bzoj3996: [TJOI2015]线性代数
    bzoj3319: 黑白树
    bzoj3745: [Coci2015]Norma
    bzoj2437: [Noi2011]兔兔与蛋蛋
    bzoj1110: [POI2007]砝码Odw
    bzoj4919: [Lydsy1706月赛]大根堆
    bzoj5085: 最大
    bzoj2721: [Violet 5]樱花
    Theoretical & Applied Mechanics Letters第2届编委会2015年度第1次全体编委会工作会议纪要(转自力学学会)
    法国石墨烯研究者成功合成二维材料锗烯
  • 原文地址:https://www.cnblogs.com/ClearX/p/5507103.html
Copyright © 2011-2022 走看看