مقدمة
كتبت مقالًا عن قسم ذاكرة JVM ، لكنني تلقيت أمس مقابلة مع ANT Financial. سألت عن المحتوى المتعلق بـ JVM وشرحت تقسيم منطقة ذاكرة JVM. كان هذا الجزء جيدًا ، لكن في وقت لاحق سألت عن مكان تخزين السلسلة في جافا. تذكرت فقط أن السلسلة هي كمية غير متغيرة ، والتي يجب تخزينها في البركة الثابتة. لكن في وقت لاحق سألت عن مكان وضع سلسلة جديدة ، والتي يجب وضعها في الكومة. في وقت لاحق ، سألت أين تم وضع مراجع السلسلة. في ذلك الوقت ، كنت أحمق وقلت أنهم وضعوا أيضًا في الكومة. الآن سألخص: يتم وضع بيانات متغير النوع الأساسي ومراجع الكائنات في المكدس ، ويتم وضع الكائن نفسه في الكومة ، ويتم وضع ثوابت السلسلة الصريحة في البركة الثابتة ، ويتم وضع كائنات السلسلة في الكومة.
وصف تجمع ثابت
تم وضع المسبح الثابت سابقًا في منطقة الطريقة ، أي في الجيل الدائم ، وتم نقله إلى الكومة بدءًا من JDK7. يمكن ملاحظة هذا التغيير من ** RFEs المهم الذي تم تناوله في ملاحظات JDK 7 في إصدار إصدار Oracle.
المنطقة: spotsynopsis: في JDK 7 ، لم تعد الأوتار الداخلية مخصصة في الجيل الدائم من كومة Java ، ولكن يتم تخصيصها بدلاً من ذلك في الجزء الرئيسي من كومة Java (المعروفة باسم الأجيال الصغيرة والكبار) ، إلى جانب الأشياء الأخرى التي تم إنشاؤها بواسطة التطبيق. سيؤدي هذا التغيير إلى مزيد من البيانات الموجودة في كومة Java الرئيسية ، وبيانات أقل في الجيل الدائم ، وبالتالي قد تتطلب تعديل أحجام الكومة. ستشاهد معظم التطبيقات اختلافات صغيرة نسبيًا فقط في استخدام الكومة بسبب هذا التغيير ، ولكن التطبيقات الأكبر التي تعمل على تحميل العديد من الفئات أو الاستفادة من الأسلوب.
وصف موقع ذاكرة السلسلة
1. ثوابت سلسلة صريحة
سلسلة A = "Holten" ؛ String B = "Holten" ؛
• بعد الجملة الأولى ، يتم إنشاء كائن سلسلة مع القيمة holten في التجمع الثابت ؛
• عند تنفيذ الجملة الثانية ، نظرًا لوجود Holten في المجموعة الثابتة ، لم يعد يتم إنشاء كائن سلسلة جديد.
• في هذا الوقت ، تكون الإشارة إلى السلسلة في مكدس الجهاز الظاهري.
1. كائن
سلسلة A = سلسلة جديدة ("Holtenobj") ؛ String B = سلسلة جديدة ("HoltenObj") ؛• عند تحميل الفصل ، يتم إنشاء كائن سلسلة مع قيمة holtenobj في التجمع الثابت. عند تنفيذ الجملة الأولى ، سيتم إنشاء كائن سلسلة جديدة ("Holtenobj") في الكومة ؛
• عند تنفيذ الجملة الثانية ، نظرًا لوجود Holtenobj في المجموعة الثابتة ، لم يعد يتم إنشاء كائن سلسلة جديد ، ويتم إنشاء كائن جديد ("Holtenobj") مباشرة في الكومة.
يؤكد
/*** تم إنشاؤه بواسطة Holten.gao في 2016/8/16. */الفئة العامة الرئيسية {public static void main (string [] args) {string str1 = "gao xiaotian" ؛ String str2 = "Gao Xiaotian" ؛ System.out.println (str1 == str2) ؛ // string string str3 = new string ("gao datian") ؛ String str4 = سلسلة جديدة ("Gao Datian") ؛ system.out.println (str3 == str4) ؛ // false}}نتيجة العودة:
Truefalse
تستند المقالة أعلاه إلى التفسير التفصيلي لمواقع ذاكرة السلسلة في Java. إنه كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.