/* 程序1 */ package org.lgy.study.gc; public class GcTest{ public static void main(String[] args){ for(int i = 0; i < 4; i++){ new GcTest(); } } public void finalize() throws Throwable{ System.out.println("finalize..."); } } /* -verbose:gc选项可以输出垃圾收集的 详细信息。 即使使用 java -verbose:gc org.lgy.study.gc.GcTest 命令运行上面的程序, 程序也不会有任何输出,这是因为从程序开始执行,直至程序结束都没执行垃圾回收。 */
/* 程序2 */ package org.lgy.study.gc; public class GcTest{ public static void main(String[] args){ for(int i = 0; i < 4; i++){ new GcTest(); System.gc(); /* try{ Thread.sleep(2000); }catch(Exception e){ e.printStackTrace(); } */ } } public void finalize() throws Throwable{ System.out.println("finalize..."); } } /* -verbose:gc选项可以输出垃圾收集的 详细信息。 使用 java -verbose:gc org.lgy.study.gc.GcTest 命令运行上面的程序,可能的结果: 结果1: [GC 655K->624K(61440K), 0.0013393 secs] [Full GC 624K->467K(61440K), 0.0116851 secs] [GC 467K->563K(61440K), 0.0004788 secs] [Full GC 563K->467K(61440K), 0.0070315 secs] [GC 467K->563K(61440K), 0.0004662 secs] [Full GC 563K->467K(61440K), 0.0068475 secs] [GC 467K->563K(61440K), 0.0004441 secs] [Full GC 563K->467K(61440K), 0.0070011 secs] finalize... 结果2: [GC 655K->680K(61440K), 0.0013204 secs] [Full GC 680K->467K(61440K), 0.0124876 secs] [GC 467K->563K(61440K), 0.0005451 secs] [Full GC 563K->467K(61440K), 0.0076125 secs] [GC 467K->563K(61440K), 0.0005278 secs] [Full GC 563K->467K(61440K), 0.0083511 secs] [GC 467K->563K(61440K), 0.0005080 secs] [Full GC 563K->467K(61440K), 0.0080329 secs] 这2种结果的区别在于: 结果1虽然运行了垃圾回收机制,但垃圾回收机制仅仅回收了最后一个垃圾对象所占用的内存空间。 结果2虽然运行了垃圾回收机制,但垃圾回收机制并没有回收任何垃圾对象所占有的内存空间。 出现这2中结果的原因可能是系统剩余的内存空间很够用,没有严重的内存需求, 同时原来的线程需要继续执行,所以即使运行了垃圾回收机制也没有回收垃圾内存。 */
/* 程序3 */ package org.lgy.study.gc; public class GcTest{ public static void main(String[] args){ for(int i = 0; i < 4; i++){ new GcTest(); System.gc(); System.runFinalization(); /* try{ Thread.sleep(2000); }catch(Exception e){ e.printStackTrace(); } */ } } public void finalize() throws Throwable{ System.out.println("finalize..."); } } /* -verbose:gc选项可以输出垃圾收集的 详细信息。 使用 java -verbose:gc org.lgy.study.gc.GcTest 命令运行上面的程序,可能的结果: [GC 655K->680K(61440K), 0.0013011 secs] [Full GC 680K->467K(61440K), 0.0121374 secs] finalize... [GC 1450K->563K(61440K), 0.0004457 secs] [Full GC 563K->467K(61440K), 0.0078861 secs] finalize... [GC 795K->563K(61440K), 0.0004989 secs] [Full GC 563K->467K(61440K), 0.0080416 secs] finalize... [GC 795K->563K(61440K), 0.0007512 secs] [Full GC 563K->467K(61440K), 0.0075044 secs] finalize... 这个程序和程序2相比,仅仅多了System.runFinalization();语句。 System和Runtime类里都提供了一个runFinalization()方法, 可以强制垃圾回收机制调用系统中可恢复对象的finalize方法。 */
/* 程序4 */ package org.lgy.study.gc; public class GcTest{ public static void main(String[] args){ for(int i = 0; i < 4; i++){ new GcTest(); System.gc(); try{ Thread.sleep(1000); }catch(Exception e){ e.printStackTrace(); } } } public void finalize() throws Throwable{ System.out.println("finalize..."); } } /* -verbose:gc选项可以输出垃圾收集的 详细信息。 使用 java -verbose:gc org.lgy.study.gc.GcTest 命令运行上面的程序,可能的结果: [GC 655K->584K(61440K), 0.0013026 secs] [Full GC 584K->467K(61440K), 0.0138399 secs] finalize... [GC 1450K->595K(61440K), 0.0006197 secs] [Full GC 595K->467K(61440K), 0.0084750 secs] finalize... [GC 467K->563K(61440K), 0.0005128 secs] [Full GC 563K->467K(61440K), 0.0081691 secs] finalize... [GC 467K->563K(61440K), 0.0004808 secs] [Full GC 563K->467K(61440K), 0.0073200 secs] finalize... 这个程序和程序2那个程序相比,仅仅是让当前线程暂停了1秒。 为什么执行结果和程序2不同呢?? 执行完System.gc();之后,程序暂停了。 JVM利用暂停的时间启动了垃圾回收机制,并回收了垃圾内, (因为在暂停的时间里,没有线程需要执行,所以JVM就启动了垃圾回收机制,并回收了垃圾内) */
相关推荐
详细的java垃圾回收机制的讲解以及java jvm对垃圾处理的应对策略。
垃圾收集GC(Garbage Collection)是Java语言的核心技术之一,之前我们曾专门探讨过Java 7新增的垃圾回收器G1的新特性,但在JVM的内部运行机制上看,Java的垃圾回收原理与机制并未改变。垃圾收集的目的在于清除不再...
在Java面试中,垃圾回收(Garbage Collection)是一个非常重要的话题。下面是一份面试分析,以及垃圾回收在面试中的占比和重要性。...Java中的垃圾回收器是如何判断对象是否可达的? 哪些情况下会导致内存泄漏?
Java内存与垃圾回收调优,Java内存与垃圾回收的调优是一个重要的主题,特别是在高性能和大规模的应用程序中。以下是一些关键的调优建议和步骤: 理解内存结构: Java堆是主要的内存区域,用于存储对象实例。 堆内存...
今天来谈谈C#的GC,也就是垃圾回收机制,非常的受教,总结如下 首先:谈谈托管,什么叫托管,我的理解就是托付C#运行环境帮我们去管理,在这个运行环境中可以帮助我们开辟内存和释放内存,开辟内存一般用new,内存是...
Java对象的清除与垃圾回收.pdf
内存回收机制内存回收就是释放掉在内存中已经没用的对象。首先要判断怎样的对象是没用的对象。这里有2种方法1采用标记计数的方法给内存中的对象给打上标记对象被引用一次计数就加1引用被释放了计数就减一当这个计
在系统运行过程中会产生一些无用的对象,这些对象一直占用内存,不清理这些无用的对象可能会导致内存耗尽,所有垃圾回收机制的是内存. 垃圾收集的原理和概念 对于对象实例收集.主要有两种基本算法,引用计数算法,可达性...
垃圾回收 对象是使用new创建的, 但是并没有与之相对应的delete操作来回收对象占用的内存. 当我们完成对某个 对象的使用时, 只需停止该对象的引用: ->将引用改变为指向其他对象 ->将引用指向null ->从方法中返回, ...
该资源通过图像及文字详细分析回答了JVM垃圾回收机制的三个重要面试问题: 1.哪些垃圾是需要回收的? 判断对象是否需要回收有两种算法。一种是引用计数算法、一种是可达性分析算法。 2.有哪些重要的垃圾回收算法? ...
Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收机制详解和调优.doc Java垃圾回收...
圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制。该思维导图完整的描述了垃圾回收的各个关键点
在C++程序中进行垃圾回收的代码,使用标记-回收算法,支持多继承,对象数组的回收。详细的介绍在我的blog http://blog.csdn.net/winux/archive/2007/09/01/1768777.aspx
讲述了java对象创建的详细过程,涉及到内存中是如何存储的,以及垃圾回收方式
Jvm垃圾回收机制 by linux_14胡嘉辉1.如何确定某个对象是“垃圾”? 2.典型的垃圾收集算法3.典型的垃圾收集器
为什么需要垃圾回收(GC)什么是垃圾回收垃圾产生垃圾回收策略引用计数标记循环引用引发的问题解决方法引用计数算法的优缺点标记清除算法核心思想标记清除算法优缺点标记整理算法V8引擎的垃圾回收回收新生代对象对象...
垃圾回收算法总结 引用计数算法 优点:(1)内存管理开销分布平滑,无需挂起;(2)废弃即回收 缺点:(1)每次在对象创建或者释放时,都要计算引用计数值,这会引起额外的开销(2)付出额外空间存放引用计数(3)...
垃圾收集GC(Garbage Collection)是Java语言的核心技术之一,之前我们曾专门探讨过Java 7新增的垃圾回收器G1的新特性,但在JVM的内部运行机制上看,Java的垃圾回收原理与机制并未改变。垃圾收集的目的在于清除不再...
今天小编就为大家分享一篇python对象销毁实例(垃圾回收),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
对象的分配过程与垃圾回收过程(csdn)————程序