Middle+
რა არის შეფასება მეხსიერების რაოდენობის, რომელიც საჭიროა ერთ primitive ტიპის byte შენახვისთვის LinkedList მონაცემთა სტრუქტურაში?
sobes.tech AI
პასუხი AI-სგან
მეხსიერების შეფასება ერთ byte პრიმიტივის შენახვისთვის LinkedList<Byte>-ში:
- პრიმიტივი
byte: იყოფა 1 ბაიტად. - ობიექტის შრიფტი
Byte:LinkedList-ში ინახება ობიექტები, არა პრიმიტივები.byteავტომატურად შეფუთულიაByteობიექტში.Byteობიექტი შეიცავს:- ობიექტის მეტადატანები (სათაური): ჩვეულებრივ 8 ან 12 ბაიტი ( JVM-ზე დამოკიდებული).
valueველი: 1 ბაიტი (byteტიპის მნიშვნელობისთვის).- მოწესრიგება: ობიექტები ხშირად მოწესრიგებულია მანქანური სიტყვის ზომაზე (4 ან 8 ბაიტი). თუ სათაური 12 ბაიტია + მნიშვნელობა 1 ბაიტი = 13 ბაიტი, სავარაუდოდ, მოწესრიგდება 16 ბაიტზე.
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 ბაიტს თავად პრიმიტივის.