Avatar billede fredand Forsker
28. april 2004 - 12:09 Der er 12 kommentarer og
1 løsning

Performance between public, protected, package and private

Hello!

I thought that I would see a performance improvement by making a method private instead of public. So I wrote this test program to prove my point. But I didn't see any improvment at all????.

So now is the question is there any performance improvement by making a method private instead of public, or have I dreamt it?

Best regards
Fredrik

Below is a testprogram that runs the same code within different methods (public, protected, package and private).

public class PerformanceTest
{
    long time;
    public PerformanceTest()
    {
        //Just a little warm up
        String str = new String("");
        for(int i = 0; i < 1000; i++)
            str = str + i;

        time = System.currentTimeMillis();
        publicMethod();
        time = System.currentTimeMillis() -time;
        System.out.println("public: " + time);

        time = System.currentTimeMillis();
        protectedMethod();
        time = System.currentTimeMillis() -time;
        System.out.println("protected: " + time);

        time = System.currentTimeMillis();
        packageMethod();
        time = System.currentTimeMillis() -time;
        System.out.println("package: " + time);

        time = System.currentTimeMillis();
        privateMethod();
        time = System.currentTimeMillis() -time;
        System.out.println("private: " + time);
    }

    public final void publicMethod()
    {
        String str = new String("");
        for(int i = 0; i < 3000; i++)
            str = str + i;
    }

    public void protectedMethod()
    {
        String str = new String("");
        for(int i = 0; i < 3000; i++)
            str = str + i;
    }

    void packageMethod()
    {
        String str = new String("");
        for(int i = 0; i < 3000; i++)
            str = str + i;
    }

    private void privateMethod()
    {
        String str = new String("");
        for(int i = 0; i < 3000; i++)
            str = str + i;
    }

    public static void main(String[] args)
    {
        new PerformanceTest();
    }
}
Avatar billede arne_v Ekspert
28. april 2004 - 13:14 #1
I would expect no performance difference at all.
Avatar billede arne_v Ekspert
28. april 2004 - 13:17 #2
Visibility determines at compile what you are allowed to call.

Performance is runtime characteristica.

The only argument should be that the oprmizer could more freely optimize
something private because it knows what will use it. But that does
not sound like how Java does it.
Avatar billede fredand Forsker
28. april 2004 - 13:57 #3
Thanks my humble friend!

Please, just give an answer so I could award you your well earned points.

BTW, perhaps you know some articles of rules about optimize Java code on the net?

Best regards
Fredrik
Avatar billede arne_v Ekspert
28. april 2004 - 13:58 #4
answer
Avatar billede arne_v Ekspert
28. april 2004 - 13:59 #5
I am not aware of any good links, but I can give you a reference to two
good books.
Avatar billede fredand Forsker
28. april 2004 - 14:03 #6
That would be great!
/Fredrik
Avatar billede _carsten Nybegynder
28. april 2004 - 14:08 #7
I found something once, but of course I can't find it now, but the way I remember it, there is a difference in performance private/public

Try search the internet for JVM / performance / private etc.
Avatar billede jakoba Nybegynder
28. april 2004 - 14:57 #8
There are no real 'rules' about optimizing except the big one "the program MUST work as specified by the language rules". So each vendor generating a Java compiler claim to have done it better in whichever way. Even Suns Javacompiler today optimize more (and differently) than it did 2 years ago.
Avatar billede arne_v Ekspert
28. april 2004 - 15:29 #9
Effective Java Programming Language Guide / Joshua Bloch

Java Performance Tuning / Jack Shirazi
Avatar billede arne_v Ekspert
28. april 2004 - 15:33 #10
Bloch Item 12:

"While information hiding does not, in and of itself, cause good performance, it
eanables effective performance tuning."

[og det udpensles så at når implementationen er skjult så kan man efter at
have verificeret applikationens korrekthed identificere flaskehalsene
og optimere implementationen uden at frygte at breake noget]
Avatar billede thundergod Nybegynder
29. april 2004 - 08:18 #11
Jeg koder en del i J2ME, og der er der performance forskel mellem static og non-static. Har dog ingen præcise tal. Jeg går ud fra at det også gælder i J2SE/J2EE.
Men det kan også skyldes frigørelse af den begrænsede hukommelse i J2ME miljøet.

/ Thor
Avatar billede jakoba Nybegynder
29. april 2004 - 08:26 #12
Det gælder allevegne. static variable kan udlægges med en absolut memory adresse; mens non-static variable allokeres ved runtime og addresseres med et offset til objektreferencen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester