func_A(cls.data);
func_B(cls.data);
이런식으로 코드가 있을경우
int temp = cls.data;
func_A(temp);
func_B(temp);
이런식으로 바꾸는게 더 빠르다는게 토르?
저렇다고 들어서 난 지금
func_A(cls.innercls.data1);
func_A(cls.innercls.data2);
func_B(cls.innercls.data1);
func_B(cls.innercls.data2);
요랫던 코드를
innercls_t = cls.innercls;
int tem1 = innercls_t.data1,
tem2 = innercls_t.data2;
func_A(tem1);
func_A(tem2);
func_B(tem1);
func_B(tem2);
요래 바꾸고 있는데 잘하고있는거 맞나?
당연하다면 당연한가 싶기도 한데 돌다리도 두들김
시벌탱 아무리 같잖아도 그렇지 개무시하나ㅑ
얌마 JVM 크래쉬 하는 소리 집어치워라. JVM은 GC 튜닝을 익혀야 되는겨 마
흉..지금 잘하고 있는거 맞는지 잘 고민해봐.. 그정도 사람의 손길로 속도차이가 난다면 그 자바 컴파일러는 아주 구닥다리 물건이거나 학부생의 작품이다..
@야이미친 // ㅋㅋㅋ 간만이네 흉!
더 빠르긴 한데. func_A나 func_B가 호출 되자 마자 리턴하는 수준의 단순한 함수가 아니라면 빨라지는 비중은 무시해도 될 만큼 매우 적다. 즉 너처럼 바꾼다고 해서 func_A나 func_B 본문의 내용이 빨라지는것은 아니고 그냥 인자 넘기는 부분만 살짝 빨라지는데 이 작업은 원래 비중이 적어서... 암달의 법칙에 의해서 어쩌고 저쩌고...
@ㅇㅇ : 음..흉 왜 빨라지는지 알려줄 수 있음? 설마 indirection 횟수가 줄어서 그렇다는거임?;;
코딩몬/간만임! 얌마들아 JVM은 인라인도 런타임에 핫패슨가 그거에 해당하면 자동으로 인라인 만드는 그런 물건인데 저런거로 빨라질리가 없지 ㅋㅋㅋ
근데 GC 튜닝도 거의 필요 없는게 함정
얘들아 참고로 위쪽 코드는 컴파일러에 의해 자동적으로 아래 코드 처럼 최적화 될 수 없단다.
왜냐하면 두 코드는 완전히 다른 코드이기 때문이야.
func_A안에서 cls.data의 값을 바꾸는 경우 서로 다르게 작동할거 라는건 인정하지?
컴파일러가 똑똑하면 이정도는 감지해서 아래 형태로 최적화 할지 안할지 결정 할수 있겠지
하지만 멀티스레드로 프로그램이 작동하는 상황이라면? func_A()가 실행되고 있는 시점에 다른 스레드에 의해 cls.data의 값이 바뀔수도 있어
컴파일러는 이런 상황까지는 예측할 수가 없어. 그러니까 아래처럼 자동으로 최적화 못함
@ㅇㅇ : 그런 상황에서 결과가 다른건 알겠는데 모가 되든 도가 되든 의도하지 않는 결과가 나오는거 아님?
흉은 앞에서는 안된다고하고 뒤에서는 된다고 하고;; 된다는거야 안된다는거임?
아니 그러니까 프로그래머 입장에서는 func_A가 실행되는 중에 cls.data가 바뀌어도 상관 없거나, 바뀌면 안되는 상황이더라도 func_A가 cls.data를 변경 하지 않고 멀티스레딩 프로그램도 아니라는걸 알고 있다면 저렇게 바꿀 수 있는거지. 근데 컴파일러는 그런 상황을 모르니까 함부로 저렇게 못 바꾸는거고
얌마 정신차려라. 저 삽질로 생기는 거 회수하기 위해 GC 한번 돌아가는게 더 느려 ㅋㅋㅋ
ㄴ 스택에 int자리 하나 더 생기는 건데 GC가 회수할게 왜생겨
물론 저런 최적화는 쓸 데 없다고 생각함. 대부분의 경우 func_A랑 func_B의 바디 수행시간이 indirection으로 값읽어와서 인자로 넘기는것보다 수백배 커서 암만 최적화 해봐야 성능 0.1%도 안빨라짐
암달의 법칙 블라블라.
귀찮네
성능향상이 0에 수렴한다는건가.. 나쁘면 안하느니만 못할수도 있고..ㅋㅋ 뻘짓에 답변 많이달아줘서 고마워 ㅜㅜ
과거도아니고 빅오가 바끼는것도아니고 요즘컴퓨터성능이 너무좋아서 저건성능에 기별도안간다