String的記憶體機制

2021-08-07 06:44:00 字數 583 閱讀 3098

package test;

public class test4

}

輸出結果:

true

false

這裡說明

string s="a"+"b"+"c";
不等同於

string s="a";

s=s+"b";

s=s+"c";

這是因為s="a"+"b"+"c";直接被jvm視作s="abc",

而string s="a";//這裡建立乙個「a」的字串在方法區常量池裡,s指向它,

s=s+"b";//這裡再建立乙個「ab」的字串在方法區常量池裡,s指向它,「a」的字串並沒有被刪除

s=s+"c";//這裡又建立乙個「abc」的字串在方法區常量池裡,s指向它,「a」及「ab」的字串都沒有被刪除

這個過程會產生很多字串,很耗記憶體,建議直接用上面的方式去處理字串。

要理解這個過程,需要對的方法區常量池及string的是finally的類有所了解。

string 駐留機制

string s1 abc string s2 ab string s3 s2 c string s4 abc string s5 abcd 求兩個object的引用是否相等 console.writeline object.referenceequals s1,s3 false console.w...

記憶體的COPY ON WRITE機制

剛了解到。趕快記下來。每個程式都有自己的資料段,段。補充 dll有自己的資料段,但沒有自己的堆疊。乙個dll,被很多程式呼叫,為什麼 段共享,資料段不共享?就是因為 記憶體的copy on write 機制 程式1呼叫這個dll,執行過程中,dll的資料段肯定會改變,那記憶體就會被copy乙份,原來...

Linux 的記憶體機制

在 linux 中經常發現空閒記憶體很少,似乎所有的記憶體都被系統占用了,表面感覺是記憶體不夠用了,其實不然。這是 linux 記憶體管理的乙個優秀特性,在這方面,區別於 windows 的記憶體管理。主要特點是,無論物理記憶體有多大,linux 都將其充分利用,將一些程式呼叫過的硬碟資料讀入記憶體...