2012-08-07 77 views
0

我是GC的新手,想知道垃圾收集器除了引用之外还收集了哪些不再被任何变量引用的东西?以下是我想查看的列表Java:什么是垃圾收集器收集?

  • 原始类型(int,double,float,char ....)是否得到GC编辑?
  • 静态变量是否得到GC-ed?
  • 最终变量是否得到GC-ed(我认为,因为它被标记为不可变,所以没有东西要收集)?
  • 是否所有的方法(包括静态和非静态)都得到GC编辑?
  • 线程是否被GC编辑?
+4

你可能已经把你的问题分解成了你写的5个重点,并且在每一个问题上都找到了几个Q&A,但你可能想读的是这个http://chaoticjava.com/posts/how -does-garbage-collection-work/ – Ozzy 2012-08-07 21:04:58

回答

3

GC不收集任何引用,它只是释放无法访问的对象(堆上的内存)。

静态是特殊的内存位置并与类/类加载器相关联。如果class/classloader未部署,则静态内容将从内存中移除。

原始类型如果与对象(类变量)相关联,那么当对象不可达时它们将被GCed。

如果局部变量/参数变量,它们将在堆栈上,所以只要方法执行完成,它们就会被回收。

+0

当方法返回时,本地变量将被回收。即基元和参考。只有对象是GC编辑的。 – 2012-08-07 21:28:50

+0

*变量*是静态的,而不是被引用的对象。否则,如果对象从非静态变量重新分配给静态变量,则对象将不得不将其更改为“类型”。 (它可以同时分配给静态,非静态和易失性变量,btw) – 2012-08-07 21:31:58

0

只有对象(实例)可以被垃圾收集,没有别的。

  • 变量不是对象 - 所以他们没有得到gc'd
  • 方法不是对象 - 没有GC。
  • 原语 - 不是对象,没有gc
  • 线程 - 线程类实例:是。

关键字static与垃圾收集无关。

+0

特定关键字'static'的对象怎么样?那么线程呢?因为我们可以将线程声明为对象并执行它。 – peter 2012-08-07 21:04:46

+0

线程不是GCd – Cratylus 2012-08-07 21:14:59

+0

这是为什么?我虽然可以创建线程对象 – peter 2012-08-07 21:16:06

0

垃圾回收仅适用于对象。

•原始类型(int,double,float,char ....)是否得到GC编辑? - 是原始类型的对象?没有。

•静态变量是否被GC编辑? - 是变量对象,是的。

•最终变量是否得到GC-ed(我认为,因为它被标记为不可变,所以没有东西可以收集)? - 没有它们将得到GC编辑

•是否所有的方法(静态和非静态)都得到GC编辑? - 方法和类defs需要内存,但不是由GC管理的内存,它取决于它们随意创建和销毁的JVM类型。

•线程是否得到GC编辑? - 是的线程是对象,所以他们得到GC编辑。

0

垃圾收集器只能在堆上工作。鉴于此,您可以排除静态变量。

  • 原始类型(int,double,float,char ....)得到GC-ed吗? 如果它们所属的对象得到GC编辑,它们将得到GC编辑

  • 静态变量是否得到GC编辑? 没有

  • 做最后的变量得到GC编辑(我认为,因为它被标记为不可变的,所以没有什么收集)? 如果它们所属的对象得到GC编辑,它们将得到GC-ed

  • 是否所有方法(包括静态和非静态)都得到GC编辑? 这并没有太大的意义

  • 线程得到GC编辑? 如果它们是不再被引用的对象,是

0

垃圾收集不上堆上分配对象,这是通过new创建的所有对象。

  • 不知道原始的对象,他们可能是GCed如果内部有物体(如new Integer(..)管理,但我不知道有关装箱和拆箱这里,所以我说没有,因为JVM已经对它们进行管理
  • 的具体说明
  • 静态变量可以进行GC编辑,因为静态变量只是参考而不是被引用的对象
  • 最终变量可以进行GC编辑,它们是最终的事实并不意味着您的程序将需要参考给他们永远
  • 方法和线程不是自己GCC,但在这个意义上,一个线程总是容器d在具有run()方法,使他们能够GCed
+0

通过'new'创建的对象....怎么样字符串文字? – peter 2012-08-07 21:17:21

0

GC只收集没有在程序中的任何引用,以便由定义收集由GC原语不能发生存储空间中的对象。 任何可以引用一个对象并可以改变其需求的变量都可以被收集,所以在一些情况下可以收集静态变量,但是总决赛不会! 我无法想象你用什么方法GC-ed.in一般的答案我应该说方法不是对象状态的一部分GC-ed。