Java中原始数据类型的垃圾收集器是如何工作的?

3

我们知道,对于对象,它通过引用计数和其他算法来工作。
但是对于基本数据类型,我们无法使其成为 NULL,例如:

int a = NULL;

Java中原始数据类型的垃圾回收器是如何工作的?

2
原始数据类型始终包含在对象或调用堆栈帧中,不会单独收集。 - Hot Licks
请注意,当您声明 String someString; 时,someString 本身永远不会被单独收集 - 它本质上就像 intdouble 一样是一个“原始类型”。相反,someString 指向的对象最终会被收集。 - Hot Licks
对象不是引用计数的。它们受追踪垃圾回收的影响。 - user395760
可能是are java primitives garbage collected的重复问题。 - user719662
2个回答

7

原始数据类型可以是对象中的字段,也可以用于数组,而这些数组本身也是对象。对于垃圾收集器来说,这些字段并不重要,因为它们不包含指针。因此,它们可以被完全忽略,并且一旦对象/数组被垃圾回收,它们也会随之自动释放。


5

原始数据类型被放置在 stack 中,当它们超出作用域时会立即释放,因此没有垃圾回收。与之相反的是,对象被放置在 heap 中并存储在更长期的内存中。


4
实际上,大多数原始类型都存储在对象中。 - Hot Licks
本地变量存储在堆栈上,当其超出作用域时会被释放。那么原始类型的实例变量呢? - Jigar
原始实例变量是对象的一部分;当GC收集对象时,它们的内存将被释放。 - GriffeyDog
3
这个答案是完全错误的。整数可以在对象中,这些对象进入堆而不是栈中。 - Coder-Man

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接