مقدمة: تحليل الهروب هو نقطة فنية لا تستخدم في العديد من تقنيات JVM. ستقوم هذه المقالة بتحليل سيناريوهات استخدامها من خلال مثال.
تحليل الهروب هو خوارزمية تحليل تدفق البيانات العالمية متعددة الوظائف يمكن أن تقلل بشكل فعال من الضغط المتزامن وضغط تخصيص كومة الذاكرة في برامج JAVA. من خلال تحليل Escape ، يمكن لمترجم Java Hotspot تحليل نطاق استخدام مرجع كائن جديد وتحديد ما إذا كان سيتم تخصيص الكائن إلى الكومة.
في مبدأ التحسين لمرجم لغة الكمبيوتر ، يشير تحليل الهروب إلى طريقة تحليل النطاق الديناميكي للمؤشرات ، والذي يرتبط بتحليل المؤشر وتحليل المظهر لمبدأ التحسين المترجم. عند تخصيص متغير (أو كائن) بطريقة ما ، يمكن إرجاع مؤشره أو الرجوع إليه عالميًا ، والذي سيتم الرجوع إليه بواسطة عمليات أو مؤشرات ترابط أخرى. وتسمى هذه الظاهرة هروب المؤشر (أو المرجع).
تدعم Java وتمكين خيارات تحليل الهروب في Java SE 6U23 والإصدارات الأحدث. يمكن لمترجم Java's Prospot JIT إجراء تحليل الهروب على الكود عندما يتم تحميل الطريقة أو تحميلها ديناميكيًا. في الوقت نفسه ، تجعل خصائص كائنات Java التي تخصص على الكومة والموضوعات المدمجة في تحليل الهروب وظيفة مهمة من Java.
الفقرة أعلاه هي مقطع نقلت من شخص آخر. يستخدم المقال الكثير من المصطلحات المهنية. اسمحوا لي أن ألخص معناها:
يتم استخدام تحليل الهروب لتحديد ما إذا كان يتم تخصيص حالات معينة أو متغيرات في الكومة. إذا تم تمكين تحليل الهروب ، فيمكن تخصيص هذه المتغيرات مباشرة على المكدس بدلاً من الكومة. يمكن الرجوع إلى مؤشرات لهذه المتغيرات على مستوى العالم ، أو الإشارة إليها من قبل مؤشرات الترابط الأخرى.
قم بتشغيل الإعدادات
يتم تمكين الافتراضي على JDK 6U23 أو أعلى. هنا سنعيد تعريف الإعدادات:
أجبر على فتح
-Server -xx:+doSaPeanalysis -xx:+printgcdetail -xmx10m -xms10m
وثيقة تحليل الهروب
-Server -xx: -doescapeanalysis -xx:+pringcdetail -xmx10m -xms10m
التحقق مثيل
شفرة:
الطبقة العامة onStackTest {public static void inloc () {byte [] b = new byte [2] ؛ ب [0] = 1 ؛ } public static void main (string [] args) {long b = system.currentTimeMillis () ؛ لـ (int i = 0 ؛ i <100000000 ؛ i ++) {alloc () ؛ } long e = system.currentTimeMillis () ؛ system.out.println (e - b) ؛ }}قم بتشغيل نتائج عملية الهروب:
اكتب وصف صورة هنا
نتائج تشغيل تحليل الهروب غير ممكّن:
اكتب وصف صورة هنا
للتحليل ، فيما يلي تخصيص 2 بايت من دورات البيانات التي تبلغ 10 ملايين مرة ، يكون وقت التشغيل لتفعيل الهروب هو 8 ميلي ثانية ، في حين أن غير المنشط هو 956 ، وهو ما يقرب من 1/120 من غير تنشيط.
تأثير الفرق لا يزال واضحا جدا ...
تكون المساحة الموجودة على المكدس صغيرة جدًا بشكل عام ، ولا يمكن تخزينها إلا العديد من التغييرات وهياكل البيانات الصغيرة ، ولا يمكن تحقيق هياكل التخزين ذات السعة الكبيرة. المثال هنا هو عشرات الملايين من المرات ، مع تسليط الضوء على تحليل الهروب ، مما يسمح بتخصيصه مباشرة من المكدس ، مما يقلل بشكل كبير من عدد GCs ويحسن كفاءة التنفيذ الإجمالية للبرنامج.
لذلك ، لا يمكن أن يصدر تأثير تحليل الهروب إلا في سيناريوهات محددة ، والتي تلبي هيكل التخصيص المتغير بسعة صغيرة نسبيًا مع تردد عالي وعدد كبير.