《深入理解java虚拟机》学习笔记四/垃圾收集器GC学习/一
不管当前内存是否足够,都会被垃圾收集器回收掉。
一个对象是否有虚引用的存在。全然不会对其生存时间构成影响,也无法通过一个虚引用来取得一个对象的实例。
为一个对象设置虚引用的唯一目的就是能在这个对象被收集器回收时收到一个系统通知。
package com.smile.three; /**
* 此代码演示了两点:
* 1.对象能够在被GC时自我解救。
* 2.这样的自救的机会仅仅有一次。由于一个对象的finalize()方法最多仅仅会被系统自己主动调用一次
* @author 深入理解JVM作者周志明zzm
*/
public class FinalizeEscapeGC { //定义对象
public static FinalizeEscapeGC SAVE_HOOK = null; //活着的对象能够调用的方法
public void isAlive() {
System.out.println("yes, i am still alive :)");
} //重写finalize()方法
@Override
protected void finalize() throws Throwable {
super.finalize();
System.out.println("finalize mehtod executed!finalize方法被运行了");
FinalizeEscapeGC.SAVE_HOOK = this;
} public static void main(String[] args) throws Throwable {
//创建对象并赋值
SAVE_HOOK = new FinalizeEscapeGC(); //对象第一次成功解救自己
SAVE_HOOK = null;
System.gc();
// 由于Finalizer方法优先级非常低,暂停0.5秒,以等待它
Thread.sleep(500);
if (SAVE_HOOK != null) {
SAVE_HOOK.isAlive();
} else {
System.out.println("no, i am dead :(");
} // 以下这段代码与上面的全然同样,可是这次自救却失败了
SAVE_HOOK = null;
System.gc();
// 由于Finalizer方法优先级非常低,暂停0.5秒,以等待它
Thread.sleep(500);
if (SAVE_HOOK != null) {
SAVE_HOOK.isAlive();
} else {
System.out.println("no, i am dead :(");
}
}
}
所以在第二次回收的时候。它的finalize()方法就失效了。
GC回收涉及内容较多,我还在学习其中,这个系列博客会持续更新。
《深入理解java虚拟机》学习笔记四/垃圾收集器GC学习/一的更多相关文章
- 《深入理解Java虚拟机》笔记03 -- 垃圾收集器
收集器可以大致分为:单线程收集器, 并发收集器和并行收集器. 并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态. 并发(Concurrent):指用户线程与垃圾收集 ...
- 深入理解Java虚拟机 第三章 垃圾收集器 笔记
1.1 垃圾收集器 垃圾收集器是内存回收的具体实现.以下讨论的收集器是基于JDK1.7Update14之后的HotSpot虚拟机.这个虚拟机包含的所有收集器有: 上图展示了7种作用于不同分代的收集 ...
- 深入理解java虚拟机(五)垃圾收集器
垃圾收集器 垃圾收集器是垃圾收集算法的具体实现.Java规范对垃圾收集器的实现没有做任何规定,因此不同的虚拟机提供的垃圾收集器可能有很大差异.HotSpot虚拟机1.7版本使用了多种收集器.如下图. ...
- 深入理解java虚拟机(2)------垃圾收集器和内存分配策略
GC可谓是java相较于C++语言,最大的不同点之一. 1.GC回收什么? 上一篇讲了内存的分布. 其中程序计数器栈,虚拟机栈,本地方法栈 3个区域随着线程而生,随着线程而死.这些栈的内存,可以理解为 ...
- 《深入理解Java虚拟机》笔记02 -- 垃圾收集算法
1. 标记 - 清除算法 先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象.它是最基础的收集算法.其他收集算法都是根据其思路,改进其不足之处. 缺点:1) 标记和清除两个阶段的效率都不 ...
- [Note][深入理解Java虚拟机] 第三章 垃圾收集器与内存分配策略笔记
书上关于GCTimeRatio的讲解有点难以理解,查看Oracle的文档后重新理解了下 -XX:GCTimeRatio 运行时间 / GC时间 当GCTimeRatio为19时,运行时间是GC时间的1 ...
- java之jvm学习笔记四(安全管理器)
java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...
- 《深入理解Java虚拟机》(四)虚拟机性能监控与故障处理工具
虚拟机性能监控与故障处理工具 详解 4.1 概述 本文参考的是周志明的 <深入理解Java虚拟机> 第四章 ,为了整理思路,简单记录一下,方便后期查阅. JDK本身提供了很多方便的JVM性 ...
- 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域
深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理 ...
随机推荐
- Centos7(阿里云服务器)安装Anaconda的详细步骤与心得
在本地安装Anaconda的各个版本的文章已经很多,但是感觉不是很详细,因此,在此发发自己在Centos7(阿里云服务器)安装Anaconda的心得和步骤: 注:需要注意的地方会用不同颜色区别. 1. ...
- 洛谷 P1352 没有上司的舞会 (树上不相邻点权和最大)
一颗树,选取不相邻的点,求最大点权值 因为当前结点选或不选后后效性,所以我们加一唯来取消后效性 表示以i为根的树且i不选的最大价值 表示以i为根的树且i选的最大价值 显然有 #include<c ...
- CodeForces 312B Archer
Archer Time Limit: 2000ms Memory Limit: 262144KB This problem will be judged on CodeForces. Original ...
- 智课雅思短语---一、be no exception
智课雅思短语---一.be no exception 一.总结 一句话总结:…也不例外? …be no exception 1.经济的快速发展? the rapid development of ec ...
- 22. Angular 中用 a 标签 href 路由时在浏览器中显示异常 "%2F" 路由失败问题
转自:https://blog.csdn.net/duansale/article/details/77455355 <a href="#/index">index&l ...
- sql的四大函数
字符串函数: 1.charindex(字符串表达式 1, 字符串表达式2[,整数表达式]) select charindex('ab','BCabTabD')返回 3 select charindex ...
- [工具] UltraEdit使用技巧汇总
ltraEdit是一套功能强大的文本编辑器,可以编辑文本.十六进制.ASCII码,可以取代记事本,内建英文单字检查.C++及VB指令突显,可同时编辑多个文件,而且即使开启很大的文件速度也不会慢.说到编 ...
- 网络协议 4 - 交换机与 VLAN
上一次,我们通过公司需求,认识了如何通过物理层和链路层组建一个公司局域网.今天,我们切换到复杂点的办公室场景. 在这个场景里,就不像在大学教室那样,搞几根网线,拉一拉,扯一扯就可以了.一个办公 ...
- scrapy框架设置代理
网易音乐在单ip请求下经常会遇到网页返回码503的情况经查询,503为单个ip请求流量超限,猜测是网易音乐的一种反扒方式因原音乐下载程序采用scrapy框架,所以需要在scrapy中通过代理的方式去解 ...
- 关于idea开发工具常用的快捷键
自动补全缺失的import alt+enter 自动优化import ctrl+alt+o 自动补全返回代码:IDEA的ctrl+alt+v ,eclipse的CTRL+F1 main p ...