java虛擬機器建立物件時通過什麼確定物件所需記憶體的大小?

時間 2021-06-03 18:30:53

1樓:ETIN

類載入完成之後,載入類的繼承體系關係得以明確,父級繼承鏈中所有非靜態域成員的FieldsLayout和size就已知了,這個size就是當前載入類的base值;對於當前載入類,根據域成員的定義順序,依次迭代成員域陣列_fields,根據陣列中的每乙個域成員的型別,在base值的基礎上累加該型別的偏移量……這樣就能計算出來所有非靜態成員的size總和;考慮到VM所屬平台是否是64bit,或是32bit,指標大小是8位元組還是4位元組,在上述迭代過程中會對被迭代的每乙個non_static_field做記憶體對齊處理(加上記憶體對齊導致的padded_offset)——以上過程稱之為layout_fields;最後考慮到物件頭的存在,再加上物件頭的header_size(),就可以決定使用new指令建立物件時所需要allocate的堆記憶體大小了。

總結下:物件大小 = 物件頭大小 + 父級繼承鏈非靜態成員域大小 + 當前載入類非靜態成員域大小 + 記憶體對齊導致的Padding。

——大約就是這麼個過程吧~

如何通過虛擬機器的方式把Windows10 on ARM裝在手機上?

老諾粉Kevin Limbo x86 PC Emulator com.limbo.emu.main 用我這個鏈結,或者在酷安搜尋 X86 就可以找到這個軟體。這是一款手機上的虛擬機器軟體,基於QEMU5.1。可以用她來裝Win10虛擬機器。如果你想要給手機裝Win10arm,可以選擇 刷機迷 給手機...

Linux虛擬機器進入root使用者時,我的方式為什麼和別人不一樣?

Mogeko sudo passwd root 相當於是用root許可權改別人的密碼,相當醜陋 正確的做法應該是 sudo su,然後再 passwd root 建議你先看看鳥哥私房菜,了解shell和kernal之間的關係和bash常見命令,有助於你比較好的入門,順便說一下passwd後接乙個系統...

有虛擬機器為什麼還要用雙系統?

劉國慶 分應用場景吧,有些時候虛擬機器方式香,有的時候雙系統香,脫離具體應用場景談某種方式好,這不妥當。題主對雙系統有疑問,我就列舉一下使用雙系統方式而不是虛擬機器方式的一些理由吧 雙系統方式快。這個不承認不行,無論你是什麼虛擬化技術,虛擬機器的效能多多少少都會打折扣 與具體硬體打交道的場景幾乎是虛...