博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JVM GC 垃圾回收(二)之 判断那些可回收,怎么回收
阅读量:4632 次
发布时间:2019-06-09

本文共 579 字,大约阅读时间需要 1 分钟。

1、哪些对象可回收?

可行性分析算法

通过一系列GC Roots(®1)作为起始点,其到对象之间的引用(®2)称为引用链,当对象到GC Roots之间不存在引用链相连,

则此对象是不可用的。如下,Object5,Object6,Object7被判定为可回收对象。

2、怎么回收?

3、方法区回收:

a.废弃常量:

没有任何String对象引用常量池的常量,也没有其他地方引用这个常量。

b.无用的类:

下列条件全部满足:

1.该类所有的实例都已经被回收。

2.加载改类的ClassLoader已经被回收

3.该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。

 

®1 GC Roots

1.虚拟机栈中引用的对象

2.方法区中类静态属性引用的对象

3.方法区中常量引用的对象

4.本地方法栈中JNI引用的对象(java中C/C++编写的方法)

®2 引用

强引用:new 对象,引用还存在,对象不回收。

软引用:有用但非必需的对象。系统将要内存溢出之前,将这些对象列进回收范围中进行第二次回收。回收完内存还不够,则内存溢出。

弱引用:非必需对象。只能生存到下次垃圾回收之前。

虚引用:回收之前收到系统通知。

转载于:https://www.cnblogs.com/codegod/p/8444071.html

你可能感兴趣的文章
C# 进制转换
查看>>
C中级 MariaDB Connector/C API 编程教程
查看>>
C 中级 - SO_REUSEPORT 和 SO_REUSEADDR
查看>>
网络配置:linux学习第一篇
查看>>
多域名同一个IP在IIS环境下架设多个网站 主机头
查看>>
Python学习之路!!!之整数、字符串介绍
查看>>
Mysql授权远程登录
查看>>
java4中创建内对象的方法
查看>>
使用Docker Swarm搭建分布式爬虫集群
查看>>
脚踏实地学C#3-装箱和拆箱
查看>>
Dubbo定义及其作用
查看>>
APP技术演化的路
查看>>
HDU 1556
查看>>
js获取浏览器屏幕高度、宽度等
查看>>
javascript原型链
查看>>
环信 iOS SDK讲解
查看>>
[随想感悟] 面试时,问哪些问题能试出一个 Android 应用开发者真正的水平?【转自知乎】...
查看>>
ZOJ1969-Hard to Believe, but True!
查看>>
金花菜
查看>>
从MSN Messenger的Hand Writing开始
查看>>