我有一个带有成员MyClass
的float[] myArray
类。我使用以下方法构造:
public MyClass(float[] initArray) {
myArray = initArray;
}
我想知道在后台发生了什么:JVM是否将指针设置为相同?我是否有可能将
myArray
变量丢失给垃圾收集器?最好执行以下操作:
public MyClass(float[] initArray) {
int len = initArray.length;
myArray = new float[len];
System.arraycopy(initArray, 0, myArray, 0, len);
initArray = null;
}
我问是因为我在内存紧张的嵌入式环境中编程,并且我不想丢失变量(例如第一个示例)或浪费额外的空间(例如,通过将
initArray
设置为null,我希望GC能够处理它,还给我那个RAM)。initArray
是在其他函数中创建的局部变量,会发生什么?谢谢。
最佳答案
JVM是否将指针设置为相同?
->是的,在Java中,它们更好地称为引用。
我是否有将myArray变量丢失给垃圾收集器的风险?
->不,除非您丢失对MyClass对象的引用。
最好执行以下操作?
->最好-不。这取决于您的需求,
在这里创建一个实际的副本,都可以。
在那里设置initArray = null;
是没用的
因为initArray
没有通过引用传递。在Java中
一切都通过值传递,甚至引用
(initArray
是这里的参考)
在第一种方法中,如果initArray是一个
在其他函数中创建的局部变量?
->在保存对本地变量的引用时,请考虑一下
在MyClass对象中,函数完成后不会丢失它
执行(我想这是您的关注)。简而言之,它会活下去
只要您保存了MyClass对象(保存该对象)即可。