回答
Unsafe
是 Java 中一个非常底层的类,它位于 sun.misc
,它主要用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等。
Unsafe
中的方法大多数都是 native
方法,这些 native
方法都是操作系统级别的方法:
- 执行内存操作:我们可以利用
Unsafe
直接操作内存,比如分配内存 (allocateMemory
)、释放内存 (freeMemory
)、设置内存 (setMemory
)、获取内存值 (getInt
、getLong
等)。 - CAS 操作:调用操作系统的
CAS
指令,实现CAS
的功能。 - 对象操作:利用
Unsafe
,我们可以突破 Java 语法本身的限制,直接从内存级别去操作 Java 堆中的对象。包括不通过构造函数可以直接创建对象,可以直接修改对象的字段值。 - 线程控制:通过
Unsafe
,可以在操作系统层次将线程挂起和恢复。
Unsafe
虽然功能强大,但是它非常危险,因为它绕过了 Java 的安全机制和内存管理,容易导致内存泄漏、数据损坏等问题。同时,从 Java 9 后,它的访问会收到更加严格的限制,所以,在设计开发过程中,我们应该尽量避免使用它。
既然,避免使用它,那 Java 为什么又需要它呢?大明哥认为主要有两个理由 :
- 高性能需求:通过直接操作内存和对象,可以避免许多不必要的检查和开销,从而提升性能。这在高性能库(如
java.util.concurrent
)中尤为重要。 - 底层实现:一些底层的 JVM 功能或库(如直接内存访问、CAS 操作)需要使用
Unsafe
来实现。
扩展
虽然使用 Unsafe
非常危险,但是我们还是可以了解它的使用方法,万一哪天用到了对吧!