benchmark result

Mathieu Lacage Mathieu.Lacage@sophia.inria.fr
Tue Dec 7 10:34:00 GMT 2004


On Tue, 2004年12月07日 at 10:06 +0000, Andrew Haley wrote:
> Mathieu Lacage writes:
> > On Mon, 2004年12月06日 at 16:07 +0100, Mathieu Lacage wrote:
> > > On Mon, 2004年12月06日 at 13:56 +0000, Andrew Haley wrote:
> > > > We could improve the performance of these collection classes with
> > > > little work. What is required is someone to study the code, do some
> > > > profiling, and fix things.
> > > 
> > > I will look into this when I find some time.
> > 
> > I tried to replace my iterators by getters on the critical paths of the
> > code. The patch itself is rather simple and I found the results
> > interesting...
>> Could you let me know what you changed? A diff or somesuch?

It took me a while to find the exact iterator access which triggered the
performance gain/loss but this is the 3-liner responsible for 95% of the
performance gain you see in my previous email. I believe that this patch
has a major influence on the GC too because it avoids the creation of
these really short-lived Iterator objects and this code runs in a really
tight loop (unexpectedly for me because I had never seen it in any jdk
profile). 
In the specific scenario I use here, the m_trees ArrayList always
contains only a single element. It seems clear to me that the jdk JIT
unrolls this single-iteration loop. I already tried to use -fprofile-
arcs to avoid this but I get an ICE on gcc 3.4.3 and gcc 4.0.0. I assume
this is a known problem.
- for (Iterator i = m_trees.iterator(); i.hasNext (); ) {
- Tree tree = (Tree) i.next ();
+ int size = m_trees.size ();
+ for (int i = 0; i < size; i++) {
+ Tree tree = (Tree) m_trees.get (i);
Here is a new oprofile result:
opreport:
 13418 10.2113 libgcj.so.5.0.0
 9785 7.4466 MainSimulation
opgprof on libgcj.so:
 % cumulative self self total
 time samples samples calls T1/call T1/call name
 21.95 2945.00 2945.00 _ieee754_log
 13.09 4701.00 1756.00 GC_mark_from
 9.58 5986.00 1285.00 Jv_LookupInterfaceMethodIdx
 6.60 6871.00 885.00 ZN4java4util9ArrayList3getEi
 5.69 7635.00 764.00 Z20_Jv_IsAssignableFromPN4java4lang5ClassES2_
 5.25 8340.00 705.00 Jv_CheckCast
 4.58 8954.00 614.00 frame_dummy
 3.39 9409.00 455.00 ZN4java4util14AbstractList18ドルcheckModEv
 3.27 9848.00 439.00 GC_local_gcj_malloc
 3.20 10278.00 430.00 ZN4java4util14AbstractList17ドルhasNextEv
 2.62 10629.00 351.00 ZN4java4util14AbstractList14ドルnextEv
 2.31 10939.00 310.00 ZN4java4util9ArrayList19checkBoundExclusiveEi
 1.86 11188.00 249.00 ZN4java4util9ArrayList3addEPNS_4lang6ObjectE
 1.42 11379.00 191.00 Jv_AllocObjectNoFinalizer
 1.38 11564.00 185.00 init
 1.33 11742.00 178.00 Jv_CheckArrayStore
 1.26 11911.00 169.00 ZN4java4util9ArrayList4sizeEv
 1.19 12071.00 160.00 ZN4java4util14AbstractList16ドルfinit$Ev
 1.13 12223.00 152.00 ZN4java4util12AbstractList8iteratorEv
 1.04 12362.00 139.00 ZN4java4lang4Math3logEd
 0.95 12490.00 128.00 log
Mathieu
-- 


More information about the Java mailing list

AltStyle によって変換されたページ (->オリジナル) /