Java method call vs 변수 사용 cpu 성능 (set / get)

Posted by [하늘이]
2018. 6. 30. 12:40 IT/Android[안드로이드]
반응형

Java 에서 static method call 과 static 멤버 변수르 사용 성능을 확인


예상대로의 결론

static member 로 참조하는 것이 10배 정도 빠르다.



Test Code #1 : Static class(sigleton) method call

    long startTime = System.currentTimeMillis();

    for(;cnt < 1000000; cnt++){

        if(StaticTestClass.instance().isOn()){

            StaticTestClass.instance().setOnOff(true);

        }

        else{

            StaticTestClass.instance().setOnOff(false);

        }

    }

    long endTime = System.currentTimeMillis();

    Log.e("@@@@@@2222@@@@@@@@@@@@@@@@cost:" + (endTime - startTime) + "@@@@@@@@@@@@@@");

=> Result

@@@@@@@@@@@@@@@@@@@@@@cost:4825@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@@@@@@@cost:4863@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@@@@@@@cost:5027@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@@@@@@@cost:4962@@@@@@@@@@@@@@

@@@@@@@@@@@@@@@@@@@@@@cost:5041@@@@@@@@@@@@@@


Test Code #2

    long startTime = System.currentTimeMillis();

    for(;cnt < 1000000; cnt++){

        if(mTestOnOff){

            mTestOnOff = false;

        }

        else{

            mTestOnOff = true;

        }

    }

    long endTime = System.currentTimeMillis();

    Log.e("@@@@@@2222@@@@@@@@@@@@@@@@cost:" + (endTime - startTime) + "@@@@@@@@@@@@@@");

=> Result :

@@@@@@2222@@@@@@@@@@@@@@@@cost:472@@@@@@@@@@@@@@

@@@@@@2222@@@@@@@@@@@@@@@@cost:455@@@@@@@@@@@@@@

@@@@@@2222@@@@@@@@@@@@@@@@cost:435@@@@@@@@@@@@@@

5회까지 할 필요가 없어졌다.


그래서 마지막으로 static class 의 sigleton의 member를 static public 으로 변경하여 성능 측정을 해봤다.

for문에 아래 부분만 변경했을 때

    long startTime = System.currentTimeMillis();

    for(;cnt < 1000000; cnt++){

            if(StaticTestClass.mIsEngineOn){

                StaticTestClass.mIsEngineOn = false;

            }

            else{

                StaticTestClass.mIsEngineOn = true;

            }

    }

    long endTime = System.currentTimeMillis();

    Log.e("@@@@@@2222@@@@@@@@@@@@@@@@cost:" + (endTime - startTime) + "@@@@@@@@@@@@@@");

=> Result :

@@@@@@2222@@@@@@@@@@@@@@@@coat:413@@@@@@@@@@@@@@
@@@@@@2222@@@@@@@@@@@@@@@@coat:418@@@@@@@@@@@@@@
@@@@@@2222@@@@@@@@@@@@@@@@coat:378@@@@@@@@@@@@@@

좀더 좋은 것 같다.

위와 같은 구조는 Java 의 구조와는 맞지 않지만 특수한 기능을 하고, 데이터 class의 sync를 보장한다면 사용해 볼 만한 것 같다.

다른 좋은 방법이나 위 사항에 대한 태클 환영햡니다.





반응형