我是GC的新手,想知道垃圾收集器除了引用之外还收集了哪些不再被任何变量引用的东西?以下是我想查看的列表Java:什么是垃圾收集器收集?
- 原始类型(int,double,float,char ....)是否得到GC编辑?
- 静态变量是否得到GC-ed?
- 最终变量是否得到GC-ed(我认为,因为它被标记为不可变,所以没有东西要收集)?
- 是否所有的方法(包括静态和非静态)都得到GC编辑?
- 线程是否被GC编辑?
我是GC的新手,想知道垃圾收集器除了引用之外还收集了哪些不再被任何变量引用的东西?以下是我想查看的列表Java:什么是垃圾收集器收集?
GC不收集任何引用,它只是释放无法访问的对象(堆上的内存)。
静态是特殊的内存位置并与类/类加载器相关联。如果class/classloader未部署,则静态内容将从内存中移除。
原始类型如果与对象(类变量)相关联,那么当对象不可达时它们将被GCed。
如果局部变量/参数变量,它们将在堆栈上,所以只要方法执行完成,它们就会被回收。
当方法返回时,本地变量将被回收。即基元和参考。只有对象是GC编辑的。 – 2012-08-07 21:28:50
*变量*是静态的,而不是被引用的对象。否则,如果对象从非静态变量重新分配给静态变量,则对象将不得不将其更改为“类型”。 (它可以同时分配给静态,非静态和易失性变量,btw) – 2012-08-07 21:31:58
垃圾回收仅适用于对象。
•原始类型(int,double,float,char ....)是否得到GC编辑? - 是原始类型的对象?没有。
•静态变量是否被GC编辑? - 是变量对象,是的。
•最终变量是否得到GC-ed(我认为,因为它被标记为不可变,所以没有东西可以收集)? - 没有它们将得到GC编辑
•是否所有的方法(静态和非静态)都得到GC编辑? - 方法和类defs需要内存,但不是由GC管理的内存,它取决于它们随意创建和销毁的JVM类型。
•线程是否得到GC编辑? - 是的线程是对象,所以他们得到GC编辑。
垃圾收集器只能在堆上工作。鉴于此,您可以排除静态变量。
原始类型(int,double,float,char ....)得到GC-ed吗? 如果它们所属的对象得到GC编辑,它们将得到GC编辑
静态变量是否得到GC编辑? 没有
做最后的变量得到GC编辑(我认为,因为它被标记为不可变的,所以没有什么收集)? 如果它们所属的对象得到GC编辑,它们将得到GC-ed
是否所有方法(包括静态和非静态)都得到GC编辑? 这并没有太大的意义
线程得到GC编辑? 如果它们是不再被引用的对象,是
垃圾收集不上堆上分配对象,这是通过new
创建的所有对象。
new Integer(..)
管理,但我不知道有关装箱和拆箱这里,所以我说没有,因为JVM已经对它们进行管理run()
方法,使他们能够GCed通过'new'创建的对象....怎么样字符串文字? – peter 2012-08-07 21:17:21
GC只收集没有在程序中的任何引用,以便由定义收集由GC原语不能发生存储空间中的对象。 任何可以引用一个对象并可以改变其需求的变量都可以被收集,所以在一些情况下可以收集静态变量,但是总决赛不会! 我无法想象你用什么方法GC-ed.in一般的答案我应该说方法不是对象状态的一部分GC-ed。
垃圾回收是一个巨大的话题,对于堆栈溢出回答可能太大了。这个主题上有一个good book,被称为Garbage Collection Handbook。
你可能已经把你的问题分解成了你写的5个重点,并且在每一个问题上都找到了几个Q&A,但你可能想读的是这个http://chaoticjava.com/posts/how -does-garbage-collection-work/ – Ozzy 2012-08-07 21:04:58