是java原始垃圾收集

如果我在Java中的方法中声明一个int(或任何原始类型),该函数返回时该内存是否释放,或者它必须在垃圾收集器清除之前一直存在?

我知道在C中,堆栈指针被重置并立即释放内存,我知道Java中的对象必须被垃圾收集,但我不知道基元会采用哪种方法。

当返回一个方法时,它的堆栈上的变量总是被立即释放(当然,释放后我的意思是堆栈帧被破坏,所有附加到它的内存也像局部变量一样)。

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

基元有原始值,而不是指针。 正如其他答案中所述,没有必要对它们进行GC。

这非常类似于malloc并且在C中是free的。

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

当你在java中创建一个对象(可能是使用new关键字)时,你正在为它分配内存。 但是,你永远不会在java中明确地调用free 。 JVM将检测何时需要执行释放。

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

基元在堆栈上分配,因此在函数返回时释放它们的内存。

是函数返回时释放的内存,还是它必须在垃圾收集器清理之前一直闲置?

在方法内声明的基元存储在该方法的堆栈帧中。 由于一旦方法返回就会销毁堆栈帧,因此释放分配给局部变量的空间。