`

System.gc()

JVM 
阅读更多
int length = 3;
Set<Sky> a = new HashSet<Sky>();
for (int i = 0; i < length; i++) {
	Sky ref = new Sky("Hard_" + i);
	System.out.println("创建强引用:" + ref);
	a.add(ref);
}

System.gc();

Set<SoftReference<Sky>> sa = new HashSet<SoftReference<Sky>>();
for (int i = 0; i < length; i++) {
	SoftReference<Sky> ref = new SoftReference<Sky>(
			new Sky("Soft_" + i));
	System.out.println("创建软引用:" + ref.get());
	sa.add(ref);
}
// sa=null;
System.gc();

Set<WeakReference<Sky>> wa = new HashSet<WeakReference<Sky>>();
for (int i = 0; i < length; i++) {
	WeakReference<Sky> ref = new WeakReference<Sky>(
			new Sky("Weak_" + i));
	System.out.println("创建弱引用:" + i);
	wa.add(ref);
}

System.gc();

ReferenceQueue<Sky> rq = new ReferenceQueue<Sky>();
Set<PhantomReference<Sky>> pa = new HashSet<PhantomReference<Sky>>();
for (int i = 0; i < length; i++) {
	PhantomReference<Sky> ref = new PhantomReference<Sky>(new Sky(
			"Phantom_" + i), rq);
	System.out.println("创建虚拟引用:" + ref.get());
	pa.add(ref);
}
System.gc();



public class Sky {

	public Sky(String id){
		this.id=id;
	}
	private String id;

	public String getId() {
		return id;
	}

	@Override
	public String toString(){
		return id;
	}

	@Override
	protected void finalize() throws Throwable {

		System.out.println("回收对象"+id);
	}

	
}


创建强引用:Hard_0
创建强引用:Hard_1
创建强引用:Hard_2
创建软引用:Soft_0
创建软引用:Soft_1
创建软引用:Soft_2
创建弱引用:0
创建弱引用:1
创建弱引用:2
创建虚拟引用:null
创建虚拟引用:null
创建虚拟引用:null
回收对象Weak_2
回收对象Weak_1
回收对象Weak_0
回收对象Phantom_2
回收对象Phantom_1
回收对象Phantom_0


System.gc() 只是对于弱引用和虚引用具有立竿见影的效果。
强引用并没有相应的引用类,彩一般形式创建的对象便属于强引用类型。
在创建对象时将其设置为弱引用,可以有效地加快对象所战胜的内存空间被JVM垃圾收集器回收的速度。
虚拟引用并不是一种真正的对象引用,所以通过Reference对象的get()方法从引用中获取的对象都是null
分享到:
评论

相关推荐

    第一集 _ 高延迟问题的罪魁祸首System.gc().pdf

    《高延迟问题的罪魁祸首:System.gc()》 在Java编程中,System.gc()是一个经常引起争议的函数,因为它触发的是Java虚拟机(JVM)的全局垃圾收集,可能导致应用程序出现显著的性能问题,特别是在高并发或者对延迟...

    Android垃圾回收机制及程序优化System.gc

    - 避免显式调用`System.gc()`,因为这可能会增加主GC的频率。 - 尽量减少临时对象的使用,避免无谓的对象创建和销毁。 - 不再使用对象时,将其显式设置为`null`,帮助GC判断对象是否可回收,提高效率。 - 使用`...

    System System命名空间源码

    .NET的垃圾回收机制是通过System.GC类实现的。通过查看GC的源码,我们可以学习到.NET如何自动管理内存,以及如何避免常见的内存泄漏问题。 六、泛型与类型转换 System命名空间中的泛型类,如List和Dictionary, ...

    android 知识汇总

    在Android开发中,掌握以下几个核心知识点至关重要:Activity、Service、Thread、AsyncTask以及系统垃圾回收(system.gc)。这些是Android应用程序中的基础元素,理解和熟练运用它们对于构建高效、稳定的App至关重要...

    16_垃圾回收相关概念.pptx

    当我们提到`System.gc()`时,这是Java提供的一种建议JVM进行垃圾回收的方法。然而,需要注意的是,调用这个方法并不保证立即触发垃圾回收,因为JVM可能会根据自己的策略和需要来决定何时执行垃圾回收。 在描述中的...

    详解C#中的System.Timers.Timer定时器的使用和定时自动清理内存应用

    最后,我们使用ElapsedEventHandler来处理定时器触发事件,在这个事件中,我们使用GC.Collect()和GC.WaitForPendingFinalizers()来清理内存。 三、优点和缺点 使用System.Timers.Timer定时器来定时清理内存有以下...

    jvm-full-gc.zip

    3. 显式调用System.gc():虽然不推荐,但手动调用会请求进行Full GC。 4. G1垃圾收集器的混合收集(Mixed GC)失败:G1在尝试进行混合收集时,如果无法满足目标空间需求,会退化为Full GC。 5. CMS(Concurrent Mark...

    垃圾回收相关概念.pdf

    Java虚拟机(JVM)中的垃圾回收(Garbage Collection,简称GC)是自动管理内存的重要机制...在实际开发中,应尽量减少对`System.gc()`的依赖,利用JVM的默认GC策略,并合理设计对象引用,以实现高效、健壮的内存管理。

    JAVA中销毁一个对象的方法.doc

    - **紧急情况**:当程序遇到内存不足的情况时,可以尝试调用`System.gc()`来尝试释放一些内存。 - **测试目的**:在开发阶段,为了模拟特定的运行环境,可能会手动触发垃圾回收以观察程序的行为。 **3.3 注意事项**...

    android内存管理

    尽管可以尝试通过调用`System.gc()`来触发垃圾回收,但这并不总是最佳实践。调用此方法会导致当前线程暂停,等待GC完成,这可能会影响用户体验。而且,GC的工作方式是分批回收,可能导致内存并未完全清理,反而可能...

    java计时器

    - **强制垃圾回收**:在计时前后的`System.gc()`调用虽然可以减少垃圾回收的影响,但也会增加额外的时间消耗。 - **系统时间精度**:`System.currentTimeMillis()`返回的是当前系统时间,其精度取决于操作系统的时钟...

    Java入门及faq__1(3)

    综上所述,Java中的日期格式化、静态与非静态内部类的区别、字符和数字的判断方法以及`finalize()`与`System.gc()`的区别都是Java编程中非常重要的知识点。掌握这些内容对于编写高效、可靠的Java应用程序至关重要。

    奇迹通讯面试题目.doc

    - `System.gc();` 触发垃圾回收,但并不立即执行。即使执行了垃圾回收,`B.num` 的值也不会改变,因为它是静态的。 #### 3. 生产者消费者模型 **知识点概述:** - **生产者消费者模式:** 一种经典的并发编程...

    安全彻底关闭实例Excel.Application后产生的进程方法

    - 将`_xlApp`设为`null`,然后通过`System.GC.Collect(generation)`触发垃圾回收机制,确保资源被及时释放。 - 最后,将`oMissing`设为`null`。 #### 总结 以上代码展示了如何安全且彻底地关闭`Excel....

    Java的垃圾收集器(GC)参考.pdf

    6. **System.gc()的使用**:尽管可以调用`System.gc()`建议JVM进行垃圾收集,但不应过度依赖这个方法,因为垃圾收集器何时执行、是否执行是不确定的,过度调用可能会增加系统开销,影响性能。 7. **内存泄漏与内存...

    JAVA面试题垃圾收集机制

    1.介绍下垃圾收集机制(在什么时候,对什么,做了什么)?...System.gc()默认也是触发Full GC。 heap dump带GC默认也是触发Full GC。 CMS GC时出现Concurrent Mode Failure会导致一次Full GC的产生。

    jvm-full-gc调优-jvm-full-gc.zip

    本资料"jvm-full-gc调优-jvm-full-gc.zip"显然是针对如何减少和优化JVM的Full GC进行深入探讨的。以下将详细介绍JVM Full GC的相关知识点。 1. **理解JVM内存结构**:Java内存主要分为堆内存(Heap)和非堆内存...

    Android中高级面试必知必会.pdf

    垃圾回收算法(JVM)..........63 7、垃圾回收机制和调用 System.gc()的区别? .64 8. 类加载过程90 9. 反射..........101 10. 多线程和线程池........112 11.HTTP、HTTPS、TCP/IP、Socket 通信、三次握手四次挥手...

Global site tag (gtag.js) - Google Analytics