package SRC;
/*如果一个对象在根搜索后发现没有与GC Roots相连接,那它会被第一次标记,同时被筛选,
* 筛选的条件是此对象是否有必要指向finalize()方法。1,当对象没有重写finalize方法或
* 重写了finalize方法已经被虚拟机调用过了,虚拟机将这两种视为没有必要执行
* 重写了finalize方法的对象会被放置在F-Queue的队列中,并在稍后由一条由虚拟机自动建立
*,低优先级的Finalizer线程去执行,稍后GC将对F-Queue中的对象进行第二次小规模标记,除非
*对象在finalize方法中成功拯救自己,如引用重新与对象关联,否则将会被GC回收
*/
public class FinalizeEscapeGC {
public static FinalizeEscapeGC fe = null;
public void isAlive(){
System.out.println("yes,i an still alive:");
}
/*
* 重写了finalize()方法,将会被放入F-queue队列中
*
*/
@Override
protected void finalize() throws Throwable{
super.finalize();
System.out.println("finalize method executed");
//对象重新与引用关联,对象不会回收
this.fe = this;
}
public static void main(String[] args) throws Throwable{
fe = new FinalizeEscapeGC();
fe = null;
System.gc();
Thread.currentThread().sleep(500);
//此时对象还活着,第二次标记时它将从F-Queue队列中移除
if(fe!=null){
fe.isAlive();
}else{
System.out.println("no, i am dead:");
}
fe = null;
System.gc();
Thread.sleep(500);
//对象面临下一次回收,因为finalize方法已经执行,因此不会放在F-Queue中,所以不会执行finalize方法
if(fe!=null){
fe.isAlive();
}else{
System.out.println("no, i am dead:");
}
}
}
分享到:
相关推荐
本篇将深入探讨Java中的GC过程。 一、Java内存模型 在理解GC之前,我们先来看一下Java内存模型。Java内存主要分为三个区域:堆(Heap)、栈(Stack)和方法区(Method Area)。其中,堆是GC的主要工作区域,用于...
Java GC与性能调优 Java GC与性能调优是 Java programming language 中非常重要的一部分,直接影响着 Java application 的性能。本文档将对 Java GC 与性能调优进行详细的介绍。 一、 Java 平台的逻辑结构 Java ...
在Java开发过程中,垃圾回收(Garbage Collection, GC)是管理内存资源的关键技术之一。合理的GC配置可以显著提高应用程序的性能和稳定性。本指南旨在帮助开发者深入理解Java GC的工作原理,并提供一系列调优策略与...
在Java中,GC的存在极大地简化了内存管理过程,减少了由程序员手动管理内存可能导致的内存泄漏等问题。Java虚拟机(JVM)中的GC机制会定期检查堆内存中的对象,判断它们是否仍处于活动状态。如果某个对象不再被任何...
Java垃圾收集(GC)专题针对的是Java编程语言中内存管理机制的重要组成部分。Java自1996年推出以来,其最大的改进之一就是引入了受管内存。在Java之前,C和C++语言中的内存泄漏问题十分常见,这导致开发稳定和安全的...
在Java编程语言中,垃圾回收(Garbage Collection, GC)是一项至关重要的机制,它自动管理内存,释放不再使用的对象,防止内存泄漏。本篇将深入探讨如何监控Java的垃圾回收,帮助开发者提升应用性能和稳定性。 Java...
【java】10分钟,了解GC过程
3. **如何执行GC**:GC的执行过程包括标记、扫描和清理三个阶段。首先,GC会标记出所有活动对象;然后,扫描并回收未被标记的对象;最后,整理剩余对象的空间,确保内存空间的连续性。 Java内存区域分为多个部分,...
GCViewer是基于Java Swing的GUI应用,由Chris Newland开发,它能够解析并可视化JVM生成的GC日志,提供丰富的图表展示GC活动,如GC时间、堆内存使用情况、对象生存周期等,帮助开发者深入了解JVM内部的垃圾收集过程。...
JavaGC(垃圾回收)是JVM中负责回收不再使用的对象,释放内存的过程。垃圾回收机制帮助Java开发者不用手动管理内存,减少了内存泄漏和指针错误的可能性。Java虚拟机的垃圾回收机制分为多种不同的算法,比如标记-清除...
Java虚拟机(JVM)是Java程序运行的基础,它的配置参数和垃圾收集(GC)机制对于优化应用程序性能至关重要。本文将深入探讨JVM参数及其与Java垃圾收集相关的知识。 一、JVM参数详解 JVM参数可以分为三类:启动参数...
总之,Java GC调优是一个复杂而细致的过程,需要综合考虑多个因素,包括但不限于堆大小、操作系统资源、JVM版本、GC策略和应用特性。通过合理的调优,可以有效地提升Java应用的性能,降低系统资源的消耗。
在第一篇文章成为JavaGC专家PartI—深入浅出Java垃圾回收机制中我们学习了不同GC算法的执行过程,GC如何工作,新生代及老年代的基本概念,在JDK7中你应该了解的5种GC类型以及他们的性能如何。在第二篇文章成为JavaGC...
Java垃圾收集(GC)是Java编程中至关重要的一个部分,它自动管理程序的内存,以避免内存泄漏和系统资源耗尽。以下是对标题和描述中提及的知识点的详细阐述: ### 1. 基础知识 #### 1.1 常见的内存溢出 内存溢出是...
GC过程就是从这些根节点出发,遍历所有可达的对象,不可达的对象被视为垃圾。 Java提供了四种不同类型的引用,以满足不同场景的需求: 1. **强引用**(Strong Reference):这是最常见的引用类型,只要强引用存在...
在Java应用程序运行过程中,如果发现并回收不再使用的对象,可以防止内存泄漏,确保程序稳定运行。当我们遇到应用程序性能下降或者内存消耗过快的问题时,就需要关注哪个进程在频繁进行GC操作。下面我们将详细探讨...
JVM 和 GC 相关参数、问题解决过程、排除应用程序的内存使用问题、排除 Cache 内容过多的问题、调整 GC 时间点、调整对象在年轻代内存中驻留的时间、CMS Remark之前强制进行年轻代的 GC 等几个方面详细介绍Java服务...
本文将深入探讨Java GC的工作原理、类型、过程以及优化策略。 一、Java垃圾回收的起源与目的 在C++等语言中,程序员需要手动管理内存,分配和释放内存空间。而在Java中,引入了垃圾回收机制,自动处理这些任务,...
对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以...这是成为JavaGC专家系列文章的第一篇,本篇主要针对GC机制进行介绍,在下一篇