亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在Java中,類的所有成員都存儲在連續內存中嗎?

在Java中,類的所有成員都存儲在連續內存中嗎?

Go
ibeautiful 2022-09-19 20:51:49
在搜索這是否已經回答時,我發現類成員是否保證在內存中是連續的?,但這涉及C++,而不是Java。為了提供上下文,我有圍棋的背景,我正在學習Java。我知道使用Go,我可以使用這樣的指針編寫一個結構:type myStruct struct {     firstMember  *string     secondMember *int}但是在詳細研究Go時,我經常讀到這是一個壞主意,除非你真的需要它們作為指針,因為這意味著每個成員的值可以分布在動態內存中的任何位置,從而損害性能,因為它不能利用CPU中的空間局部性。相反,通常建議以這種方式編寫結構,而不使用指針:type myStruct struct {     firstMember  string     secondMember int}當我學習如何有效地編寫Java時,我很好奇在使用Java時我的工具集中是否有相同的工具。由于我沒有能力使用指針(因為類型為類的每個變量都是對該類的引用,實際上是指針),因此我只能使用 和 編寫類:Stringintclass MyClass {     String firstMember;         int secondMember; }意識到這是為我的數據結構編寫類的唯一方法,因此我提出了這個問題。
查看完整描述

1 回答

?
www說

TA貢獻1775條經驗 獲得超8個贊

但是在詳細研究Go時,我經常讀到這是一個壞主意,除非你真的需要它們作為指針,因為這意味著每個成員的值可以分布在動態內存中的任何位置,從而損害性能,因為它不能利用CPU中的空間局部性。

在爪哇,你別無選擇。

class MyClass {  
  String firstMember;
    int secondMember;
}

字符串值成員是并且只能是引用(即,實際上是指針)。整數值成員是基元值(即,不是指針)。

Java 世界分為基元值和對象(某些類或數組等)。前一種類型的變量不是引用,后一種類型的變量是引用。

Java語言規范根本不討論對象布局;這不是一個出現在語言中的概念。

JVM 規范特別指出

Java 虛擬機不要求對對象使用任何特定的內部結構。

實際上,您可能會猜到類實例的主體是單個內存,但這仍然留下了對齊,填充和排序或成員的問題(沒有理由保持我可以看到的源代碼順序,以及一些重新排序的理由)。


查看完整回答
反對 回復 2022-09-19
  • 1 回答
  • 0 關注
  • 108 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號