垃圾回收 GC


public class MyObject {
    private String id;

    public MyObject(String id) {
        this.id = id;
    }

    @Override
    public String toString() {
        return "MyObject{" +
                "id='" + id + '\'' +
                '}';
    }
    public void finalize() {
        System.out.println("对象回收"+id);
    }
    
}

引用类型 1.强引用
               2.软引用
               3.弱引用
               4.虚引用
输出结果

源码

public class GCTest {
    public static void main(String[] args){
      int length =5;
        //--------------创建强引用------------
        Set<MyObject> a=new HashSet<MyObject>();
        for(int i=0;i<length;i++){
           MyObject ref=new MyObject("hard_"+i);
           System.out.println("创建强引用:"+ref);
           a.add(ref);
        }
        a=null;
        //------------- 创建软引用-------------
        Set<SoftReference<MyObject>> sa=new HashSet<SoftReference<MyObject>>();
        for (int i = 0; i < length; i++) {
            SoftReference<MyObject> ref=new SoftReference<MyObject>(new MyObject("soft_"+i));
            System.out.println("创建软引用:"+ref.get());
            sa.add(ref);
        }
        System.gc();
        //------------- 创建弱引用-------------
        Set<WeakReference<MyObject>> wa=new HashSet<WeakReference<MyObject>>();
        for (int i = 0; i < length; i++) {
            WeakReference<MyObject> ref=new WeakReference<MyObject>(new MyObject("weak_"+i));
            System.out.println("创建弱引用:"+ref.get());
            wa.add(ref);
        }
        System.gc();
        //------------- 创建虚引用-------------
        ReferenceQueue<MyObject> rq=new ReferenceQueue<MyObject>();
        Set<PhantomReference<MyObject>> pa=new HashSet<PhantomReference<MyObject>>();

        for (int i = 0; i < length; i++) {
            PhantomReference<MyObject> ref=new PhantomReference<MyObject>(new MyObject("phantom_"+i),rq);
            System.out.println("创建虚引用:"+ref.get());
            pa.add(ref);
        }
        System.gc();
    }
}



Java垃圾回收(GC)与引用的种类的更多相关文章

  1. Java 垃圾回收(GC) 泛读

    Java 垃圾回收(GC) 泛读 文章地址:https://segmentfault.com/a/1190000008922319 0. 序言 带着问题去看待 垃圾回收(GC) 会比较好,一般来说主要 ...

  2. [JVM-3]Java垃圾回收(GC)机制和垃圾收集器选择

    哪些内存需要回收? 1.引用计数法 这个算法的实现是,给对象中添加一个引用计数器,每当一个地方引用这个对象时,计数器值+1:当引用失效时,计数器值-1.任何时刻计数值为0的对象就是不可能再被使用的.这 ...

  3. java垃圾回收GC

    垃圾回收时,暂停虚拟机运行 基础假设:大部分对象只存在很短的时间 对于新生代,Minor GC经常会发生 Major/Full GC会对老生代做GC 老生代GC采用Compact算法,移动形成完整的空 ...

  4. [译]Java垃圾回收是如何工作的

    说明:这篇文章来翻译来自于Javapapers 的How Java Garbage Collection Works 这部分教程是为了理解Java垃圾回收的基础以及它是如何工作的.这是垃圾回收系列教程 ...

  5. 类装饰器,元类,垃圾回收GC,内建属性、内建方法,集合,functools模块,常见模块

    '''''''''类装饰器'''class Test(): def __init__(self,func): print('---初始化---') print('func name is %s'%fu ...

  6. Java GC系列(2):Java垃圾回收是如何工作的?

    本文由 ImportNew - 伍翀 翻译自 javapapers. 目录 垃圾回收介绍 垃圾回收是如何工作的? 垃圾回收的类别 垃圾回收监视和分析 本教程是为了理解基本的Java垃圾回收以及它是如何 ...

  7. [译]GC专家系列1: 理解Java垃圾回收

    原文链接:http://www.cubrid.org/blog/dev-platform/understanding-java-garbage-collection/ 了解Java的垃圾回收(GC)原 ...

  8. Java GC专家系列1:理解Java垃圾回收

    了解Java的垃圾回收(GC)原理能给我们带来什么好处?对于软件工程师来说,满足技术好奇心可算是一个,但重要的是理解GC能帮忙我们更好的编写Java应用程序. 上面是我个人的主观的看法,但我相信熟练掌 ...

  9. 转 Java虚拟机5:Java垃圾回收(GC)机制详解

    转 Java虚拟机5:Java垃圾回收(GC)机制详解 Java虚拟机5:Java垃圾回收(GC)机制详解 哪些内存需要回收? 哪些内存需要回收是垃圾回收机制第一个要考虑的问题,所谓“要回收的垃圾”无 ...

随机推荐

  1. WinForm编程时窗体设计器中ComboBox控件大小的设置

    问题描述: 在VS中的窗体设计器中拖放一个ComboBox控件后想调整控件的大小.发现在控件上用鼠标只能拖动宽度(Width)无法拖动(Height). 解决过程: 1.控件无法拖动,就在属性窗口中设 ...

  2. Spark的应用程序

    Spark的应用程序,分为两部分:Spark driver 和 Spark executor.

  3. JAVA中的常见面试题1

    1.线程同步的方法的使用. sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉InterruptedException异常. wait():使一个线程处于等待状态,并且 ...

  4. java volatile进阶(一)

    本篇文章继续学习volatile.上篇文章简单的介绍了volatile和synchonized,这篇文章讲一下什么时候可以用volatile. 先看一段代码. package com.chzhao.v ...

  5. [iOS 多线程 & 网络 - 4.0] - AFN框架简单使用

    A.AFN基本知识 1.概念 AFNetworking 是对NSURLConnection的封装 运行效率没有ASI高(因为ASI基于CFNetwork),但是使用简单 AFN支持ARC     B. ...

  6. CodeForces 706A Beru-taxi (数学计算,水题)

    题意:给定一个固定位置,和 n 个点及移动速度,问你这些点最快到固定点的时间. 析:一个一个的算距离,然后算时间. 代码如下: #pragma comment(linker, "/STACK ...

  7. Map 排序

    /** * 通过map 的 value 排序,并返回排序后的第一个条目 * * @param m 待排序集合 * @param desc true:降序排序,false:升序排序 * @return ...

  8. 被mysql中的wait_timeout坑了

    今天被mysql里的wait_timeout坑了         网上能搜到很多关于mysql中的wait_timeout相关的文章,但是大多数只是说明了他的作用,而且都说这个参数要配合那个inter ...

  9. OS X Git连接github

    1. 运行到.local 2. cd ~/.ssh查看文件是否存在 3. ssh-keygen(创建public & private key) 4. 或者运行如下命令:cd ~/.ssh &a ...

  10. Nexus搭建Manven

    Nexus相当于中转服务器,减轻网络的负载,加速项目搭建的进程 1.下载地址:http://www.sonatype.org/nexus/go 2.下载的是zip包,解压后进入D:\nexus-2.8 ...