簡體   English   中英

內存中“長”的大小 - Java

[英]Size of a 'long' in memory - Java

已審核

  1. 內存中的字節大小 java
  2. byte-in-java-takes-4-bytes-by-default

我仍在試圖弄清楚為什么 Java 中的longdouble在內存中消耗12 bytes而不是8 bytes

肯定在某處有錯誤的假設; 請指導我..

我用兩種方法分析它,

  1. Java可視化虛擬機在此處輸入圖片說明
  2. 基於Java 檢測內存測量器

以下是我的邏輯/假設/來源信息,

  1. 在類中定義單個 float 或 long 屬性並檢查其內存占用
  2. 對象將攜帶自己的12 bytes = [CLASS INFO OF 4 BYTES] + [FLAGS INFO OF 4 BYTES] + [LOCK INFO OF 4 BYTES]元數據12 bytes = [CLASS INFO OF 4 BYTES] + [FLAGS INFO OF 4 BYTES] + [LOCK INFO OF 4 BYTES]
  3. 類大小將是Total Memory - Meta Data
  4. 收到的結果是12 bytes => 24 bytes (Total Memory) - 12 bytes (Meta Data)
  5. JDK:1.8.0_65; Java HotSpot(TM) 64 位服務器虛擬機
  6. 操作系統:Windows 8.1
  7. 測試程序

[ ANSWER ] 4個字節的差異是由於JVM應用的填充。 謝謝安迪·特納...

引用這個答案

在現代 64 位 JDK 中,對象有一個 12 字節的標頭,填充為 8 字節的倍數

額外的 4 個字節被填充以獲得 8 的倍數。

你可以檢查double的大小:

double numDouble=2;
long size=(long)(numDouble*Double.SIZE) / Byte.SIZE;
System.out.println(size);

輸出:16

暫無
暫無

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

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