1. خوارزمية تحليل إمكانية الوصول (البحث الجذر)
يحدد JVM ما إذا كان الكائن يبقى من خلال تحليل إمكانية الوصول. تتمثل الفكرة الأساسية لهذه الخوارزمية في استخدام سلسلة من الكائنات التي تسمى GC Roots كنقطة انطلاق ، والبحث في هذه العقد. المسارات التي تم البحث من خلالها تسمى السلاسل المرجعية. عندما يتم توصيل كائن GC Roots دون أي سلاسل مرجعية ، يثبت أن هذا الكائن غير متوفر. في الشكل أدناه ، كائنات object1 و object2 و object3 و object4 متوفرة. على الرغم من أن object5 و object6 و object7 مرتبطان ببعضهما البعض ، إلا أنهما لا يمكن الوصول إليهما على GC Roots ، لذلك سيتم الحكم على كائنات قابلة لإعادة التدوير.
في لغة جافا ، تشمل الكائنات التالية التي يمكن استخدامها كجذور GC:
1. الكائن المشار إليه في مكدس الجهاز الظاهري (المتغيرات المحلية في إطار المكدس).
2. الكائن المشار إليه بواسطة سمات فئة ثابتة في منطقة الطريقة.
3. الكائن المشار إليه بواسطة الثوابت في منطقة الطريقة.
4. الكائن المشار إليه بواسطة JNI (الطريقة الأصلية) في مكدس الطريقة المحلية.
2. رمز مصدر الربيع
يقوم spring بإنشاء كائنات من خلال الفئة التي تنفذ Interface BeanFactory ، مع بنية التنفيذ التالية:
Simplejndibeanfactory.java
الطبقة العامة SimpleJnDibeAnfactory يمتد JndilocatorSupport تنفذ beanfactory {private final set <string> shareablesources = new hashset () ؛ . الخريطة النهائية الخاصة <string ، class <؟ >> resourceTypes = new hashmap () ؛ public simplejndibeanfactory () {this.setResourCeref (true) ؛ } public void addshareablesource (String shareablesource) {this.shareAlberSources.add (shareablesource) ؛ } public void setShareAblerSources (String ... shareablesources) {this.shareAlberSources.Addall (Arrays.Aslist (shareablesources)) ؛ } الكائن العام getBean (اسم السلسلة) يلقي beansexception {return this.getBean (الاسم ، object.class) ؛ }}StaticListableBeanfactory.java
الطبقة العامة staticListableBeanfactory تنفيذ listableBeanfactory {خريطة نهائية خاصة <سلسلة ، كائن> فول ؛ Public StaticListableBeanFactory () {// الخريطة التي تم إنشاؤها باستخدام جديد هو كائن مشار إليه في المكدس ، والذي يمكن استخدامه ككائن جذور GC this.beans = new LinkedHashMap () ؛ } public staticListableBeanfactory (Map <String ، Object> Beans) {Assert.notnull (Beans ، "يجب ألا تكون خريطة الفاصوليا فارغة") ؛ هذا. } public void addBean (اسم السلسلة ، كائن الفول) {this.beans.put (الاسم ، الفول) ؛ }} من الكود المصدر أعلاه ، يمكننا أن نرى أن الكائن يتم تخزينه في الخريطة ، حيث يتم استخدام mapsingletonObjects لتخزين كائنات Singleton. يتم إنشاء كلاهما map singletonObjects beans (الجديدة في المنشئ) مباشرة باستخدام الكلمة الرئيسية new ، وهو مرجع قوي ويفي بالظروف ككائنات GC Roots (الكائنات المشار إليها في مكدس الجهاز الظاهري (المتغيرات المحلية في إطار المكدس). يتم توصيل الكائنات بهذه الطريقة GC Roots对في map حتى لا يتم إعادة تدويرها.
لخص
ما سبق هو المحتوى الكامل لهذه المقالة. آمل أن يكون محتوى هذه المقالة من بعض المساعدة لدراستك أو عملك. إذا كان لديك أي أسئلة ، فيمكنك ترك رسالة للتواصل.