我有一个带有成员MyClassfloat[] 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对象(保存该对象)即可。

    09-28 01:30