Arrays.sort의 인수 Comparator를 람다 식으로 주었을 때 발생한 성능 열화의 예 보고
참고: 아래의 위의 문제에 대한 답변 예제는 GitHub의 링크 대상에 포함되어 있습니다.
람다식 이용시
최초의 해답에서는 이하와 같이 람다식을 이용했다.
람다 식 이용시 소스 코드
그 결과가 다음과 같이 되었다.
N이 클 때 성능 점수가 기준을 충족하지 않는 것으로 확인됩니다.
익명 클래스 이용 시
성능 개선을 시도해 시행착오하고 있는 동안, 이하와 같이 람다식으로부터 익명 클래스를 이용하도록 수정했다.
익명 클래스 사용으로 수정
그 결과가 다음과 같이 되었다.
밀리 세컨드 단위이지만, 퍼포먼스가 개선하고 있는 것이 확인된다.
결과와 고찰
람다식을 이용하면, 익명 클래스를 이용했을 때와 비교해 퍼포먼스가 열화하는 경우가 있는 것을 알 수 있었다. 즉, 성능이 시비어에 요구되는 경우, 람다 식을 이용하여 리팩토링 할 때 성능의 회귀 테스트도 필요할 가능성을 시사한다.
관련 정보를 인터넷에서 찾아보면, 예를 들면 Java 각각 쓰는 방법으로 얼마나 성능이 다른가? 측정 비교해 보았다. 스트림과 루프 - Qiita에는 람다식에 의해 성능이 개선되거나 차이가 없다고 쓰여 있다. 그러나 자바: 람다는 느린가요? - 개발 메모에는 람다식에 의해 성능이 열화된다고 쓰여 있다.
람다와 invokedynamic 꿀 달에 따르면 익명 클래스의 실행 시간 증가 요인이 I/O와 jar의 압축 해제 인 반면, 람다 식의 실행 시간 증가 요인은 부트 스트랩 메소드 호출과 바이트 코드 생성이며 전자 합이 후자의 합보다 작다(링크처 슬라이드 38페이지) 때문이 아닐까 생각된다.
이번의 경우라면, 익명 클래스는 클래스의 생성이 실행전에 이루어져 계측의 대상외가 된 것에 대해, 람다의 클래스는 클래스의 생성이 실행시에 되었기 때문에, 그만큼 성능이 열화한, 라고 생각된다.
...솔직히 그다지 자신감이 없기 때문에, 만약 뭔가 지적이 있으면 교수 받을 수 있으면 다행입니다.
Reference
이 문제에 관하여(Arrays.sort의 인수 Comparator를 람다 식으로 주었을 때 발생한 성능 열화의 예 보고), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ShandyGaffLover/items/9c45c4ba166249188538
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
성능 개선을 시도해 시행착오하고 있는 동안, 이하와 같이 람다식으로부터 익명 클래스를 이용하도록 수정했다.
익명 클래스 사용으로 수정
그 결과가 다음과 같이 되었다.
밀리 세컨드 단위이지만, 퍼포먼스가 개선하고 있는 것이 확인된다.
결과와 고찰
람다식을 이용하면, 익명 클래스를 이용했을 때와 비교해 퍼포먼스가 열화하는 경우가 있는 것을 알 수 있었다. 즉, 성능이 시비어에 요구되는 경우, 람다 식을 이용하여 리팩토링 할 때 성능의 회귀 테스트도 필요할 가능성을 시사한다.
관련 정보를 인터넷에서 찾아보면, 예를 들면 Java 각각 쓰는 방법으로 얼마나 성능이 다른가? 측정 비교해 보았다. 스트림과 루프 - Qiita에는 람다식에 의해 성능이 개선되거나 차이가 없다고 쓰여 있다. 그러나 자바: 람다는 느린가요? - 개발 메모에는 람다식에 의해 성능이 열화된다고 쓰여 있다.
람다와 invokedynamic 꿀 달에 따르면 익명 클래스의 실행 시간 증가 요인이 I/O와 jar의 압축 해제 인 반면, 람다 식의 실행 시간 증가 요인은 부트 스트랩 메소드 호출과 바이트 코드 생성이며 전자 합이 후자의 합보다 작다(링크처 슬라이드 38페이지) 때문이 아닐까 생각된다.
이번의 경우라면, 익명 클래스는 클래스의 생성이 실행전에 이루어져 계측의 대상외가 된 것에 대해, 람다의 클래스는 클래스의 생성이 실행시에 되었기 때문에, 그만큼 성능이 열화한, 라고 생각된다.
...솔직히 그다지 자신감이 없기 때문에, 만약 뭔가 지적이 있으면 교수 받을 수 있으면 다행입니다.
Reference
이 문제에 관하여(Arrays.sort의 인수 Comparator를 람다 식으로 주었을 때 발생한 성능 열화의 예 보고), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ShandyGaffLover/items/9c45c4ba166249188538
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Arrays.sort의 인수 Comparator를 람다 식으로 주었을 때 발생한 성능 열화의 예 보고), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ShandyGaffLover/items/9c45c4ba166249188538텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)