小编典典

为什么存在sun.misc.Unsafe,如何在现实世界中使用它?

java

前几天,我遇到了sun.misc.Unsafe软件包,并对它的功能感到惊讶。

当然,该类是未记录的,但是我想知道是否有充分的理由使用它。在需要使用它的地方会出现什么情况?在现实世界中如何使用它?

此外,如果您确实需要它,这是否表示您的设计可能存在问题?

为什么Java甚至包括此类?


阅读 311

收藏
2020-03-23

共1个答案

小编典典

例子

  1. VM“化身”。即无锁哈希表中使用的CAS(比较和交换),例如:sun.misc.Unsafe.compareAndSwapInt,它可以对包含针对CAS的特殊指令的本机代码进行真正的JNI调用

  2. 在此处阅读有关CAS的更多信息http://en.wikipedia.org/wiki/Compare-and-swap

  3. 主机VM的sun.misc.Unsafe功能可用于分配未初始化的对象,然后将构造函数调用解释为任何其他方法调用。

  4. 可以从本机地址跟踪数据。可以使用java.lang.Unsafe类检索对象的内存地址,并通过不安全的get / put方法直接在其字段上进行操作!

  5. JVM的编译时间优化。使用“魔术”的高性能VM,需要低级操作。例如:http : //en.wikipedia.org/wiki/Jikes_RVM

  6. 分配内存sun.misc.Unsafe.allocateMemory例如:-调用ByteBuffer.allocateDirect时,DirectByteBuffer构造函数在内部调用它

  7. 跟踪调用堆栈并重播由sun.misc实例化的值。不安全,对检测很有用

  8. sun.misc.Unsafe.arrayBaseOffset和arrayIndexScale可用于开发arraylet,该技术可有效地将大型数组分解为较小的对象,从而限制了对大型对象进行扫描,更新或移动操作的实时成本

  9. http://robaustin.wikidot.com/how-to-write-to-direct-memory-locations-in-java

2020-03-23