javito
javito

Reputation: 1529

newInstance() vs new

Is there a penalty for calling newInstance() or is it the same mechanism underneath? How much overhead if any does newInstance() have over the new keyword* ?

*: Discounting the fact that newInstance() implies using reflection.

Upvotes: 26

Views: 12000

Answers (3)

niqniq
niqniq

Reputation: 9

There's a difference - in 10 times. Absolute difference is tiny but if your write low latency application cumulative CPU time lost might be significant.

    long start, end;
    int X = 10000000;
    ArrayList l = new ArrayList(X);
    start = System.nanoTime();
    for(int i = 0; i < X; i++){
        String.class.newInstance();
    }
    end = System.nanoTime();
    log("T: ", (end - start)/X);

    l.clear();
    start = System.nanoTime();
    for(int i = 0; i < X; i++){
        new String();
    }
    end = System.nanoTime();
    log("T: ", (end - start)/X);

Output:

T: 105
T: 11

Tested on Xeon W3565 @ 3.2Ghz, Java 1.6

Upvotes: -1

TofuBeer
TofuBeer

Reputation: 61526

In a real world test, creating 18129 instances of a class via "Constuctor.newInstance" passing in 10 arguments -vs- creating the instances via "new" the program took no measurable difference in time.

This wasn't any sort of micro benchmark.

This is with JDK 1.6.0_12 on Windows 7 x86 beta.

Given that Constructor.newInstance is going to be very simlilar to Class.forName.newInstance I would say that the overhead is hardly anything given the functionality that you can get using newInstance over new.

As always you should test it yourself to see.

Upvotes: 17

Eddie
Eddie

Reputation: 54421

Be wary of microbenchmarks, but I found this blog entry where someone found that new was about twice as fast as newInstance with JDK 1.4. It sounds like there is a difference, and as expected, reflection is slower. However, it sounds like the difference may not be a dealbreaker, depending on the frequency of new object instances vs how much computation is being done.

Upvotes: 1

Related Questions