Sobes.tech
Middle+

Ինչքա՞ն է գնահատվում անհրաժեշտ հիշողության քանակը, որպեսզի պահվի byte տիպի primitive-ը LinkedList տվյալների կառուցվածքում։

sobes.tech AI

Պատասխան AI-ից

Հաշվարկը հիշողության համար, երբ պահվում է մեկ byte պրիմիտիվը LinkedList<Byte>-ում:

  1. Պրիմիտիվ byte: Սպառում է 1 байտ ինքնուրույն:
  2. Օբյեկտ-օղակ Byte: LinkedList-ում պահվում են օբյեկտներ, ոչ թե պրիմիտիվներ: byte-ը ավտոմատ կերպով փաթեթավորվում է Byte օբյեկտի մեջ: Byte օբյեկտը պարունակում է.
    • Օբյեկտի մետադատվություններ (հավաքածու): Հաճախ 8 կամ 12 байտ (կախված JVM-ից):
    • value դաշտը: 1 байտ (տիպի byte արժեքի համար):
    • Համապատասխանություն: Օբյեկտները հաճախ համընկնում են մեքենայի խոսքի չափին (4 կամ 8 байտ): Եթե գլխավերևը 12 байտ է + արժեքը 1 байտ = 13 байտ, հավանական է, որ այն կհամապատասխանեցվի 16 байտին:
  3. LinkedList.Node հանգույց: Յուրաքանչյուր տարր LinkedList-ում պարունակվում է Node ներքին դասի մեջ: Այս հանգույցը պարունակում է:
    • Օբյեկտի մետադատվություններ (հավաքածու): 8 կամ 12 байտ:
    • item դաշտը: Հղում պահվող օբյեկտին (այստեղ, Byte օբյեկտ): Հղումը սովորաբար 4 կամ 8 байտ է (կախված 32 կամ 64 բիթ JVM-ից և սեղմված ցուցանիշների օգտագործումից):
    • next դաշտը: Հղում հաջորդ հանգույցին: 4 կամ 8 байտ:
    • prev դաշտը: Հղում նախորդ հանգույցին: 4 կամ 8 байտ:
    • Համապատասխանություն: Ընդհանուր չափը և հանգույցի գլխավերևը նույնպես համընկնում են:

Նվազագույն գնահատական (JVM 32-bit առանց սեղմված ցուցանիշների):

  • Byte օբյեկտը: 12 байտ (հավաքածու) + 1 байտ (արժեք) + 3 байտ (համապատասխանություն) = մոտ 16 байտ:
  • Node հանգույցը: 12 байտ (հավաքածու) + 4 байտ (հղում item) + 4 байտ (հղում next) + 4 байտ (հղում prev) + 4 байտ (համապատասխանություն) = մոտ 28 байտ:
  • Ընդհանուր չափը: մոտ 44 байտ:

Տիպիկ գնահատական (64-bit JVM սեղմված ցուցանիշներով - ըստ նախնական կարգավորումների, եթե հողատարածքը < 32 ԳԲ):

  • Byte օբյեկտը: 12 байտ (հավաքածու) + 1 байտ (արժեք) + 3 байտ (համապատասխանություն) = մոտ 16 байտ:
  • Node հանգույցը: 12 байտ (հավաքածու) + 4 байտ (հղում item) + 4 байտ (հղում next) + 4 байտ (հղում prev) + 0 байտ (համապատասխանություն, եթե դաշտերը արդեն համընկնում են 8 байտին): = մոտ 24 байտ:
  • Ընդհանուր չափը: մոտ 40 байտ:

Առավելագույն գնահատական (64-bit JVM առանց սեղմված ցուցանիշների):

  • Byte օբյեկտը: 12 байտ (հավաքածու) + 1 байտ (արժեք) + 3 байտ (համապատասխանություն) = մոտ 16 байտ:
  • Node հանգույցը: 12 байտ (հավաքածու) + 8 байտ (հղում item) + 8 байտ (հղում next) + 8 байտ (հղում prev) + 4 байտ (համապատասխանություն) = մոտ 40 байտ:
  • Ընդհանուր չափը: մոտ 56 байտ:

Այսպիսով, գնահատականը հիշողության համար byte-ի պահպանումը LinkedList<Byte>-ում մոտ 40-60 байտ է, որը մեծապես ավել է byte-ի ինքնուրույն 1 байտից, հաշվի առնելով Byte օբյեկտի և LinkedList.Node հանգույցի լրացուցիչ ծախսերը։