Hi, I've run the java2d benchmarker in a few configurations, with the results as follows. Natively compiling the code doesn't yield much of an improvement over jamVM. Some interesting results. JamVM w/ latest Classpath: TEST draw(Arc2D.Double) 1000 times: average 252.3ms [135-486] TEST draw(CubicCurve2D.Double) 1000 times: average 377.1ms [167-658] TEST draw(Ellipse.Double) 1000 times: average 472.8ms [270-787] TEST draw(Line2D.Double) 1000 times: average 123.6ms [35-289] TEST draw(QuadCurve2D.Double) 1000 times: average 262.0ms [112-459] TEST draw(Rectangle.Double) 1000 times: average 90.0ms [35-207] TEST draw(RoundRectangle.Double) 1000 times: average 621.0ms [447-887] TEST fill(Arc2D.Double) 1000 times: average 198.3ms [90-398] TEST fill(Ellipse.Double) 1000 times: average 328.8ms [153-720] TEST fill(Rectangle.Double) 1000 times: average 23.3ms [16-32] TEST fill(RoundRectangle.Double) 1000 times: average 445.1ms [299-745] GCJ native code (not latest Classpath; optimized to -O2): TEST draw(Arc2D.Double) 1000 times: average 214.6ms [78-569] TEST draw(CubicCurve2D.Double) 1000 times: average 374.8ms [133-819] TEST draw(Ellipse.Double) 1000 times: average 401.0ms [179-755] TEST draw(Line2D.Double) 1000 times: average 110.5ms [13-286] TEST draw(QuadCurve2D.Double) 1000 times: average 253.6ms [82-499] TEST draw(Rectangle.Double) 1000 times: average 96.8ms [14-239] TEST draw(RoundRectangle.Double) 1000 times: average 415.8ms [181-735] TEST fill(Arc2D.Double) 1000 times: average 181.1ms [41-545] TEST fill(Ellipse.Double) 1000 times: average 284.0ms [88-707] TEST fill(Rectangle.Double) 1000 times: average 14.1ms [5-45] TEST fill(RoundRectangle.Double) 1000 times: average 287.0ms [94-571] Sun: TEST draw(Arc2D.Double) 1000 times: average 47.6ms [13-133] TEST draw(CubicCurve2D.Double) 1000 times: average 44.6ms [22-83] TEST draw(Ellipse.Double) 1000 times: average 65.3ms [43-111] TEST draw(Line2D.Double) 1000 times: average 8.5ms [2-22] TEST draw(QuadCurve2D.Double) 1000 times: average 40.8ms [15-90] TEST draw(Rectangle.Double) 1000 times: average 15.6ms [3-45] TEST draw(RoundRectangle.Double) 1000 times: average 46.8ms [20-86] TEST fill(Arc2D.Double) 1000 times: average 50.3ms [9-128] TEST fill(Ellipse.Double) 1000 times: average 50.3ms [4-125] TEST fill(Rectangle.Double) 1000 times: average 37.6ms [5-85] TEST fill(RoundRectangle.Double) 1000 times: average 52.3ms [6-121] Sun, with JIT disabled (-Djava.compiler=none): TEST draw(Arc2D.Double) 1000 times: average 150.3ms [123-275] TEST draw(CubicCurve2D.Double) 1000 times: average 229.1ms [187-413] TEST draw(Ellipse.Double) 1000 times: average 415.6ms [341-754] TEST draw(Line2D.Double) 1000 times: average 35.5ms [22-72] TEST draw(QuadCurve2D.Double) 1000 times: average 152.1ms [124-273] TEST draw(Rectangle.Double) 1000 times: average 54.8ms [44-89] TEST draw(RoundRectangle.Double) 1000 times: average 217.0ms [213-220] TEST fill(Arc2D.Double) 1000 times: average 73.1ms [48-146] TEST fill(Ellipse.Double) 1000 times: average 73.8ms [43-151] TEST fill(Rectangle.Double) 1000 times: average 59.1ms [40-97] TEST fill(RoundRectangle.Double) 1000 times: average 73.5ms [55-90]