मैं सोच रहा हूं कि कचरा संग्रह कैसे काम करता है जब आपके पास कुछ फ़ील्ड मान प्राप्त करने के लिए प्रतिबिंब वाले वर्ग होते हैं। JVM को कैसे पता है कि इन क्षेत्रों द्वारा मान संदर्भ सुलभ हैं और इसलिए वर्तमान क्षण में कचरा संग्रहण के लिए योग्य नहीं है, जब औपचारिक भाषा वाक्यविन्यास का उपयोग उन तक पहुंचने के लिए नहीं किया जाता है?कचरा संग्रह और प्रतिबिंब
एक छोटा सा टुकड़ा मुद्दा यह दर्शाता है (हालांकि प्रतिबिंब अधिक बल यहाँ किया गया है):,
/**
*
*/
import java.lang.reflect.Field;
public class B {
protected B previous = null, next = null;
/**
*
*/
public B(B from) {
this.previous = from;
}
public void transition(B to) {
this.next = to;
}
public B next() {
try {
Field f = getClass().getField("next");
f.setAccessible(true);
try {
return (B)f.get(this);
} finally {
f.setAccessible(false);
}
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
public B previous() {
try {
Field f = getClass().getField("previous");
f.setAccessible(true);
try {
return (B)f.get(this);
} finally {
f.setAccessible(false);
}
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
}
चीयर्स,
क्रिस
दिलचस्प सवाल। क्या यह किसी प्रकार के एम्बेडेड जावा एप्लिकेशन से प्रेरित था? –
क्या आप "कोड के कुछ मूल्य प्राप्त करने के लिए उपयोग किए गए प्रतिबिंब वाले वर्ग" का अर्थ स्पष्ट करने के लिए एक कोड स्निपेट शामिल कर सकते हैं? –
वास्तव में, मैं नेटवर्किंग ढांचे के लिए एक परीक्षण पर काम कर रहा हूं, और कुछ क्षेत्रों को प्रतिबिंब द्वारा उपयोग किया जाता है। आश्चर्य की बात है कि कैसे प्रतिबिंब स्मृति उपयोग पर असर डालता है, शायद JVM बनाए रखने वाले ऑब्जेक्ट्स के बारे में यह अनिश्चित है। –