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修饰的不会被回收。

JVM垃圾回收机制四的更多相关文章

  1. JVM垃圾回收机制总结:调优方法

    转载: JVM垃圾回收机制总结:调优方法 JVM 优化经验总结 JVM 垃圾回收器工作原理及使用实例介绍

  2. JVM内存管理和JVM垃圾回收机制

    JVM内存管理和JVM垃圾回收机制(1) 这里向大家描述一下JVM学习笔记之JVM内存管理和JVM垃圾回收的概念,JVM内存结构由堆.栈.本地方法栈.方法区等部分组成,另外JVM分别对新生代和旧生代采 ...

  3. JVM垃圾回收机制概述

    JVM垃圾回收机制概述 1.定义 是指JVM用于释放那些不再使用的对象所占用的内存. 2.方式 2.1引用计数(早期) 当引用程序创建引用以及引用超出范围时,JVM必须适当增减引用数.当某个对象的引用 ...

  4. Java虚拟机学习笔记——JVM垃圾回收机制

    Java虚拟机学习笔记——JVM垃圾回收机制 Java垃圾回收基于虚拟机的自动内存管理机制,我们不需要为每一个对象进行释放内存,不容易发生内存泄漏和内存溢出问题. 但是自动内存管理机制不是万能药,我们 ...

  5. JVM基础系列第8讲:JVM 垃圾回收机制

    在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由<Java 虚拟机规范>指定的,每个 Java 虚拟机可能都有不同的实现.其实涉及到 Java 虚拟机的内存, ...

  6. JVM内存管理、JVM垃圾回收机制、新生代、老年代以及永久代

    内存模型 JVM运行时数据区由程序计数器.堆.虚拟机栈.本地方法栈.方法区部分组成,结构图如下所示. JVM内存结构由程序计数器.堆.栈.本地方法栈.方法区等部分组成,结构图如下所示: 1)程序计数器 ...

  7. JVM 垃圾回收机制和常见算法和 JVM 的内存结构和内存分配(面试题)

    一.JVM 垃圾回收机制和常见算法 Sun 公司只定义了垃圾回收机制规则而不局限于其实现算法,因此不同厂商生产的虚拟机采用的算法也不尽相同.GC(Garbage Collector)在回收对象前首先必 ...

  8. JVM垃圾回收机制和常用算法

    由于疫情的原因,所以目前一直在家远程办公,所以很多时间在刷面试题,发现2019大厂的面试虽然种类很多,但是总结了一下发现主要是这几点:算法和数据结构. JVM.集合.多线程.数据库这几点在面试的时候比 ...

  9. 真的可惜,四面阿里,结果我被JVM垃圾回收机制与 OOM异常卡住了

    前言 为什么需要垃圾回收 首先我们来聊聊为什么会需要垃圾回收,假设我们不进行垃圾回收会造成什么后果,我们举一个简单的例子 我们住在一个房子里面,我们每天都在里面生活,然后垃圾都丢在房子里面,又不打扫, ...

随机推荐

  1. BZOJ 1567: [JSOI2008]Blue Mary的战役地图

    1567: [JSOI2008]Blue Mary的战役地图 Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 1011  Solved: 578[Sub ...

  2. nginx 反向代理配置

    转载一篇特别好的nginx配置博文:http://www.cnblogs.com/hunttown/p/5759959.html

  3. 利用NDK崩溃日志查找BUG

    转自:http://www.tuicool.com/articles/qQNfUfe 背景介绍 本文主要内容: 利用android的crash log来对c++开发的android应用进行错误定位. ...

  4. Lagom学习 (三)

    lagom代码中有大量的Lambda表达式,首先补习一下lambda表达式和函数式接口的相关知识. 一: 函数式接口: 函数式接口其实本质上还是一个接口,但是它是一种特殊的接口: 这种类型的接口,使得 ...

  5. Ubuntu候选栏乱码

    解决方案 cd ~/.config rm -rf SogouPY* sogou* 注销重新登录就可以

  6. Eclipse简介和使用

    常用快捷键 快捷键的配置,常用快捷键: 内容提示: Alt + / 例如: System.out.println(); 语句 ,syso再按住alt 和/ 就会补全. 忘记某个类如何书写,可以写出一部 ...

  7. 项目debug2

    用户登录后,邮件发送失败?为什么呢? 密码得是,授权码,而不是,qq的密码.

  8. UVaLive 4731 Cellular Network (期望DP)

    题意:手机在蜂窝网络中的定位是一个基本问题,假设蜂窝网络已经得知手机处于c1,c2,,,cn这些区域中的一个,最简单的方法是同时在这些区域中寻找手机, 但这样做很浪费带宽,由于蜂窝网络中可以得知手机在 ...

  9. yzm10与战地信使 yzm10原创系列

    yzm10与战地信使 M国与R国正进行着激烈的鏖战,此时的yzm10从R国窃取了最高军事机密,这份情报将是此次战役的转折点,如果M国得到了这份情报,就能够取得这次战争的胜利.yzm10当然是站在M国这 ...

  10. web测试与手机测试的区别

    1.web是B/S,移动端是C/S 2.系统的性能: B/S的优势是异地浏览和信息采集比较灵活性,随时随地只要能使用浏览器上网即可 但是客户端只能完成浏览,查询,数据输入等简单工作,绝大部分又服务器承 ...