判断对象已经死的方法:1.引用计数法 2根搜索算法
GC Roots:
1 虚拟机栈(栈帧中的本地变量表)中的引用对象。
2 方法区中的类静态属性引用的对象。
3 方法区中的常量引用的对象。
4 本地方法栈中JNI(即一般说的Native方法)的引用的对象。
四种引用:
1.强引用只要引用还存在,垃圾收集器永远不会回收掉被引用的对象
2.软引用(SoftReference)用来描述一些还有用,但并非必需的对象。系统将要发生内存溢出异常之前,把这些对象进行回收。
3.弱引用(WeakReference)下一次垃圾回收发生时就会回收
4.虚引用(PhantomReference)相当于没引用,也不能通过虚引用获取一个对象的实例。为一个对象设置虚引用关联的唯一目的就是希望能在这个对象呗回收时收到一个系统通知。
Minor GC:新生代GC
Full GC:老年代GC
3.3垃圾收集算法
1.标记清除
缺点:一个是效率问题另外一个是空间问题,有碎片,会提前触发GC
2.复制
一块较大的Eden(8)和两个较小的Suivivor(1)。当Suivivor不够用时,向老年代借空间
3.标记整理
不是直接对可回收对象进行清理,而是让所有存活的对象都向一端移动。
4分带收集
新生代用复制,老年代用标记清除或者标记整理
3.4垃圾收集器
1.Serial收集器(复制)
优点:简单而高效,对于单个CPU的环境来说,没有线程交互的开销
缺点:单线程收集,停止时间长
2.ParNew
多线程的Serial(复制)
3.Parallel Scavenge收集器(复制)
吞吐量优先收集器,可设置最大垃圾手机停顿时间和直接设置吞吐量大小
停顿时间短,收集次数会增加,而且总的吞吐量变小
4.Serial Old
采用标记整理算法
5.Parrallel Old
6.CMS(Concurrent Mark Sweep)(标记清除,多次后整理)
初始标记
并发标记
重新标记
并发清除
缺点:
1.在单核CPU下会严重影响程序执行速度
2.在收集期间会产生新的垃圾(浮动垃圾),导致老年代空间必须预留一些空间
7.G1(标记整理)
原理:将Java堆分成固定大小区域,并且跟踪这些区域里面的垃圾堆积程度,在后台维护一张优先列表,每次根据允许的收集时间,优先回收垃圾最多的区域。
优点:无空间碎片,精确控制停顿,精确到毫秒。
3.5 内存分配和回收策略
3.5.1对象优先在Eden分配
3.5.2 大对象直接进入老年代-XX:PretenureSizeThreshold
3.5.3 长期存活的对象进入老年代-XX:MaxTenuringThreshold
3.5.4 动态对象年龄判定
如果在Survivor空间中相同年龄所有对象大小的总和大于Survivor空间的一半,年龄大于或等于该年龄的对象就可以直接进入老年代,无须等到MaxTenuringThreshold中要求的年龄。
3.5.5空间分配担保
在发生Minor GC时,虚拟机会检测之前每次晋升到老年代的平均大小是否大于老年代的剩余空间大小,如果大于,则改为直接进行一次Full GC,如果大于,则改为直接进行一次Full GC。如果小于,则查看HandlePromotionFailure设置是否允许担保失败;如果允许,那只好进行Minior GC;如果不允许,则也要改为进行一次Full GC.
相关推荐
深入 Java 虚拟机.pdf Java 虚拟机(Java Virtual Machine,JVM)是 Java 语言的 runtime 环境,是 Java 程序执行的核心组件。它提供了一个平台无关的环境,允许 Java 程序在不同的操作系统和硬件平台上运行。 一...
《深入Java虚拟机(原书第2版)》,原书名《Inside the Java Virtual Machine,Second Edition》,作者:【美】Bill Venners,翻译:曹晓钢、蒋靖,出版社:机械工业出版社,ISBN:7111128052,出版日期:2003 年 9 ...
《深入JAVA虚拟机第二版》是由Bill Venners撰写,并由曹晓钢和蒋靖翻译的中文书籍。这本书是Java开发者必备的经典读物,它详细地解析了Java虚拟机(JVM)的工作原理,帮助读者深入理解Java程序的运行机制。尽管描述...
首先,我们来看《深入JAVA虚拟机》这本书,它涵盖了JVM的各个关键方面,包括指令集、运行时数据区、方法区、堆内存、栈帧结构、编译与优化、异常处理和安全性等。书中通过实例解析,帮助读者理解JVM如何处理Java程序...
java虚拟机不用多少了吧。 深入java虚拟机第二版.pdf
深入Java虚拟机不仅有助于理解代码如何在JVM上运行,还能帮助我们优化程序性能,减少内存泄漏,提高并发能力,甚至编写更高效、安全的Java代码。通过对JVM的深入学习,开发者可以解决实际开发中的各种问题,提升自己...
深入JAVA虚拟机第二版.pdf深入JAVA虚拟机第二版.pdf深入JAVA虚拟机第二版.pdf深入JAVA虚拟机第二版.pdf深入JAVA虚拟机第二版.pdf深入JAVA虚拟机第二版.pdf
深入JAVA虚拟机,帮助大家在Java方面进行学习,深入JAVA虚拟机,帮助大家在Java方面进行学习,
Java虚拟机(JVM)是Java程序运行的基础,它提供了执行环境和各种内存区域,以支持Java代码的高效运行。本地方法栈是JVM的一部分,它主要负责处理与本地方法(通常是由C或C++编写)相关的调用。本地方法栈在Java线程...
《深入Java虚拟机(原书第二版清晰版)》这本书是为那些已经学习了Java编程语言,希望通过深入理解Java虚拟机(JVM)来进一步提升自己技术能力的Java程序员所准备的。本书详细介绍了JVM的内部工作机制,包括但不限于...
《深入Java虚拟机》 Java虚拟机(JVM)是Java程序的核心运行环境,它将Java源代码编译成字节码,然后解释执行这些字节码,使得Java程序可以在不同的操作系统上无缝运行,实现了“一次编写,到处运行”的目标。 1. ...
《深入Java虚拟机》这本书是Java开发者深入了解JVM(Java Virtual Machine)的必备经典之作。它详尽地探讨了Java虚拟机的工作原理、内存管理、类加载机制、字节码执行以及性能优化等多个核心主题,旨在帮助开发者...
《深入Java虚拟机》这本书是IT领域中关于Java虚拟机(JVM)的深度解析之作,主要聚焦于JVM的工作原理、内部结构以及优化技巧。Java虚拟机作为Java语言的核心组件,其性能直接影响到Java应用程序的运行效率。因此,对...
《深入Java虚拟机》是一本深受Java开发者喜爱的经典著作,它详细揭示了Java虚拟机(JVM)的工作原理,帮助开发者提升程序性能、理解和解决运行时问题。这本书的影印版以及附属光盘通常会包含一些补充材料,如源代码...
《深入JAVA虚拟机第二版》是一本深受Java开发者喜爱的经典著作,它详尽地剖析了Java虚拟机(JVM)的工作原理,为程序员提供了深入了解Java平台核心技术的机会。这本书结合了理论与实践,不仅讲解了JVM的内部机制,还...
讲述java虚拟机 唯二的书。本书作者曾因本书荣获专业技术杂志《Java Report》评选的优秀...作者以易于理解的方式深入揭示了Java虚拟机的内部工作原理,深入理解这些内容,将对读者更快速地编写更高效的程序大有裨益!
《深入Java虚拟机第二版》是探讨Java虚拟机(JVM)内部工作原理的经典之作,作者Bill Venners通过本书深入浅出地解析了Java虚拟机的体系结构和内部机制,为Java开发者提供了编写高效程序的基础理论支持。 Java...
### 深入Java虚拟机最新版:执行引擎与类加载机制详解 #### 执行引擎:一次探索之旅 Java虚拟机(JVM)的核心组件之一就是执行引擎,它负责将字节码转换为机器指令执行。在《深入Java虚拟机最新版》这本书中,我们...
《深入Java虚拟机第二版》是一本深受Java开发者喜爱的经典著作,它详尽地剖析了Java虚拟机(JVM)的工作原理,为程序员提供了深入了解Java平台核心机制的机会。随书光盘包含了书中提及的各种示例代码、实验数据以及...
深入JAVA虚拟机.part3.rar