深入理解java虚拟机---读后笔记(垃圾回收)
运行时数据区,主要包括方法区、虚拟机栈、本地方法栈、堆、程序计数器,该部分内存都是线程隔离的。
然后和其交互的有执行引擎、本地库接口,此部分线程之间是可以共享的。
1、 引用计数算法
给对象添加一个引用计数器,当有一个地方引用它时,计数器值就加1;当引用失效时,计数器值就减1,任何时刻计数器为0的对象就是不可能再被使用的。使用的案例有微软的COM技术、使用ActionScript3的FlashPlayer,Python语言。java语言中没有选用引用计数算法来管理内存,其中最重要的原因是它很难解决对象之间的相互循环引用的问题。
例子:
public class ReferenceCountingGC{public Object instance = null;private static final int _1MB = 1024*1024;/*** 这个成员属性唯一意义就是占点内存,以便能在GC日志中看清楚是否被回收过*/private byte[] bigSize = new byte[2*_1MB];public static void testGC(){ReferenceCountingGC objA = new ReferenceCountingGC();ReferenceCountingGC objB = new ReferenceCountingGC();objA.instance = objB;objB.isstance = objA;objA =null;objB = null;System.gc();} }
这两个对象已经不可能再被访问啦,但是他们之间因为相互的引用着对方,所以他们的引用计数都不为0。
2、根搜索算法
通过一系列名为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径成为引用连(Reference Chain),当一个对象到GC Roots没有任何引用连相连时,则证明该对象是不可达的,则可以被判定为是可回收的对象。
JAVA语言中,可以作为GC Roots的对象包括下面几种:
1)虚拟机栈(栈帧中的本地变量表)中的引用的对象。
2)方法区中的类静态属性引用的对象。
3)方法区中常量引用的对象。
4) 本地方法栈中JNI(即一般说的Native方法)的引用的对象。
转载于:https://www.cnblogs.com/Eunice-mogu/p/5315450.html
深入理解java虚拟机---读后笔记(垃圾回收)相关推荐
- 深入理解java虚拟机之——垃圾回收(垃圾判断,垃圾收集算法,垃圾收集器)
java与C++之间有一道动态内存分配和垃圾收集的"墙",墙里面的人想出来,墙外边的人想进去,或许只有骑在墙上才能清楚的了解,墙内墙外都是牢笼. 上面一句出自<深入理解jav ...
- 深入理解Java虚拟机——JVM垃圾回收机制和垃圾收集器详解
一:概述 说起垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联系起来.在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,顾名思义,垃圾回收就是释 ...
- 学习笔记【Java 虚拟机②】垃圾回收
若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 总目录 学习笔记[Java 虚拟机①]内存结构 学习笔记[Java 虚拟机②]垃圾回收 学习笔记[Java ...
- java虚拟机多久触发垃圾回收_每日一问:讲讲 Java 虚拟机的垃圾回收
昨天我们用比较精简的文字讲了 Java 虚拟机结构,没看过的可以直接从这里查看: 每日一问:你了解 Java 虚拟机结构么? 今天我们必须来看看 Java 虚拟机的垃圾回收算法是怎样的.不过在开始之前 ...
- Java虚拟机之垃圾回收详解一
Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这 ...
- 深入理解JVM虚拟机之垃圾回收
深入理解JVM虚拟机之垃圾回收 什么叫做垃圾? 没有引用指向得对象都称为垃圾,好比如我们放风筝,哪些断了线得风筝都称之为垃圾. JVM怎么查找这些垃圾 一般又两种算法,1.可达性分析.2.引用计数 引 ...
- 浅析Java虚拟机的垃圾回收机制(GC)
目录 一.垃圾回收机制(Garbage Collection) 二.对象回收的时机 引用计数法 可达性分析算法 三.垃圾回收算法 标记-清除算法 标记-复制算法 标记-整理算法 新生代.老年代.永久代 ...
- ReviewForJob——java虚拟机的垃圾回收策略(个人总结)
理解jvm的垃圾回收策略,需要解决以下3个问题 问题1:哪些内存需要回收? 问题2:什么时候进行回收? 问题3:怎样来回收? [解决问题1]哪些内存需要回收? jvm的内存区域有5大块: 1)程序计数 ...
- java虚拟机、垃圾回收、多线程
虚拟机,我们都知道Java程序运行在虚拟机上,虚拟机又和操作系统打交道,最终通过二进制指令操纵电子电路运行.完成数据的读取,存储,运算和输出. 虚拟机在加载.class文件的时候,会在内存开辟一块区域 ...
- Java虚拟机:垃圾回收机制与垃圾收集器
一.垃圾回收机制: 1.垃圾回收的过程: JVM内存区域的程序计算器,虚拟机栈.本地方法栈的生命周期是和线程同步的,随着线程的销毁而自动释放内存,所以只有堆和方法区需要GC,方法区主要是针对常量池的回 ...
最新文章
- netflix 模式创新_创新设计模式:单例模式
- matlab中的导函数驻点,Matlab用导数作定性分析
- JavaMonitor 监视器
- 25 WM配置-策略-入库策略5-定义托盘策略P(Pallet Strategy)
- java String和StringBuilder的执行效率
- 华夏银行招聘计算机笔试题,2019华夏银行招聘结构化面试试题及答案
- Linux安装IDA神器
- 摩托车电动化,一场千亿美元的新战争
- 计算机一级ms office选择题题库,全国计算机等级考试一级MSOFFICE选择题题库.doc
- android投屏到web,网络视频投屏Web Video Cast v5.2.0 for Android 解锁高级版
- 关于 WMV、WMA、ASF、ASX 等格式和 Windows Media Player 的说明
- 一般期刊发表要求如何掌握
- 利用ArcGIS创建注记层制作方法及注意事项
- Python从zip文件里导入包
- pytest文档56-插件打包上传到 pypi 库
- 磁共振功能成像BOLD-fMRI原理
- iOS 14摊上事:新隐私功能遭欧洲16家广告协会反对
- python中beautifulsoup是什么,Python Beautiful Soup简介
- STM32MP157驱动开发——4G通信模块驱动
- windows命令----netstat命令