读书笔记-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 代码时可能会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,也 ...
随机推荐
- Builder(构造者)
Builder(构造者) <?php class Product { private $name; public function setName($name) { $this->name ...
- Given a linked list, reverse the nodes of a linked list k at a time and return its modified list. k is a positive integer and is less than or equal to the length of the linked list. If the number of
class Solution { public: ListNode *reverseKGroup(ListNode *head, int k) { if (!head || !(head->ne ...
- Leetcode 335.路径交叉
路径交叉 给定一个含有 n 个正数的数组 x.从点 (0,0) 开始,先向北移动 x[0] 米,然后向西移动 x[1] 米,向南移动 x[2] 米,向东移动 x[3] 米,持续移动.也就是说,每次移动 ...
- Working out (DP)
Summer is coming! It's time for Iahub and Iahubina to work out, as they both want to look hot at the ...
- TOJ 5065: 最长连续子序列
5065: 最长连续子序列 Time Limit(Common/Java):1000MS/3000MS Memory Limit:65536KByteTotal Submit: 140 ...
- post 发送ajax请求
1.ajax五步曲 <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...
- HackerRank# Red John is Back
原题地址 简单动归+素数判定,没用筛法也能过 代码: #include <cmath> #include <cstdio> #include <vector> #i ...
- BZOJ 3309 DZY Loves Math ——莫比乌斯反演
枚举$d=gcd(i,j)$ 然后大力反演 ——来自Popoqqq的博客. 然后大力讨论后面的函数的意义即可. http://blog.csdn.net/popoqqq/article/details ...
- BZOJ2425 [HAOI2010]计数 【数位dp】
题目 你有一组非零数字(不一定唯一),你可以在其中插入任意个0,这样就可以产生无限个数.比如说给定{1,2},那么可以生成数字12,21,102,120,201,210,1002,1020,等等. 现 ...
- hdu 2100
#include<stdio.h> #include<string.h> char a[300],b[300]; int a1[300],b1[300]; int main() ...