读书笔记-2java虚拟机的可达性算法与finalize方法
关于可达性分析算法,在jvm中有个GC Root Set ,里面有不确定个数的gc root 。能够作为gc root的对象有下面几种
1.虚拟机栈中的引用对象
2.方法区中类静态属性引用的对象
3.方法区中的常量引用的对象
4.本地方法栈中jni引用的对象
jvm就是通过这些gc root来判定对象是否还存活的。该算法的基本思想是通过一系列的gc root 做为起始点向下搜索,搜索走过的路径称为引用链,当一个对象到gc root没有不论什么引用链的时候,就说明该对象是不可引用的,此时不可被引用的对象便是能够回收的对象。
resizeSmall&width=786" alt="" name="2824783d-01eb-41d3-8f1e-5ca1123e0dd8" class="en-media" style="margin:0.857412em 0px 1.286em; padding:0px; border:0px; max-width:100%; height:auto">
尽管是能够回收的。这里还涉及到了是否一定会被回收。
- 当对象无法与gc root相连时。判定对象是能够回收的
- 当对象被判定为能够回收的时候。推断其时候一定要被回收
- 在1,2两个条件满足的情况下。当对象没有覆盖finalize方法。或者finaze方法被运行过虚拟机将判定该对象没有必要运行finalize方法
- 假设被判定为没有必要运行finalize方法,那么将会把对象放到一个F-Queue(finalize queue :释放队列)中。最后将由虚拟机建立一个低优先级的finalizer线程去释放F-Queue中的对象
- 在释放过程中对象还能够完毕一次自救,自救的方法就是让自己与gc root关联起来就能够了比如在对象的finalize方法中把自己也就是this赋值给一个一个其它对象的变量类型是当前对象的类型属性(可是假设这个其它对象也是在F-Queue中的就不能完毕自救,原因就是这个其它对象本省并不能与gc root相关联),可是由于不论什么一个对象的finalizer方法仅仅能由虚拟机运行一次,所以不论什么一个须要被回收的对象。也仅仅能完毕一次自救。
finalize这种方法建议大家平时不要用,这种方法全然是当时java诞生的时候为了照应c++程序猿做出的一种妥协,正常开发过程中全然能够忘记有这种方法。
QQ:645707787
Phone:18311276689
假设有哪里不对的地方,欢迎指正。
读书笔记-2java虚拟机的可达性算法与finalize方法的更多相关文章
- 机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能
前言 最近在看Peter Harrington写的"机器学习实战",这是我的学习笔记,这次是第7章 - 利用AdaBoost元算法提高分类性能. 核心思想 在使用某个特定的算法是, ...
- 游戏人工智能 读书笔记 (四) AI算法简介——Ad-Hoc 行为编程
本文内容包含以下章节: Chapter 2 AI Methods Chapter 2.1 General Notes 本书英文版: Artificial Intelligence and Games ...
- JVM笔记2-Java虚拟机内存管理简介
java虚拟机内存管理图如下图所示: 1.线程共享区,是所有的线程所共用的,线程共享区有一下几个组成: 1.方法区: 1.运行时常量池,已经被虚拟机加载的类信息(1.类的版本信息,2.字段,3.方法, ...
- 《深入理解 Java 虚拟机》读书笔记:虚拟机性能监控与故障处理工具
正文 一.JDK 的命令行工具 JDK 的 bin 目录下提供了一些用于监视虚拟机和故障处理的命令行工具. 名称 主要作用 jps JVM Process Status Tool,显示正在运行的虚拟机 ...
- 【转载】 机器学习实战 - 读书笔记(07) - 利用AdaBoost元算法提高分类性能
原文地址: https://www.cnblogs.com/steven-yang/p/5686473.html ------------------------------------------- ...
- 图论——读书笔记(基于BFS广度优先算法的广度优先树)
广度优先树 对于一个图G=(V,E)在跑过BFS算法的过程中会创建一棵广度优先树. 形式化一点的表示该广度 优先树的形成过程是这样的: 对于图G=(V,E)是有向图或是无向图, 和图中的源结点s, 我 ...
- effective stl读书笔记 & stl里面提供的算法 & emplace & ostream_iterator
加锁和解锁,也可以在构造函数和析构函数里面,自动调用. 相等和等价的关系:等价是用在排序的时候,跟less函数有关. vector,deque,string 要用erase-remove组合:而关联容 ...
- 《深入理解 Java 虚拟机》读书笔记:虚拟机类加载机制
正文 虚拟机把描述类的数据从 Class 文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的 Java 类型,这就是虚拟机的类加载机制. 一.类加载的时机 1.类的生命 ...
- 《深入理解 Java 虚拟机》读书笔记:虚拟机字节码执行引擎
正文 执行引擎是 Java 虚拟机最核心的组成部分之一.在不同的虚拟机实现里,执行引擎在执行 Java 代码时可能会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也 ...
随机推荐
- Linux rm删除
将 test1子目录及子目录中所有档案删除 命令: rm -r test1 rm -rf test2命令会将 test2 子目录及子目录中所有档案删除,并且不用一一确认 命令: rm -rf tes ...
- pytorch保存模型等相关参数,利用torch.save(),以及读取保存之后的文件
本文分为两部分,第一部分讲如何保存模型参数,优化器参数等等,第二部分则讲如何读取. 假设网络为model = Net(), optimizer = optim.Adam(model.parameter ...
- nginx进程属主问题讨论
文章作者:luxianghao 文章来源:http://www.cnblogs.com/luxianghao/p/6107096.html 转载请注明,谢谢合作. 免责声明:文章内容仅代表个人观点,如 ...
- [USACO08DEC]Trick or Treat on the Farm (拓扑排序,DP)
题目描述 每年万圣节,威斯康星的奶牛们都要打扮一番,出门在农场的N个牛棚里转 悠,来采集糖果.她们每走到一个未曾经过的牛棚,就会采集这个棚里的1颗糖果. 农场不大,所以约翰要想尽法子让奶牛们得到快乐. ...
- 16.1113 模拟考试T1
笔记[问题描述]给定一个长度为m的序列a,下标编号为1~m.序列的每个元素都是1~N的整数.定义序列的代价为累加(1->m-1 abs(ai+1-ai))你现在可以选择两个数x和y,并将序列?中 ...
- 【调试】JS断点调试
1.断点调试是啥?难不难? 断点调试其实并不是多么复杂的一件事,简单的理解无外呼就是打开浏览器,打开sources找到js文件,在行号上点一下罢了.操作起来似乎很简单,其实很多人纠结的是,是在哪里打断 ...
- elasticsearch入门使用(三) Query DSL
Elasticsearch Reference [6.2] » Query DSL 参考官方文档 :https://www.elastic.co/guide/en/elasticsearch/refe ...
- Codeforces 713C Sonya and Problem Wihtout a Legend(DP)
题目链接 Sonya and Problem Wihtout a Legend 题意 给定一个长度为n的序列,你可以对每个元素进行$+1$或$-1$的操作,每次操作代价为$1$. 求把原序列变成 ...
- 关于xshell无法连接到centos的问题
1.xshell无法连接到centos:拒绝连接(无线网) 在xshell ping centos出现: 解决方法: 1. 2.重启下网卡: [root@localhost ~]# /etc/init ...
- STM32调试问题
1.JLINK V8 error:flash download failed - could not load file: Options for Target 'Targer 1'下的菜单下Outp ...