zoukankan      html  css  js  c++  java
  • JVM垃圾回收机制四

    GCRoots与可达性分析

    Java中的四种引用

    强引用、软引用、弱引用、虚引用。这四种引用的强度是逐渐减弱的,JVM垃圾回收的力度是逐渐增强的。
    四种引用的作用
    1、可以让程序员通过代码来控制对象的生命周期
    2、有利于JVM判断哪些引用是否回收。
    强引用

    Object object =new Object();
    String str ="hello";
    

    强引用有引用变量回收时,永远不会被垃圾回收器回收。如果内存不足,JVM宁愿抛出OOM错误也不会回收这种对象。
    如果想中断强引用,可以显示的将引用赋值为null;Vector的clear方法即是如此
    软引用

    1. MyObject aRef = new  MyObject();  
    2. SoftReference aSoftRef=new SoftReference(aRef);  
    

    如果一个对象具有软引用,内存空间足够,垃圾回收器就不会回收。不足就会回收。
    弱引用

     WeakReference<People>reference=new WeakReference<People(new People("zhouqian",20));  
    

    当JVM进行垃圾回收时,无论内存是否充足都会回收弱引用。
    虚引用:需引用任何时候都有可能被垃圾回收期回收。

    ReferenceQueue<String> queue = new ReferenceQueue<String>();  
    PhantomReference<String> pr = new PhantomReference<String>(new String("hello"), queue);  
    
    

    Java引用与可达性分析


    如图所示:1和2是强引用,4是软引用,6是弱引用。对对象5的引用判断:1和4这条引用链选取最弱的引用,4是最弱的,则1-4引用链是软引用;2和6这条引用链,6是最弱的,则2-6是弱引用,那么在1-4和2-6引用链中选取最强的引用,对象5的引用为软引用。

    再谈GC Roots对象

    1、虚拟机栈(栈帧局部变量)引用的对象作为GC Roots

    	public static void method01() {
    		TestGCRoots01 t = new TestGCRoots01();
    		System.gc();
    		System.out.println("第一次GC完成");
    	}
    
    

    t为局部变量,new出了一个对象,作为GC Roots。只要method1方法运行,t就不会消失,直到方法运行完栈帧出站,不再有指针指向该对象,那么该对象就会被垃圾回收。
    2、方法区中的静态变量引用的对象

    private static int _10MB = 10 * 1024 * 1024;
    private static TestGCRoots02 t;
    public static void main(String[] args) {
    		TestGCRoots02 t2 = new TestGCRoots02(4 * _10MB);
    		t2.t = new TestGCRoots02(8 * _10MB);
    		t2 = null;
    		System.gc();
    	}
    
    

    t作为静态变量,引用的对象不会被回收,t2被置为null,引用的对象会被回收
    3、方法区中常量引用对象

    private static final TestGCRoots03 t = new TestGCRoots03(8 * _10MB);
    
    

    t为常量,只被final修饰的常量会被回收,被static final修饰的不会被回收。

  • 相关阅读:
    Open War I: 野王复活与视野,望远镜视野,近距离射击,远程狙击
    取石子(六)_nyoj_585(博弈-奇异矩阵).java
    (step6.1.1)hdu 1879(继续畅通工程——最小生成树、kruscal)
    iOS的@property属性和@synthesize属性
    [Python]datetime常用的几个操作
    论明天
    汉语-词语-清净:百科
    汉语-词语-解脱:百科
    汉语-词语-放下:百科
    汉语-词语-执着:百科
  • 原文地址:https://www.cnblogs.com/ozho/p/10599437.html
Copyright © 2011-2022 走看看