釋放由字節數組分配的內存的最佳方式是什麼(Java中的new byte [size])?Java中的字節數組的空閒內存
回答
刪除對該字節數組的所有引用。垃圾收集器將負責其餘部分。
當創建Java中的一個新的byte [],你這樣做
byte[] myArray = new byte[54];
釋放它,你應該做的
myArray = null;
如果別的引用您的字節數組,像
yourArray = myArray;
您還需要將其他引用設置爲null,如
yourArray = null;
在Java垃圾收集是自動的。如果JVM可以檢測到整個程序不再能夠訪問一段內存,那麼JVM將爲您釋放內存。
當感覺像JVM時,JVM將釋放內存。作爲幾乎所有java程序的一階近似,不要擔心內存,不要擔心,JVM會得到回報。 – 2010-06-04 13:10:56
通常,您不需要將引用設置爲null以允許收集對象。如果你需要這樣做,你的實現恕我直言,很可能是一個嚴重的問題。 – 2010-06-04 14:49:36
@彼得:取決於。如果你知道這個變量會比它所指的數組活得長得多,那麼明確地設置它是有意義的。雖然這很少見。 – 2010-06-04 15:24:43
將所有對它的引用設置爲null將使它成爲Java自動垃圾收集的候選對象。你不能確定這需要多長時間才能發生。如果您確實需要立即明確回收內存,您可以撥打電話System.gc();
此外,只是要清除您可能不需要顯式地將引用設置爲空。如果引用超出範圍,它們將自動被清空,例如一旦聲明的方法執行完成,局部變量引用將被清零。因此,局部變量通常在應用程序運行時期間隱式釋放。
System.gc()不立即回收內存。你只是告訴JVM「請,如果你喜歡它,也許你可以清理東西。」這只是一個建議。 – 2010-06-04 15:22:02
System.gc()不會強制GC。這僅僅是一個建議。這就像你的室友之間的差異,「老兄,這個地方是一個殘骸,怎麼了?」和你媽媽說「清理這個瞬間!」在大多數實現中,System.gc()僅僅是你的室友。 – 2010-06-04 15:23:15
@Jonathon @Jim我沒有意識到這一點。 javadocs說:「運行垃圾收集器,調用gc方法表明Java虛擬機花費大量的工作來回收未使用的對象,以便使它們當前佔用的內存可以快速重用,當控制從方法調用返回時,Java虛擬機機器盡最大努力從所有丟棄的物體中回收空間。「並以我的稱呼它似乎立即運行的經驗,但也許我錯了 – Alb 2010-06-04 15:44:29
- 1. 字節的空閒內存[]
- 2. Java - FloatBuffers的空閒內存
- 3. 函數中的空閒內存
- 4. remove_if後的空閒內存
- 5. 負空閒內存
- 6. 方法C中的本地字符串數組的空閒內存#
- 7. Spark錯誤:沒有足夠的空間在內存中緩存分區rdd_8_2!空閒內存是58905314字節
- 8. C中的空閒分配內存
- 9. 循環中的空閒內存
- 10. java中的字節數組
- 11. 查詢空閒內存量
- 12. XML :: LibXML perl空閒內存
- 13. strlen和空閒內存
- 14. 從Java中存儲MySQL字節數組
- 15. 將ImageBrush中的空閒內存設置爲WPF中的空格
- 16. 表單關閉時的空閒內存
- 17. iphone動畫之後的空閒內存
- 18. 查找最大的空閒內存塊
- 19. 使用單個函數的Delphi中的空閒內存和零
- 20. C++中的二維動態內存分配數組中的空閒分配內存
- 21. 字節數組的內容
- 22. C#字節數組中的空元素
- 23. 將內存流讀入字節數組
- 24. Lambda返回Java中的字節數組
- 25. 讀取Java中的C#字節數組
- 26. 字節數組中的Java迭代位
- 27. Java從包含空格的字節數組創建字符串
- 28. 指向數組的空閒指針?
- 29. 如何在java中比較64字節數組的內容?
- 30. Linux:好友系統空閒內存
重新使用它。有史以來最好的解除分配。 – SyntaxT3rr0r 2011-02-06 22:46:18