-
java GC 静态List 如果没有引用会被回收吗5
private static List<String> list = new ArrayList<String>();
执行某个方法进行了这样的操作 list=null; 请问这个没有被引用的list会被GC回收吗?
2014年5月13日 16:41
6个答案 按时间排序 按投票排序
-
“这个没有被引用的list会被GC回收吗?”
--这个表述,换成“被list引用(或持有)的对象,比如Obj,在list置为null后,Obj会被GC回收吗”,或许更准确。2014年5月14日 20:58
-
垃圾收算法
1.引用计数法(Reference Counting Collector)
2.tracing算法(Tracing Collector)
3.compacting算法(Compacting Collector)
4.copying算法(Coping Collector)
5。generation算法(Generational Collector)
6.adaptive算法(Adaptive Collector)
一个新的对象被创建,由于它没有使用,所以该对象迅速地变为不可达,程序编译后,执行命令: java -verbosegc TestGC 后结果为:
[Full GC 168K->97K(1984K), 0.0253873 secs]
机器的环境为,Windows 2000 + JDK1.3.1,箭头前后的数据168K和97K分别表示垃圾收集GC前后所有存活对象使用的内存容量,说明有168K-97K=71K的对象容量被回收,括号内的数据1984K为堆内存的总容量,收集所需要的时间是0.0253873秒(这个时间在每次执行的时候会有所不同)。
需要注意的是,调用System.gc()也仅仅是一个请求(建议)。JVM接受这个消息后,并不是立即做垃圾回收,而只是对几个垃圾回收算法做了加权,使垃圾回收操作容易发生,或提早发生,或回收较多而已。
一旦垃圾回收器准备好释放对象占用的存储空间,首先会去调用finalize()方法进行一些必要的清理工作。只有到下一次再进行垃圾回收动作的时候,才会真正释放这个对象所占用的内存空间。
http://blog.csdn.net/zsuguangh/article/details/6429592
看能否对你有用2014年5月14日 13:36
-
可以启动JAVA应用时增加-XX:+PrintGCDetails这样一个配置,可以观察到什么时候GC执行了,回收了多少内存,和你list里内容大小比对下,应该可以观察的到。
2014年5月13日 17:09
相关推荐
由于GC启动时间的不确定性,如果JVM内存充足,GC可能不会自动回收那些没有被释放的资源对象,这就导致了系统资源的占用,进而造成资源泄露。系统资源,比如文件句柄和套接字数量,通常有更为严格的限制,如果过度...
4. **监听器、回调函数中的引用**:如果监听器或回调函数中的对象引用没有被清除,即使对象不再使用也会导致内存泄露。 5. **线程局部变量**:线程局部变量如果没有被正确清理,可能会导致线程长期占用内存。 #### ...
指创建一个对象实例,只要强引用存在,垃圾回收器永远不会回收被引用的对象。 2.5.2 软引用 对于一些还有用但非必须的对象,在内存不足时会被回收。 2.5.3 弱引用 一旦发生垃圾回收,无论当前内存是否足够,弱引用...
主要体现在JVM进行GC的时候,只要对象有强引用与其关联,就绝对不会对它进行回收,即使已经内存不足了也不会收回有强引用指向的对象。如果你不需要使用某个对象了,可以将相应的引用设置为null,消除强引用来帮助...
1. **谨慎使用静态变量**:静态变量的生命周期与类加载器相关联,如果静态变量引用了一个大对象,即使对象不再使用,由于静态变量的存在,该对象也无法被GC回收。 2. **合理管理集合类**:集合类如List、Map等可能会...
本资源摘要信息中,我们将总结 Java 面试笔试题中的知识点,涵盖 Java 基础、Java 集合框架、Java垃圾回收、Java 方法返回值、Java 对象引用、Java 构造函数执行顺序等方面的知识点。 一、Java 基础知识点 1. Java...
对象的新生代分配通常是在Eden区中进行的,如果Eden区没有足够空间时,虚拟机会触发一次Minor GC,新生对象会被复制到SurvivorFrom区域,并将年龄设置为1。Survivor区有两个,一个称为From区,另一个称为To区,垃圾...
虽然程序员可以通过`System.gc()`手动触发垃圾回收,但Java规范并不保证GC一定会执行,且频繁手动调用可能影响性能。 接着,我们来看Java中的访问修饰符。`public`、`private`、`protected`以及默认的(friendly)...
2. **静态集合类的误用**:当静态变量或常量引用了集合类(如List、Set、Map等),且这些集合中包含的对象生命周期超出预期时,即使集合外部的对象引用已经消失,GC也无法回收这些对象,造成内存泄露。 3. **监听器...
2. 软引用:在内存不足时会被回收。 3. 弱引用:只能存活到下次垃圾回收之前。 4. 虚引用:完全不会影响对象的生命周期。 GC分代收集算法VS分区收集算法 分代收集算法是基于对象存活周期的不同而采用不同的回收...
引用计数法通过对每个对象的引用次数进行计数来判断对象是否存活,而可达性分析则是通过一系列的GC Roots来扫描整个堆,不可达的对象便会被回收。常见的回收算法包括标记清除算法、复制算法、标记整理算法和分代收集...
- **软引用**:如果一个对象只具有软引用,则内存足够时不会被回收,如果内存不足时会被回收。 - **弱引用**:相比软引用更弱,当垃圾回收器工作时,无论内存是否充足,都会回收只具有弱引用的对象。 - **虚引用**...
对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围进行第二次回收。 3. **弱引用**:比软引用更弱的一种引用关系,弱引用所指向的对象只能生存到下一次垃圾回收发生之前。当...
强引用是常规引用,不会被GC回收;软引用是指对象还有用但非必须;弱引用的对象是可回收的;虚引用是对象回收跟踪机制。 GC分代收集算法与分区收集算法不同。分代收集算法在新生代使用复制算法,在老年代使用标记...
Java核心面试知识整理包括了对JVM内存区域、垃圾回收机制、GC算法、JVM类加载机制、Java集合框架以及Java IO/NIO等多个方面的深入讲解。以下是对这些知识点的详细介绍: JVM内存区域:JVM内存区域包括了程序计数器...
强引用指向的对象不会被垃圾回收器回收,软引用指向的对象在内存不足时会被回收,弱引用指向的对象在下次垃圾回收时会被回收,虚引用则主要用于跟踪对象被垃圾回收的状态。 在垃圾收集器方面,Serial收集器是单线程...
31、java 中会存在内存泄漏吗,请简单描述。 11 32、abstract 的method 是否可同时是static,是否可同时是native,是否可同时是synchronized? 11 33、静态变量和实例变量的区别? 11 34、是否可以从一个static 方法...