java原语是否被垃圾收集

java原语是否被垃圾收集,java,garbage-collection,Java,Garbage Collection,如果我在Java中的一个方法中声明了一个int(或任何基元类型),那么该内存是在函数返回时释放的,还是在垃圾收集器清理它之前它必须挂起 我知道在C中,堆栈指针被重置,这会立即释放内存,我知道Java中的对象必须被垃圾收集,但我不知道使用原语时会采取哪种方法 原语是在堆栈上分配的,因此在函数返回时释放它们的内存 该内存是在函数返回时释放的,还是在垃圾回收器清理之前必须挂起 方法中声明的原语存储在该方法的堆栈框架中。由于堆栈帧在方法返回时立即被销毁,分配给局部变量的空间被释放。当方法返回时,其堆栈上

如果我在Java中的一个方法中声明了一个int(或任何基元类型),那么该内存是在函数返回时释放的,还是在垃圾收集器清理它之前它必须挂起


我知道在C中,堆栈指针被重置,这会立即释放内存,我知道Java中的对象必须被垃圾收集,但我不知道使用原语时会采取哪种方法

原语是在堆栈上分配的,因此在函数返回时释放它们的内存

该内存是在函数返回时释放的,还是在垃圾回收器清理之前必须挂起


方法中声明的原语存储在该方法的堆栈框架中。由于堆栈帧在方法返回时立即被销毁,分配给局部变量的空间被释放。

当方法返回时,其堆栈上的变量总是立即被释放(当然,所谓释放,我的意思是堆栈帧被销毁,与局部变量一样附加到堆栈上的所有内存也被销毁)

但是,如果该变量是对象,则其值是指针。包含该对象的实际内存(可能还有指向其他对象的指针)将位于堆上。当堆栈上的引用被释放时,对象只是坐在那里,没有任何人引用它(除非您将引用放在其他地方)。这就是java可能进入并进行垃圾收集的时候。也就是说,对象被标记为要收集,下次收集器运行时,它将清理此对象

原语有一个原始值,不是指针。因此,正如其他答案所述,没有必要对其进行GC

这非常类似于C中的
malloc
free

当您将一些内存malloc到C中的一个变量中,并且函数返回时,该指针的内存将被释放,但指针指向的内存将被释放

当您在java中创建一个对象时(可能带有
new
关键字),您正在为它分配内存。但是,在java中从未显式调用
free
。JVM将检测何时需要进行释放


您可以将引用设置为null,以告诉JVM您不再需要它,但通常最好只使用最小范围

这不是问题的一部分,但是对象的基本字段呢?基本字段(与所有字段一样)将与对象一起存储在堆上。