Sobes.tech
Middle+

LinkedList маалымат структурасында byte тибиндеги primitive сактоо үчүн керектүү эс тутумдун болжолдуу көлөмү кандай?

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 түйүнү: Ар бир элемент Node ички класында капталган. Бул түйүн төмөнкүлөрдү камтыйт:
    • Объекттин метадаталары (титул): 8 же 12 байт.
    • item талаа: сакталган объектке шилтеме (бул учурда, Byte объектисине). Шилтеме адатта 4 же 8 байт (32 же 64 бит JVM жана кысылган көрсөткүчтөрдү колдонуу менен).
    • next талаа: кийинки түйүнгө шилтеме. 4 же 8 байт.
    • prev талаа: мурунку түйүнгө шилтеме. 4 же 8 байт.
    • Туташтыруу: Жалпы өлчөмү жана түйүндүн титулу дагы туураланат.

Минималдуу баа берүү (JVM 32-бит, кысылган көрсөткүчтөр жок):

  • Byte объектисинин өлчөмү: 12 байт (титул) + 1 байт (маани) + 3 байт (түзөтүү) = болжол менен 16 байт.
  • Node түйүнү: 12 байт (титул) + 4 байт (item шилтемеси) + 4 байт (next шилтемеси) + 4 байт ( prev шилтемеси) + 4 байт (түзөтүү) = болжол менен 28 байт.
  • Жалпы өлчөмү: болжол менен 44 байт.

Стандарттык баа берүү (64-бит JVM, кысылган көрсөткүчтөр менен):

  • Byte объектисинин өлчөмү: 12 байт (титул) + 1 байт (маани) + 3 байт (түзөтүү) = болжол менен 16 байт.
  • Node түйүнү: 12 байт (титул) + 4 байт (item шилтемеси) + 4 байт (next шилтемеси) + 4 байт ( prev шилтемеси) + 0 байт (түзөтүү, эгер полелер 8 байтка туураланса) = болжол менен 24 байт.
  • Жалпы өлчөмү: болжол менен 40 байт.

Максималдуу баа берүү (64-бит JVM, кысылган көрсөткүчтөр жок):

  • Byte объектисинин өлчөмү: 12 байт (титул) + 1 байт (маани) + 3 байт (түзөтүү) = болжол менен 16 байт.
  • Node түйүнү: 12 байт (титул) + 8 байт (item шилтемеси) + 8 байт ( next шилтемеси) + 8 байт ( prev шилтемеси) + 4 байт (түзөтүү) = болжол менен 40 байт.
  • Жалпы өлчөмү: болжол менен 56 байт.

Ошентип, бир byte примитивин LinkedList<Byte> ичинде сактоо үчүн паметтин баа берүү болжол менен 40-60 байт түзөт, ал Byte объекттин жана LinkedList.Node түйүнүн кошумча чыгымдарына байланыштуу. Бул 1 байт примитивге караганда кыйла көп.