[英]Java confusion about Runtime.memory() vs. Windows' Physical Memory Usage History graph
[英]Java Character vs char: what about memory usage?
在我的一個課程中,我有一個Character
字段。 我更喜歡它了char
,因為有時領域沒有“價值”和null
接縫我代表本(缺乏)信息最徹底的方法。
但是我想知道這種方法的內存占用情況。 我正在處理成千上萬的物體,這兩種選擇之間可以忽略不計的差異現在值得進行一些調查。
我的第一個賭注是char
占用兩個字節,而Character
是一個對象,所以它需要更多才能支持它的生命周期。 但我知道盒裝原語如Integer
, Character
等不是普通的類(想想裝箱和拆箱),所以我想知道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.