تقدم هذه المقالة طريقة حساب مقدار المساحة التي تشغلها كائنات Java. تتم مشاركتها معك للرجوع إليها. المحتوى المحدد كما يلي
1. رأس الكائن
هناك كلمتين على الأقل على رأس الكائن. إذا كانت صفيف ، فإن ثلاث كلمات هي كما يلي:
الثاني. قواعد
أولاً ، أي كائن هو 8 بايت محاذاة ، ويتم تخزين الخصائص بترتيب [طويل ، مزدوج] ، [int ، float] ، [char ، short] ، [byte ، boolean] ، والمرجع. على سبيل المثال:
اختبار الطبقة العامة {byte a ؛ int b ؛ منطقية ج. طويل د. الكائن E ؛}إذا تم تخزين خصائص هذا الكائن بالترتيب ، فإن المساحة الواجب شغلها هي: Head (8) + A (1) + Padding (3) + B (4) + C (1) + padding (7) + d (8) + e (4) + padding (4) = 40. ولكن وفقًا لهذه القاعدة ، نحصل على: الرأس (8) + d (8) الحشو (4) = 32. يمكنك أن ترى أنه يوفر مساحة كبيرة.
عندما يتعلق الأمر بعلاقات الميراث ، فهناك قاعدة أساسية: أولاً ، يتم تخزين الأعضاء في الفئة الأم ، ثم يتم تخزين الأعضاء في الفئة الفرعية. على سبيل المثال:
الفئة A {long a ؛ int b ؛ int c ؛} الفئة B يمتد {long d ؛}الترتيب والمساحة المحتلة بهذه الطريقة كما يلي: الرأس (8) + A (8) + B (4) + C (4) + D (8) = 32. فماذا لو كانت السمات في الفئة الأصل ليست كافية ثمانية بايت؟ هذا يعطي قاعدة جديدة: إذا كانت الفاصل الزمني بين آخر عضو في فئة الوالدين والعضو الأول في فئة الطفل لا يكفي ل 4 بايت ، فيجب توسيعه إلى الوحدة الأساسية المتمثلة في 4 بايت ، على سبيل المثال:
الفئة A {byte a ؛} الفئة B يمتد {byte b ؛}بعد ذلك ، تكون المساحة المشغولة في هذا الوقت كما يلي: Head (8) + A (1) + Padding (3) + B (1) + padding (3) = 16. من الواضح أن هذه الطريقة تهدر إلى حد ما ، لذلك: إذا كان العضو الأول من الفئة الفرعية مزدوجة أو طويلة ، ولا تستخدم الفئة الوالدية 8 بايت ، وستعمل JVM على كسر القواعد ويملأ البيانات الأصغر في المساحة: على سبيل المثال:
الفئة A {byte a ؛} الفئة B يمتد {long b ؛ قصيرة ج. بايت د ؛}المساحة المشغولة في هذا الوقت هي كما يلي: الرأس (8) + A (1) + حشوة (3) + C (2) + D (1) + حشوة (1) + B (8) = 24.
ما سبق هو طريقة حساب مقدار المساحة التي تشغلها كائنات Java. آمل أن يكون من المفيد للجميع تعلم برمجة Java.