认识 sun.misc.Unsafe

简介: 笼罩在迷雾之中的 Unsafe 私有API,有人认为应该废弃,也有人认为应该开放.[2015年07月28日] Oracle 宣称要在 Java 9 中去除私有 API: sun.

笼罩在迷雾之中的 Unsafe 私有API,有人认为应该废弃,也有人认为应该开放.

[2015年07月28日] Oracle 宣称要在 Java 9 中去除私有 API: sun.misc.Unsafe, 这就像点燃了炸药桶, 遭到 许多开发者的抗议, 他们认为 这会严重破坏Java的生态系统

开源博主 Rafael Winterhalter 在博文 “Understanding sun.misc.Unsafe” 中说, 底层编程(low-level programming) 中经常会使用到 unsafe , 这样程序员就能为特定需求而修改平台功能. 虽然 JNI (Java Native Interface) 是最安全(safest)的底层编程方式, 但因为限制更少, 开源项目都更青睐 Unsafe , .

Winterhalter 列举了如何使用 Unsafe 来绕过 Java编程中的一些限制:

第一次使用 Unsafe 是因为碰到了一个类,这个类只有一个超级难用的构造函数,我只需要一个实际的对象来代理里面的方法就行。

如果能创建子类那就 so easy; 如果类被表示为接口, 创建代理也很简单。但是这个笨重的构造函数,让我被坑死了(stuck)。通过使用Unsafe类, 妈妈再也不用担心我的代码^_^。

关于如何在Java代码中使用 Unsafe 及其适用场景, 请访问: “Understanding sun.misc.Unsafe” 和 “Java magic, Part 4: sun.misc.Unsafe ” .

原文链接: http://www.javaworld.com/article/2952869/java-platform/understanding-sun-misc-unsafe.html

原文日期: 2015年07月28日

翻译日期: 2016年01月19日

翻译人员: 铁锚 http://blog.csdn.net/renfufei

目录
相关文章
|
Java Shell Spring
java.lang.reflect.InaccessibleObjectException: Unable to make
java.lang.reflect.InaccessibleObjectException: Unable to make ... This exception occurs in a wide variety of scenarios when running an application on Java 9.
7205 0
|
22天前
|
Java 开发工具 计算机视觉
Caused by: java.lang.UnsatisfiedLinkError: Can‘t load AMD 64-bit .dll on a IA 32-bit platform【已解决】
Caused by: java.lang.UnsatisfiedLinkError: Can‘t load AMD 64-bit .dll on a IA 32-bit platform【已解决】
4 0
|
22天前
|
Java
解决报错:import sun.misc.BASE64Decoder无法找到
解决报错:import sun.misc.BASE64Decoder无法找到
13 0
|
2月前
|
网络安全
【网络安全 | Misc】misc_pic_again
【网络安全 | Misc】misc_pic_again
22 0
|
4月前
|
JSON Java 数据格式
【Java报错】记录一次 sun.misc.Unsafe.park(Native Method) Conflicting setter definitions for property 导致的内存泄露
【Java报错】记录一次 sun.misc.Unsafe.park(Native Method) Conflicting setter definitions for property 导致的内存泄露
85 0
|
4月前
|
Web App开发 Shell Linux
CATCTF_Misc
CATCTF_Misc
35 0
|
4月前
|
Shell Python
世安杯-Misc
世安杯-Misc
40 0
sun.jvm.hotspot.runtime.VMVersionMismatchException: Supported versions are 25.221-b11. Target VM
今天在查看 JVM 堆内存具体使用情况的时候,执行 jmap 命令发现如下的报错信息,报错说的是虚拟机版本不匹配,感觉很奇怪因为我刚在另外一台机器上执行了这个命令,换了一台机器就执行报错,初步判断是机器环境的问题,最后对比了两个机器的 JDK 环境,发现报错的这台机器上有两个不同版本的 JDK 所以推测跟多个版本有关系.
|
数据挖掘
java.lang.OutOfMemoryError: Coldnot not allocate JNI Env
java.lang.OutOfMemoryError: Coldnot not allocate JNI Env
java.lang.OutOfMemoryError: Coldnot not allocate JNI Env
Go REFLECT Library | 06 - reflect.Type 和 reflect.Value 应用
Go REFLECT Library | 06 - reflect.Type 和 reflect.Value 应用

热门文章

最新文章