簡體   English   中英

Java Character vs char:內存使用情況如何?

[英]Java Character vs char: what about memory usage?

在我的一個課程中,我有一個Character字段。 我更喜歡它了char ,因為有時領域沒有“價值”和null接縫我代表本(缺乏)信息最徹底的方法。

但是我想知道這種方法的內存占用情況。 我正在處理成千上萬的物體,這兩種選擇之間可以忽略不計的差異現在值得進行一些調查。

我的第一個賭注是char占用兩個字節,而Character是一個對象,所以它需要更多才能支持它的生命周期。 但我知道盒裝原語如IntegerCharacter等不是普通的類(想想裝箱和拆箱),所以我想知道JVM是否可以在引擎蓋下進行某種優化。

還有,像其他東西一樣收集Character的垃圾還是有不同的生命周期? 它們是從共享存儲庫匯集的嗎? 這個標准或JVM實現依賴嗎?

我無法在互聯網上找到有關此問題的任何明確信息。 你能指點我一些信息嗎?

如果您使用Character創建角色,則更喜歡使用

Character.valueOf('c'); // it returns cached value for 'c' 

Character c = new Character('c');// prefer to avoid

以下是javadoc的摘錄。

如果不需要新的Character實例,則通常應優先使用此方法Character.valueOf() ,而不是構造函數Character(char) ,因為此方法可能通過緩存頻繁請求的值來顯着提高空間和時間性能。

正如你所說,一個Character對象可以為null ,因此它必須在RAM中占用比不能為null的常規char更多的位置:在某種程度上, Character s是char的超集。

但是,在代碼的給定部分中,JIT編譯器可能能夠檢測到您的Character永遠不會為null並始終用作常規char並優化該部分,以便您的Character不再使用RAM或執行速度不會慢。 我只是在猜測這一點,但我不知道JIT是否可以實際執行這種精確的優化。

請改用int 使用-1表示“無字符”。

此模式的優先級很多,例如int read() in java.io.Reader

暫無
暫無

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

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