一,怎么样判断一个对象是否存活的两种方法
1),引用计数法:
所谓引用计数法就是给每个对象设置一个引用计数器,每当有别的对象引用此对象时 ,引用计数器就加一,每当引用失效时,引用计数器就减一,当引用计数器减到零时,表示这个对象为“死对象”,可以被GC回收了,
当然引用计数器也有缺陷,他的缺陷就是无法解决循环引用的问题,比如A对象引用B对象,B对象也引用A对象时,A,B对象的引用计数器都不为零,但是两对象为没有被其他对象引用的“死对象”,无法按照引用计数器规则回收。
2) 可达性算法(引用链法)
该算法的思路是:从一个被称为GC Roots的对象开始向下查找,当整体被查找一遍时,还有其他对象没有查找到,那么这些剩余的对象就是“死对象”
在java中可以作为GC Roots的对象有以下几种
虚拟机栈中引用的对象
方法区中静态属性引用的对象
方法区中常量池引用的对象
本地方法栈JNI引用的对象
虽然这些算法可以判断一个对象是否被回收,但是当满足上述条件时,一个对象不一定被回收,当一个对象不可达GC Root时,这个对象并不会立马回收,而是处于一个死缓的阶段,若要被回收要经历两个标记阶段
如果对象在可达分析中没有与GC Root的引用链,那么此时就会被第一次标记并且进行筛选,筛选过程中判断是否有必要执行finalize()方法,当前对象如果没有覆盖finalize()方法时或者已经被jvm调用过,name就没必要执行
如果该对象有必要执行finalize()方法,那么这个对象将会放在一个称为F-Queue的队列中,虚拟机会触发一个finalize线程去执行,此线程优先级低,并且虚拟机不会承诺一直等待运行完成,这是因为如果finalize()执行缓慢或者发生了死锁,那么就会造成F-Queue队列一直等待,造成内存回收系统的崩溃。GC对处于F-Queue中的对象进行第二次标记,这时,该对象将被移除 即将回收集合,等待回收。
相关推荐
以下将详细介绍JVM Full GC的相关知识点。 1. **理解JVM内存结构**:Java内存主要分为堆内存(Heap)和非堆内存(Non-Heap),其中堆内存又分为新生代(Young Generation)、老年代(Tenured Generation或Old ...
在Java编程语言中,方法参数的传递方式是一个重要知识点。Java方法参数的传递分为值传递和引用传递...这些知识点对于准备Java面试的开发者来说,是必须掌握的重要内容,同时也是深入理解JVM内存管理和性能优化的基础。
本文根据《深入理解Java虚拟机》书籍内容及作者理解,总结了JVM相关的知识点,分享如下: 一、JVM内存区域 JVM在运行时,将内存空间分为若干个区域,主要包括方法区、堆内存、虚拟机栈、本地方法栈、程序计数器五...
虽然具体的文件内容未给出,但我们可以根据标题和描述来讨论JVM调优的一些关键知识点。 1. **JVM内存模型**:JVM内存主要分为堆内存(Heap)、方法区(Method Area)、虚拟机栈(JVM Stack)、本地方法栈(Native ...
本资料"JVM 调优演示-JVM.zip"包含了一个名为"JVM-master"的项目,我们可以从以下几个方面来探讨JVM调优的相关知识点: 1. **垃圾收集器**:JVM中的垃圾收集器负责自动回收不再使用的对象所占用的内存。不同的垃圾...
下面,我们将深入探讨JVM调优的相关知识点。 1. **JVM内存模型**:JVM内存分为堆内存(Heap)、方法区(Method Area)、虚拟机栈(JVM Stack)、本地方法栈(Native Method Stack)和程序计数器(PC Register)。...
以下是对这些关键知识点的详细阐述: 1. **堆内存配置** - **新生代与老年代**:JVM堆内存分为新生代和老年代,新生代主要存放新创建的对象,而老年代则保存生命周期较长的对象。调整新生代和老年代的比例可以影响...
这份文档主要涵盖了以下几个关键知识点: 1. **淘宝JVM优化背景**:随着淘宝、天猫等业务的快速发展,其Java应用规模不断扩大,包括超过100个Java应用、1000多名Java开发工程师以及10000多个线上JVM实例。这使得JVM...
在Java编程语言中,JVM(Java虚拟机)是一个至关重要的组成部分,它负责运行Java程序。JVM垃圾回收是其核心功能之一,旨在自动...通过对这些知识点的深入掌握,开发者可以更好地诊断和解决问题,提升系统的整体性能。
从0-1学习JVM,你需要理解以下几个关键知识点: 1. **JVM架构**:JVM主要由类加载器、运行时数据区、执行引擎、本地方法接口和本地库组成。每个部分都有其特定的功能,如类加载器负责加载类文件,执行引擎负责解释...
同时,为了能更深入理解与之相关的知识点,本文特地编写了“第二章 基础知识”,详细的讲解与GC学习相关的JVM架构、JVM选项、Object内存布局、指针压缩等内容,以便读者能更加清晰的理解GC原理的底层逻辑。
Java虚拟机(JVM)是Java程序运行的基础,它提供了执行字节码的平台无关环境。JVM基础知识与调优是每一个Java开发者都需要掌握的...这份"jvm-training"资料包将帮助你系统学习这些关键知识点,成为Java性能优化的专家。
总之,掌握好GC知识对于成为一名合格的程序员至关重要,尤其是对于Java开发者而言,深入理解GC能帮助他们编写出更高效、更稳定的代码。通过系统的复习和实践,相信考生能够在GC程序员考试中取得优异的成绩。
理解这些知识点对于提升Java应用的性能至关重要。在实际工作中,我们需要根据应用的特点和需求,合理配置JVM参数,选择合适的线程模型和垃圾收集器,同时利用专业工具进行监控和分析,从而实现高效且稳定的系统运行...
### JVM技术精华——架构师必备知识点详解 #### 一、HotSpot VM介绍及发展历程 **HotSpot VM**作为Sun JDK和OpenJDK的核心组件之一,是当前应用最为广泛的Java虚拟机。HotSpot VM最初并不是由Sun公司开发,而是...
分布式、并发和JVM调优是Java开发中的关键...深入理解这些知识点,对于提升Java开发者的专业技能和解决问题的能力至关重要。在实际工作中,结合具体项目需求,灵活运用这些技术,可以构建出更高效、更稳定的应用系统。
这个名为"JVM-subject-master"的项目,很可能是包含了一系列的测试用例、脚本和分析报告,用于模拟不同的工作负载,帮助开发者实践和理解上述的JVM调优知识点。通过深入研究和实践这个项目,可以提升我们的JVM调优...
总的来说,理解JVM的类加载机制、内存结构、GC算法和调优是成为一名熟练的Java开发者的必备知识。这不仅能帮助开发者编写更高效的代码,还能有效地避免内存泄漏和性能瓶颈,提升应用程序的稳定性和性能。
### JVM知识点总览 #### JVM概述与重要性 在IT领域,尤其是对于Java开发者而言,JVM(Java Virtual Machine,Java虚拟机)的重要性不言而喻。正如武术中所说的“内外兼修”,对于初级程序员来说,掌握框架和API的...