是否会自动释放在Java函数中声明的局部变量?

时间:2015-01-26 02:05:24

标签: java function memory scope allocation

如果在Java中的函数中声明了一个变量,那么该函数完成时是否会自动释放该变量而不管其类型如何?一旦该变量的范围退出,原始类型,非原始Object和/或array基元或Objects占用的内存是否会被释放?

3 个答案:

答案 0 :(得分:7)

Java中的原始类型在堆栈上分配,因此当它们超出范围时,它们的内存会自动释放。对象引用是类似管理的原语,但对象本身是垃圾回收的。它们将被垃圾收集器自动删除,但不能保证需要多长时间。

当内存压力变紧时,JVM垃圾收集器会自动运行,因此只要没有对象的引用,就可以有效地假设它的内存将被释放。

答案 1 :(得分:0)

如果没有对象的引用,垃圾收集器将自动删除它。但我们不能说什么时候会发生。

这个article对垃圾收集器的工作方式有很好的解释。

答案 2 :(得分:0)

除了Allexis King的答案

在较新的Java / JVM中还有一种技术可以决定是否应该在Stack或Heap中分配本地对象。当该技术超出范围时,将通过此技术在堆栈中分配的本地对象

逃脱分析

转义分析是一种Java Hotspot Server编译器可以分析新对象使用范围并决定是否在Java堆上分配它的技术。

默认情况下,Java SE 6u23及更高版本支持并启用转义分析。