3
JVM에서 최종 변수를 다르게 처리하는 방법은 무엇입니까?JVM이 클래스의 최종 변수로 수행하는 작업은 무엇입니까?
JVM에서 최종 변수를 다르게 처리하는 방법은 무엇입니까?JVM이 클래스의 최종 변수로 수행하는 작업은 무엇입니까?
이 메모리 모델에 final
의 영향에 대한 JVM 사양의 적어도 하나 개의 섹션이며, 멀티 스레드 코드를 매우 중요하다 : 객체의
final
필드 "safe publication" 수 :
final
필드를 볼 수 있어야합니다.final
참조를 통해 액세스 된 모든 개체의 필드는 최소한 생성자가 종료 될 때 최신 날짜가되도록 보장됩니다.final
이고 변경 불가능한 개체 (프리미티브 또는 변경 불가능 개체 참조)가 동기화없이 동시에 액세스 될 수 있음을 의미합니다. final
참조를 통해 실제로 "불변"객체 (필드가 실제로 final
이 아니지만 실제로는 변경되지 않는 객체)를 읽는 것도 안전합니다.final
으로 선언하지 않은 경우 다른 방법으로 스레드 안전성을 제공해야합니다.참고 : JVM은 실제 최종을 적용하지 않습니다. 리플렉션을 사용하여 값을 다시 할당 할 수 있습니다 (물론 안전한 게시를 방해 할 수 있음).
관련 항목 : http://stackoverflow.com/q/3697988/3651800 –
질문 대상은 무엇입니까? 상황은 다음과 같습니다. 다중 스레드 코드에서 값을 다시 읽을 필요가없는 등, 값이 최적화를 위해 변경되지 않는다는 지식을 사용합니다. – zapl
@MattCoubrough : 관련되었지만 중복되지 않았습니다. 그 밖의 질문은 * static final *에 관한 것입니다. – Thilo