62,616
社区成员
local object,可以理解成在栈内存中存放的对象。
栈,是方法被调用时,虚拟机给方法分配的内存空间。
方法执行完毕后,分配给方法的栈空间会被虚拟机回收。
java的栈中只能存放基本数据类型,或者对象的引用。不能存放对象本身。
new 创建的对象是存放在堆中的,对象何时被回收,不取决于方法何时执行完毕。
我感觉,local object,就是在方法中声明定义,然后在方法的栈内存中创建的对象,其所在方法执行完毕后,该object会被回收。
这句话跟其他语言对比就容易理解了。
比如说C++,
在C++中,
fun1(....){
ClassA c = ClassA();
}
这样创建的是local objcet,即c这个对象都是放在函数的栈空间中的。函数执行完毕后,函数的栈内存被回收,c对象也会被销毁。
在C++中,
fun1(...){
ClassA *c1 = new ClassA();
}
这样创建的是 非local object,c1这个指针指向这个objcet,这个object对象是存放在堆空间中的。函数执行完毕后,函数的栈内存被回收,但是c1指向的对象不会被销毁,被销毁的只是c1这个指针。
在java中,只能这样创建对象。
method(...){
ClassA c2 = new ClassA();
}
这样,c2这个引用指向的对象,是放在堆内存中的。c2这个引用本身,是放在方法的栈内存中的。c2这个引用本身,在方法结束后,一定会被回收。但是c2指向的引用,在方法这个方法执行完毕后,可能会被回收,也可能不会,具体会不会,要依照jvm的垃圾回收机制。
个人理解,可能有误。