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