- Java 9:Building Robust Modular Applications
- Dr. Edward Lavieri Peter Verhas Jason Lee
- 211字
- 2025-04-04 17:08:33
Using the sun.misc.Unsafe class
The sun.misc.Unsafe class, like other sun classes, is not officially documented or supported. It has been used to circumvent some of Java's built-in memory management safety features. While this can be viewed as a window to greater control and flexibility in our code, it is a terrible programming practice.
The class had a single private constructor, so an instance of the class could not easily be instantiated. So, if we tried to instantiate an instance with myUnsafe = new Unsafe(), a SecurityException would be thrown in most circumstances. This somewhat unreachable class has over 100 methods that permitted operations on arrays, classes, and objects. Here is a brief sampling of those methods:
Arrays | Classes | Objects |
arrayBaseOffset | defineAnonymousClass | allocateInstance |
arrayIndexScale | defineClass | objectFieldOffset |
ensureClassInitialized | ||
staticFieldOffset |
Here is a secondary grouping of the sun.misc.Unsafe class method for information, memory, and synchronization:
Information | Memory | Synchronization |
addressSize | allocateMemory | compareAndSwapInt |
pageSize | copyMemory | monitorEnter |
freeMemory | monitorExit | |
getAddress | putOrderedEdit | |
getInt | tryMonitorEnter | |
putInt |
The sun.misc.Unsafe class was earmarked for removal in Java 9. There was actually some opposition to this decision in the programming industry. To put their concerns to rest, the class has been depreciated, but will not be completely removed. A special flag can be sent to the JVM to utilize the original API.