历史
sun.misc.Unsafe至少从2004年Java1.4开始就存在于Java中了。
在Java9发布之前,有传闻说Oracle会在Java9正式发布时移除sun.misc.Unsafe,引起了激烈的争论。
因为有不少重要的Java开发库都在底层使用了sum.misc.Unsafe,例如Netty,Neo4J,Spring Framework,Apache Kafka,Apache Storm等。
新的替代API成熟之前,直接移除Unsafe是很冒险的一项做法。
JEP 260是Java9中一项重要内容,意在封装那些JDK内部使用的API,而不再提供给外部应用使用。
鉴于类似Unsafe这类非常关键而广泛使用的API,目前也没有非常有效的替代方案,暂时得到了保留,因此在JDK9中,我们仍然可以使用Unsafe类,目前没有被内部封装。
在JDK9中jdk.internal.misc中也可以找到Unsafe类。
JDK9中没有被封装的关键内部类有:
- sun.misc.{Signal,SignalHandler}
- sun.misc.Unsafe (许多功能可以通过variable handles实现,后面介绍)
- sun.reflect.ReflectionFactory
- com.sun.nio.file.{ExtendedCopyOption,ExtendedOpenOption, ExtendedWatchEventModifier,SensitivityWatchEventModifier}
这些类在以后的版本中可能被移除或封装。而非关键类例如sun.misc.BASE64Encoder和sun.misc.BASE64Decoder则直接被移除了。