1、判断对象是否存活的算法
(1)引用计数算法:对象中添加一个引用计数器,有一个地方引用它时,计数器值加1;当引用失效时,计数器值减1。计数器的值为0的对象就是不可能再被使用的。(Python、微软的COM技术、Squirrel等使用此算法进行内存管理)。缺点在于难以解决对象之间的相互循环引用问题。
(2)根搜索算法:从一系列的名为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。(Java、C#、Lisp等使用此算法)
2、回收方法区(即HopSpot虚拟机中的永久代)
堆中(尤其是新生代中),常规应用进行一次垃圾收集一般可以回收70%~95%的空间,而永久代的垃圾收集效率远低于此。
永久代的垃圾收集主要加收两部分的内容:废弃常量和无用的类。
3、垃圾收集算法
(1)标记-清除(Mark-Sweep)算法;
(2) 复制(Copying)算法:将内存要为大小相等的两块,每次只使用其中的一块,当这一块内存完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉(现代商业虚拟机都采用这种方式来回收新生代)。
新生代中的对象有98%是朝生夕死的,所以并不需要按照1:1的比例来划分内存空间,而是将内存分为一块较大的Eden空间和两块较小的Survivor空间,每次使用Eden和其中的一块Survivor。当回收时,将Eden和Survivor中存活着的对象一次性地拷贝到另外一块Survivor空间上,最后清理掉Eden和刚才用过的Survivor的空间(Hotspot虚拟机默认Eden和Survivor的比例为8:1)。
(3)标记-整理(Mark-Compact)算法:一般老年代采用。
一般而言,老年代GC(Major GC/Full GC)比新生代GC(Minor GC)的速度慢10倍以上。
4、内存分配与回收策略
(1)对象优先在Eden分配。如果Eden区没有足够的空间,虚拟机将发起一次Minor GC;
(2)大对象直接进入老年代。大对象是指需要大量连续内存空间的Java对象,最典型的大对象就是那种很长的字符串及数组。因此,写程序时应该“朝生夕死”的“短命大对象”。
(3)长期存活的对象将进入老年代。对象在Eden出生,熬过一次Minor GC,其对象年龄就加1,默认对象年龄为15时,就会晋升到老年代。
(4)动态年龄判定。如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代。
(5)空间分配担保。Minor GC前,虚拟机会检测之前每次晋升到老年代的平均大小是否大于老年代的剩余空间大小。如果大于,则改为直接进行一次Full GC;如果小于,则查看HandlePromotionFailure设置是否允许担保失败;如果允许,那只会进行Minor GC;如果不允许,则也要改为进行一次Full GC。
相关推荐
主要整理内容为:分析了垃圾收集的算法和JDK1.7中提供的7款垃圾收集器的特点以及运作原理。以及内存分配策略
深入理解Java虚拟机学习笔记借鉴.pdf
java 虚拟机
作者以易于理解的方式深入揭示了java虚拟机的内部工作原理,深入理解这些内容,将对读者更快速地编写更高效的程序大有裨益! 本书共分20章,第1-4章解释了java虚拟机的体系结构,包括java栈、堆、方法区、执行...
深入理解Java虚拟机笔记(带目录).docx
包括jvm 的内存模型 对象的创建过程 垃圾回收算法 垃圾回收器 内存分配和回收策略
1. JVM调优 1.1 JVM调优总结(一)-一些概念 1.2 JVM调优总结(二)-一些概念 1.3 JVM调优总结(三)-基本垃圾回收算法 1.4 JVM调优总结(四)-垃圾...4.2 JVM内存管理:深入垃圾收集器与内存分配策略 4.3 深入理解JVM
深入理解java虚拟机视频教程,jvm原理,java虚拟机,jvm性能调优,内存模型,gc工作原理,内存分配,类的加载等等视频教程
深入JAVA虚拟机 第二版,比较老的一本书,不那么完美但不影响观看,稍微有点倾斜
long果 深入理解Java虚拟机(jvm性能调优+内存模型+虚拟机原理)。讲解相当详细,值得一看。下载仅供参考学习,侵权联删。
NULL 博文链接:https://zhanjia.iteye.com/blog/1842733
深入理解JAVA虚拟机.xmind
诸葛_BAT面试之深入理解Java虚拟机_9
30+个视频+深入理解Java虚拟机(jvm优化+内存模型+虚拟机原理)
前言Java是目前用户最多、使用范围最广的软件开发技术之一。Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java API、Ja
自己看《深入理解Java虚拟机》(第二版)所做的一些笔记。因为个人水平有限,能够理解的也只有前面几章的内容,后面的内容觉得看了也不是很理解,就没有记在里面。希望能对大家有所帮助,也希望能和大家一起进步。
深入理解Java虚拟机(第二版)
内存分配与回收策略, JVM 调优, 文件结构, 类加载机制, Java 程序 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,意味着可以在不同的操作系统上运行。Java具有简单、...
了解jvm的pdf,高清pdf,希望大家下载
虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种...Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。