2017-11-27 3 views
0

자바 팔 때까지 다음과 같은 방법을 통해 싱글 sun.misc.Unsafe 인스턴스를 얻을 수 있었다 :Java 9에서 sun.misc.Unsafe를 사용할 수 있습니까?

public static Unsafe getUnsafe() { 
    try { 
     Field f = Unsafe.class.getDeclaredField("theUnsafe"); 
     f.setAccessible(true); 
     return (Unsafe) f.get(null); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return null; 
} 

이 매우 Unsafe는, 많은 벤더 및 라이브러리가 내부적으로 사용 사용하지 않는 것이 제안되었다하더라도.

이제 Java 9 및 Jigsaw에서 Unsafe이 처리되는 방식이 변경되었다고 생각합니다. 나는 반대로 정보를 가진 몇몇 포스트를 읽었다. 어떤 사람들은 그것이 완전히 숨겨져 있고 검색 할 수 없다고 말하는 사람들도 있고 VM 플래그를 활성화해야한다고 말하는 사람들도 있고 다른 사람들이 VM 플래그를 사용할 수 있어야한다고 말하는 사람들도 있고 공식적으로 지원해야한다고하는 사람들도 있습니다.

So : 여전히 Java 9에서 sun.misc.Unsafe을 사용할 수 있습니까? 그렇다면 어떻게해야합니까?

+1

'java.misc.Unsafe'와 같은 것이 없습니다. 'sun.misc.Unsafe'가 있으며, 1997 년 이후로 JDK가 발표 된 모든 패키지에 포함 된 일반적인'sun. * '패키지 경고를받습니다. – EJP

+4

sun.misc.Unsafe는 JDK 8에서했던대로 JDK 9. 모든 세부 사항은 JEP 260을 참조하십시오. 무슨 이슈에 빠지니? –

+1

올바른 종료 질문은 "그렇다면 * 왜 *?"이어야합니다. – Holger

답변

3

동일한 것을 얻은 것뿐만 아니라 개의 방법을 추가했습니다. 이것은 미래에 언젠가는 제거 될 것이라는 약속입니다. 이번에는 확실히.

또한 두 개가 개이고, 하나는 sun.misc.Unsafejdk.internal.misc.Unsafe입니다. 첫 번째 것은 제거되어야하는 것입니다.

두 번째 것은 java-9에서도 얻을 수 있지만 특수 키 addExports:java.base/jdk.internal.misc=ALL-UNAMED (단,이 경우는 권장하지 않음)을 사용해야합니다.

변경된 사항은 더 이상 사용할 필요가 없도록 패치되거나 추가 된 공용 메서드가 많이 있다는 것입니다 (예 : AtomicInteger#weakCompareAndSet). 예를 들어 예상 한대로 수행하지 않았습니다.

관련 문제