在java(1.6或更早版本)中,是否有任何类型的对象不受垃圾回收的影响?
答案 0 :(得分:1)
也许你已经听说过弱,柔和的幻象参考。检查一下 http://weblogs.java.net/blog/2006/05/04/understanding-weak-references
答案 1 :(得分:1)
这取决于你说“对象”的意思。除字符串之外的所有原始类型和未在JVM堆上分配的所有数据(使用operator new)都不受GC的约束。其他一切都受GC影响。
答案 2 :(得分:1)
根据实现情况,即使静态字段保存在“对象”(您可以在堆转储中看到)中,当丢弃Class时,这些字段也会被清除。
您可能指的是代理数据结构。这些包括GUI组件,线程和直接/内存映射的ByteBuffers。在每种情况下,Object都在堆上,但是堆上没有数据结构。
答案 3 :(得分:1)
所有java对象都要进行垃圾回收。但是,本机资源不是由垃圾收集器直接管理的,当执行finalize()方法时,垃圾收集器会释放一些像窗口句柄(JFrame),其他需要手动资源管理。
此外,jvm不必在关闭之前收集现有对象,这可能会导致数据未被刷新到磁盘等细微错误。
最后,对于实时系统或智能卡的Java规范有扩展,其中包括出于性能和资源原因的非托管内存。但是这不适用于标准的jvm。