멤버 변수를 직접 반환하는 대신 Collections.unmodifiableList()를 반환하는 것이 좋습니다. 동료는 성능에 문제가 있다는 점에 우려하고 있습니다. 물론 가장 좋은 대답은 그것을 측정하는 것이고, 우리는 그렇게 할 수 있습니다 - 그러나 나는 당신의 경험과 모든 참고 문헌, 프로 또는 죄수를 알고 싶습니다.Collections.unmodifiableList에 성능 위험이 있습니까?
답변
번호는 최소한의 OpenJDK implementation 그대로 UnsupportedOperationException
의와 수정 방법은, 나머지는 단지
컴파일러
VM (심지어 그래서, 한 단계의에 의해 멀리 최적화 얻을해야 간접적 인 수준을 추가 "대체" 간접 지정은 비용이 많이 들지 않습니다).
수정할 수없는 목록을 반환하려면 정확성의 손실에 비해 성능에 미치는 영향이 약할 것입니다. 성능만으로는 피할 수 없을 것입니다. 너는 필요해.
Java 컴파일러가 아니라 VM (핫스팟)에 의해 최적화되었습니다. –
구현을 살펴보면 Collections.unmodifiable은 전달하는 대신 모든 제거/추가 메소드에 대해 예외를 던지는 실제 컬렉션을 감싸는 단순한 래퍼라는 것을 알 수 있습니다. 따라서 성능 저하는 없습니다 (포워딩 통화는 JIT에서 인라인 됨).
그렇습니다. 그렇기 때문에 대부분의 시간 대신 원래의 수정 불가능한 컬렉션을 반환해야합니다. 훨씬 더 나은 코딩 방법입니다.
JIT가 함수를 인라인하면, 그렇지 않은 경우, 예, 약간의 성능 저하는 당신은 가능성이 하지 당신이 매우 꽉 루프를 가진 경우가 아니라면 그것을을 알 수있을 것입니다 발생하지만 것입니다.
디버깅을 위해 컴파일하지 않는 한, 함수를 인라인 할 가능성이 높습니다.
- 1. Apache에서 auto_prepend_file의 보안 위험이 있습니까?
- 2. Android 기기 ID 잠재적 위험이 있습니까?
- 3. IMAGE_FILE_REMOVABLE_RUN_FROM_SWAP 또는 IMAGE_FILE_NET_RUN_FROM_SWAP과 관련된 위험이 있습니까?
- 4. Linux 커널 모듈 - 보안 위험이 있습니까?
- 5. 내부 HTTP 호출로 보안 위험이 있습니까?
- 6. jQuery Mobile을 사용하여 사이트를 프로그래밍해야하는 위험이 있습니까?
- 7. 메일 기능을 사용하여 주사 할 위험이 있습니까?
- 8. PHP 코드 삽입. 보안상의 위험이 있습니까?
- 9. 루비 보석이 트로이처럼 행동 할 위험이 있습니까?
- 10. 여기서 Silverlight에서 파일 시간을 가져올 위험이 있습니까?
- 11. 내 http 서버를 설치할 때 위험이 있습니까?
- 12. debug = "true"에서 웹 응용 프로그램을 실행하는 보안 위험이 있습니까?
- 13. 내 프로젝트에 Psyco를 혼합 할 때 (있다면) 어떤 위험이 있습니까?
- 14. aspnet_membership을 사용하면 어떤 위험이 발생합니까?
- 15. C#/Net 웹 브라우저가 악용 될 위험이 있습니까?
- 16. Drupal 설치를위한 공용 저장소 : 어떤 보안 위험이 있습니까?
- 17. 다른 사이트에서 호스팅되는 SSL 이미지를 사용할 때 위험이 있습니까?
- 18. Javascript 클라이언트 측에서 UUID를 생성 할 위험이 있습니까?
- 19. 캐싱 가능한 HTTPS 응답을 허용하는 웹 서버에 보안 위험이 있습니까?
- 20. ReaderWriterLockSlim의 MSDN 예제 사용에는 교착 상태 위험이 있습니까?
- 21. SqlConnection 개체를 단일 실행 파일의 속성으로 사용할 위험이 있습니까?
- 22. HTML : 중첩 된 <form> s를 사용할 위험이 있습니까?
- 23. 프로젝트의 코드 생성기 소개. 이것이 위험이 될 수 있습니까?
- 24. 부유 요소에 너비를 지정하지 않으면 어떤 위험이 있습니까?
- 25. 추출 된 PHP 슈퍼 전역을 사용할 때 어떤 위험이 있습니까?
- 26. .htaccess 파일을 포럼에 게시 할 때 위험이 있습니까?
- 27. 배포 용으로 앱을 만들 때 NSLog 문을 떠날 위험이 있습니까?
- 28. SSL 인증서를 서버 대신로드 밸런서에 설치하면 보안 위험이 있습니까?
- 29. Java의 기본 패키지에서 변경하는 것과 관련된 위험이 있습니까?
- 30. 다른 객체에서 원시 배열 프로토 타입 메서드를 사용할 위험이 있습니까?
이것은 미친 듯이 날뛰는 미숙 한, 미숙 한 마이크로 최적화의 일종입니다. 이러한 응답과 소스 코드 자체를 동료에게 알려주십시오. – duffymo
고마워요, 더피; 나는 그것을 할 거 야. 차라리 측정 할 시간이 필요 하겠지만, 나만을 위해서가 아니라 여기에 명확한 대답을하는 것이 좋습니다. 나는 이미이 질문들에 대한 질문을 받았을 것이라고 기대했다. 내가하지 않았을 때 - 글쎄, 나는 물었다. –
@duffymo 전적으로 동의했습니다. @ 칼 마나 스트 당신이 동료에게 물어볼 질문은 '무엇에 비해 성능이 정상입니까?' 그것이 당신이 원하는 경우 제로 시간에 잘못된 대답을 얻을 수 있습니다. 그렇지 않습니다. – EJP