जावा -XX के इस संस्करण के साथ: + DoEscapeAnalysis के परिणामस्वरूप बहुत कम जीसी गतिविधि और 14x तेज निष्पादन होता है।
$ java -version
java version "1.6.0_14"
Java(TM) SE Runtime Environment (build 1.6.0_14-b08)
Java HotSpot(TM) Client VM (build 14.0-b16, mixed mode, sharing)
$ uname -a
Linux xxx 2.6.18-4-686 #1 SMP Mon Mar 26 17:17:36 UTC 2007 i686 GNU/Linux
भागने विश्लेषण के बिना
,
$ java -server -verbose:gc EscapeAnalysis|cat -n
1 start
2 [GC 896K->102K(5056K), 0.0053480 secs]
3 [GC 998K->102K(5056K), 0.0012930 secs]
4 [GC 998K->102K(5056K), 0.0006930 secs]
--snip--
174 [GC 998K->102K(5056K), 0.0001960 secs]
175 [GC 998K->102K(5056K), 0.0002150 secs]
176 10000000
भागने विश्लेषण के साथ
,
$ java -server -verbose:gc -XX:+DoEscapeAnalysis EscapeAnalysis
start
[GC 896K->102K(5056K), 0.0055600 secs]
10000000
निष्पादन समय बच विश्लेषण के साथ काफी कम कर देता है। इसके लिए पाश 10e9 पुनरावृत्तियों में बदल गया था,
public static void main(String [] args){
System.out.println("start");
for(int i = 0; i < 1000*1000*1000; ++i){
Foo foo = new Foo();
}
System.out.println(Foo.counter);
}
भागने विश्लेषण के बिना,
$ time java -server EscapeAnalysis
start
1000000000
real 0m27.386s
user 0m24.950s
sys 0m1.076s
भागने विश्लेषण के साथ
,
$ time java -server -XX:+DoEscapeAnalysis EscapeAnalysis
start
1000000000
real 0m2.018s
user 0m2.004s
sys 0m0.012s
तो बच विश्लेषण के साथ उदाहरण के भाग की तुलना में के बारे में 14 गुना तेजी से गैर-भागने का विश्लेषण चलाएं।
स्रोत
2009-07-31 11:23:47
ओरेकल दस्तावेज़: बचने के विश्लेषण के बाद, सर्वर कंपाइलर स्केलर प्रतिस्थापन योग्य ऑब्जेक्ट आवंटन और जेनरेट कोड से जुड़े ताले को समाप्त करता है। सर्वर कंपाइलर सभी गैर-वैश्विक रूप से भागने वाली वस्तुओं के लिए ताले को भी हटा देता है। यह एक स्टैक आवंटन के साथ एक हेप आवंटन को स्थानांतरित नहीं करता है। – anstarovoyt
@anstarovoyt यह गैर-ग्लोबल एस्केपिंग ऑब्जेक्ट्स के लिए एक स्टैक आवंटन के साथ एक ढेर आवंटन को प्रतिस्थापित नहीं करता है। – Aliaxander
@ एलियाक्सेंडर 200 9 में सवाल पूछा गया था और मेरा जवाब 2013 में था :) – anstarovoyt