Sobes.tech
Middle+

რა არის შეფასება მეხსიერების რაოდენობის, რომელიც საჭიროა ერთ primitive ტიპის byte შენახვისთვის 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-ბიტი, სქემული მითითებები არ არის):

  • Byte ობიექტი: 12 ბაიტი (სათაური) + 1 ბაიტი (მნიშვნელობა) + 3 ბაიტი (მოწესრიგება) = დაახლოებით 16 ბაიტი.
  • Node კვანძი: 12 ბაიტი (სათაური) + 4 ბაიტი (მითითება item) + 4 ბაიტი (მითითება next) + 4 ბაიტი (მითითება prev) + 4 ბაიტი (მოწესრიგება) = დაახლოებით 28 ბაიტი.
  • საერთო ზომა: დაახლოებით 44 ბაიტი.

ტიპიური შეფასება (64-ბიტიანი JVM სქემული მითითებებით - ჩვეულებრივ 32 გბ-ზე ნაკლები):

  • 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 ბაიტია, რადგან დამატებითი ხარჯები ობიექტის შრიფტსა და კვანძის LinkedList.Node-ში შედის. ეს მნიშვნელოვნად აღემატება 1 ბაიტს თავად პრიმიტივის.