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

前几天我遇到了sun.misc.Unsafe包裹,并对它能做什么感到惊讶.

当然,这门课没有证件,但我想知道是否有充分的理由使用它.您可能需要使用哪些场景?它如何在现实场景中使用?

此外,如果您确实需要它,那是否表明您的设计可能出现问题?

为什么Java甚至包括这个类?

解决方法:

例子

> VM“内在化”.即无锁哈希表中使用的CAS(比较和交换)
例如:sun.misc.Unsafe.compareAndSwapInt
它可以将真正的JNI调用转换为包含CAS特殊指令的本机代码

在这里阅读有关CAS的更多信息http://en.wikipedia.org/wiki/Compare-and-swap
>主机VM的sun.misc.Unsafe功能可用于分配未初始化的对象,然后将构造函数调用解释为任何其他方法调用.
>可以从本机地址跟踪数据.可以检索
使用java.lang.Unsafe类的对象的内存地址,并通过不安全的get / put方法直接对其字段进行操作!
>编译JVM的时间优化.高性能VM使用“魔术”,需要低级操作.例如:http://en.wikipedia.org/wiki/Jikes_RVM
>分配内存,sun.misc.Unsafe.allocateMemory例如: – 当调用ByteBuffer.allocateDirect时,DirectByteBuffer构造函数在内部调用它
>跟踪调用堆栈并使用sun.misc.Unsafe实例化的值进行重放,这对于检测非常有用
> sun.misc.Unsafe.arrayBaseOffset和arrayIndexScale可用于开发arraylets,这是一种有效地将大型数组拆分为较小对象的技术,以限制扫描,更新或移动大型对象的实时成本
> http://robaustin.wikidot.com/how-to-write-to-direct-memory-locations-in-java

更多关于这里的参考文献 – http://bytescrolls.blogspot.com/2011/04/interesting-uses-of-sunmiscunsafe.html

上一篇:Java 不安全的反射 unsafe reflection


下一篇:12.Unsafe原子性操作