本文内容过于硬核,建议有 Java 相关经验人士阅读. 0. 引言 一说到 JVM ,大多数人第一个想到的可能就是 GC ,今天我们就来聊一聊和 GC 关系最大的垃圾收集器以及垃圾收集算法,希望能通过本篇文章,让各位同学对 GC 有一个初步大体的认知. 1. 运行时数据区 JVM 在执行的时候会把它所管理的内存划分为几个不同的数据区域.这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁.根据<Java虚拟机规范>…
1.JVM命令行工具 2.垃圾回收算法 3.垃圾收集器…
一.在JVM中什么是垃圾?如何判断一个对象是否可被回收?哪些对象可以作为GC Roots的根 垃圾就是在内存中已经不再被使用到的空间就是垃圾. 1.引用计数法: 内部使用一个计数器,当有对象被引用+1,没有就-1,但是没有办法解决循环引用的问题,JVM不采用此类回收法 2.枚举根节点可达性分析(GC Root) 它必须是一组活跃的引用 思路:通过一系列名为GC Roots的对象作为起始点,从这个被称为GC Root的对象开始向下进行搜索,如果一个对象达到GC Roots 没有任何的引用链相连时,…
垃圾收集器垃圾收集(Garbage Collection,GC).当需要排查各种内存溢出.内存泄露问题时,当垃圾收集成为系统更高并发量的瓶颈时,我们需要去了解GC和内存分配. 检查对象的"存活"状态 引用计数法:每当有一个地方引用对象时,计数器加1:当引用值失效,减1:任何时刻计数器为0,则表示对象不可能再被使用.缺点就是很难解决对象之间相互循环引用的问题.(如a.instance=b;b.instance=a) 可达性分析算法:这个算法的思想是通过一系列成为"GC Root…
1.垃圾回收算法 1.1 标记-清除算法 算法分为“标记”和“清除”阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象.它是最基础的收集算法,效率也很高,但是会带来两个明显的问题: 1.效率问题 2.空间问题,标记清除后会产生大量不连续的碎片 1.2 复制算法 为了解决效率问题,“复制”收集算法出现了.它可以将内存分为大小相同的两块,每次使用其中的一块.当这一块的内存使用完后,就将还存活的对象复制到另一块去,然后再把使用的空间一次清理掉.这样就使每次的内存回收都是对内存区间…
内存回收与分配重点关注的是堆内存和方法区内存(程序计数器占用小,虚拟机栈和本地方法栈随线程有相同的生命周期). 一.判断对象是否存活? 1. 引用计数算法 优势:实现简单,效率高. 致命缺陷:无法解决对象相互引用的问题--会导致对象的引用虽然存在,但是已经不可能再被使用,却无法被回收. 2. 可达性分析算法 对象到GC Roots没有引用链,则回收. GC Roots包括: (1)Java虚拟机栈中引用的对象. (2)方法区中类静态属性引用的对象. (3)方法去中常量引用的对象. (4)本地方法…
本文主要是对<深入理解java虚拟机 第二版>第三章部分做的总结,文章中大部分内容都来自这章内容,也是博客 JVM 学习的第二部分. 简述 说到垃圾收集(Garbage Collection,GC),很多人可能会认为这是 Java 自有的特性,曾经我也一度这样想,后来才知道 GC 的历史要远远长于 Java,它第一次真正使用是在 Lisp 中,现在,像 python.go 等都有自己的垃圾收集器.在 GC 最开始设计时,人们在思考 GC 时就需要完成三件事情: 哪些内存需要进行回收? 什么时候…
1.Java虚拟机原理 所谓虚拟机,就是一台虚拟的机器.他是一款软件,用来执行一系列虚拟计算指令,大体上虚拟机可以分为系统虚拟机和程序虚拟机, 大名鼎鼎的Vmare就属于系统虚拟机,他完全是对物理计算的仿真,提供了一个可以运行完整操作系统的软件平台.程序虚拟机典型代码就是Java虚拟机,它专门为执行单个计算程序而计算,在Java虚拟机中执行的指令我们称为Java字节码指令.无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中.到现在引用最广泛的是HotSpot虚拟机 2.…
目录 前言 什么是垃圾回收 垃圾回收的区域 垃圾回收机制 流程 怎么判断对象已经死亡 引用计数法 可达性分析算法 不可达的对象并非一定会回收 关于引用 强引用(StrongReference) 软引用(SoftReference) 弱引用(WeakReference) 虚引用(PhantomReference) 判断废弃常量 判断无用类 垃圾收集算法 标记-清除算法 标记-复制算法 标记-整理算法 分代收集算法 垃圾收集器 CMS 收集器 Serial 收集器 ParNew 收集器 Parall…
本文目录 1. JVM内存组成结构 2. JVM内存回收 3. 垃圾收集器与算法 4. jdk1.6中class文件结构 5. jdk1.6 1.7 1.8比较 1. JVM内存组成结构 JVM栈由堆.栈.本地方法栈.方法区等部分组成,结构图如下所示:   2. JVM内存回收 Sun的JVMGenerationalCollecting(垃圾回收)原理是这样的:把对象分为年青代(Young).年老代(Tenured).持久代(Perm),对不同生命周期的对象使用不同的算法.(基于对对象生命周期分…