簡體   English   中英

Java如何有效地管理內存

[英]How Java manage memory efficiently

字符串在java中是不可變的,即每次我們在字符串對象中進行更改時,它都會創建一個新實例,而舊對象則變為未引用,即浪費。 所以在一個大程序中會有很多無法訪問的未引用對象。 java管理這個嗎? 怎么樣? 例如-

String s="abc";
s=s.concat("def");

現在對象“abc”根本無法引用,但由於字符串是不可變的,它仍然存在於內存池中。

首先,聽起來你需要Java和垃圾收集中的崩潰源。 話雖如此,還有一些基本要點需要澄清:

1)僅僅因為一個對象是不可變的並不意味着它的內存泄漏。 如果對不可變對象沒有引用,則它與任何其他對象一樣有資格進行垃圾回收。

2)字符串常量是一個例外,因為它們總是由JVM 實習 這意味着字符串常量保存在特殊的內存池中,並且每次創建字符串時,首先檢查此池以查看該字符串是否已存在。 如果是,則返回對它的引用。 (您可以使用String.intern()方法強制非常量字符串加入池)。

3)這些字符串占用的內存量非常小,您基本上不必擔心它。

Java有自動垃圾收集器,它繼續在后台運行。這個垃圾收集器不斷檢查未使用的對象,一旦它檢測到/找到任何這樣的對象就會銷毀它,即釋放該特定對象使用的內存/資源。這是由JVM照顧的。你不用擔心它。但是如果你想要你可以指示JVM進行垃圾收集。之后JVM可以相應地安排垃圾收集

要了解垃圾收集的工作原理,請查看以下鏈接:

http://javarevisited.blogspot.in/2011/04/garbage-collection-in-java.html

http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html

Java中的內存管理由JVM(即JVM中的垃圾收集器)完成

所有對象在引用時都存儲在堆中

MyCode ref=new MyCode();

垃圾收集器在兩種情況下驗證垃圾收集的對象

  1. 如果對象的引用變為null
ref=null;
  1. 當隔離島發生時

http://www.geeksforgeeks.org/island-of-isolation-in-java/

內存管理是關於String對象的一些不同,如上面的答案已經解釋過它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM