2014-01-26 56 views
3

我有一個類MyClass與會員float[] myArray。我建立基於以下幾點:Java當我將一個數組參數賦值給構造函數中的成員時會發生什麼?

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設置爲空,我希望GC照顧它並將該RAM還給我)。

  • 編輯 - 在第一種方法中,如果initArray是在其他函數中創建的局部變量會發生什麼? 謝謝。

回答

4

JVM是否將指針設置爲相同?
- >是的,在Java中它們被稱爲引用。

我是否有丟失myArray變量到垃圾回收器的風險?
- >否,除非您失去對MyClass對象的引用。

最好做以下事情嗎?
- >優選 - 沒有。這取決於你需要什麼,
在這裏你創建一個實際的副本,都是好的。
設置那裏initArray = null;是沒用的btw
as initArray沒有通過引用傳入。在Java
一切是按值傳遞,甚至引用
initArray這裏是一個參考)

在第一種方法,如果initArray是在其他一些功能創造了
局部變量會發生什麼?

- >把它看成是你保存在你的MyClass的對象,局部變量
的參考,當你的函數完成
執行(我想這是你的關心),你不會失去它。簡單地說,只要您的MyClass對象(您保存它)存在,它就會生存

4

JVM設置指針是否相同?

是。

我是否有丟失myArray變量到垃圾回收器的風險?

只要你不使用方法調用後initArray參考修改您的陣列,也沒有理由讓你的數組的一個副本。

如果initArray是在其他函數中創建的局部變量,會發生什麼?

這就好。只要至少有一個變量指向你的數組(在這種情況下,你有你的myArray),它將不符合垃圾回收的條件。

0

指針確實指向同一個數組,只要它指向數組,它就不會被視爲垃圾。

相關問題