मेरे पास एक थ्रेड निष्पादक कार्यान्वयन है जहां एक रैपर की लागत बहुत महंगा दिखाई दे रही है। एक रैपर वर्ग कार्य है जिसे निम्नानुसार परिभाषित किया गया है:जावा विधि कॉल इतना महंगा क्यों है?
class Task {
public Runnable r;
public Task(Runnable r) {
this.r = r;
}
public void run() {
r.run();
}
List<task> taskList;
निम्नलिखित समय के लिए रन टाइम ~ 800ms है।
for (Task t : taskList) {
t.r.run();
}
जबकि निम्न मामले में यह ~ 7000ms है।
for (Task t : taskList) {
t.run();
}
यह अलगाव में नहीं होता है, लेकिन निष्पादक के कोड के अंदर हो रहा है। बस सोच रहा है कि क्या किसी के पास संकेत है कि क्या हो रहा है?
runnable पारित किया जा रहा इस परीक्षण मामले के लिए निम्नलिखित है:
class Tester implements Runnable {
int i;
public Tester(int i) {
this.i = i;
}
@Override
public void run() {
//System.out.println(i);
for (int j = 0; j < 1000000; j++) {
i = j;
}
}
public int getI() {
return i;
}
संदर्भ के लिए, कोड github.com/sharvanath/TempThreadPool पर पाया जा सकता। निष्पादन का परिणाम प्राप्त करने के लिए थ्रेडपूलटेस्ट चलाएं। अब ThreadPool.java की लाइन 41 बदलने का प्रयास करें और जादू देखें।
'रन' क्या करता है? क्या यह नो-ऑप है? – 5gon12eder
आपके द्वारा यहां पोस्ट किए गए कोड के लिए (लगभग शून्य) अंतर होना चाहिए। अन्य कोड में कुछ होना चाहिए। –
आपको पूरा कोड साझा नहीं करना चाहिए - आपको एक * न्यूनतम * उदाहरण शामिल करना चाहिए जो समस्या को प्रदर्शित करता है। –