认识 sun.misc.Unsafe

笼罩在迷雾之中的 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

时间: 2024-10-07 21:53:31

认识 sun.misc.Unsafe的相关文章

Java中的sun.misc.Unsafe包

chronicle项目:https://github.com/peter-lawrey/Java-Chronicle 这个项目是利用mmap机制来实现高效的读写数据,号称每秒写入5到20百万条数据. 作者有个测试,写入1百万条log用时0.234秒,用java自带的logger,用时7.347秒. 在看chronicle的源代码,发现一个牛B的利用Unsafe来直接读写内存,从而提高效率的例子. 详细见这个类:https://github.com/peter-lawrey/Java-Chroni

Java Magic. Part 4: sun.misc.Unsafe

原文地址 译文地址 译者:许巧辉 校对:梁海舰 Java是一门安全的编程语言,防止程序员犯很多愚蠢的错误,它们大部分是基于内存管理的.但是,有一种方式可以有意的执行一些不安全.容易犯错的操作,那就是使用Unsafe类. 本文是sun.misc.Unsafe公共API的简要概述,及其一些有趣的用法. Unsafe 实例 在使用Unsafe之前,我们需要创建Unsafe对象的实例.这并不像Unsafe unsafe = new Unsafe()这么简单,因为Unsafe的构造器是私有的.它也有一个静

Java sun.misc.unsafe类的使用

Java是一个安全的开发工具,它阻止开发人员犯很多低级的错误,而大部份的错误都是基于内存管理方面的.如果你想搞破坏,可以使用Unsafe这个类.这个类是属于sun.*API中的类,并且它不是J2SE中真正的一部份,因此你可能找不到任何的官方文档,更可悲的是,它也没有比较好的代码文档. 1.实例化sun.misc.Unsafe 如果你尝试创建Unsafe类的实例,基于以下两种原因是不被允许的. 1).Unsafe类的构造函数是私有的: 2).虽然它有静态的getUnsafe()方法,但是如果你尝试

Understanding sun.misc.Unsafe

转自: https://dzone.com/articles/understanding-sunmiscunsafe The biggest competitor to the Java virtual machine might be Microsoft's CLR that hosts languages such as C#. The CLR allows to write unsafe code as an entry gate for low level programming, so

sun.misc.unsafe

Java中大部分错误都是基于内存管理方面的.如果想破坏,可以使用Unsafe这个类. 实例化Unsafe: 下面两种方式是不行的 private Unsafe() {} //私有构造方法 @CallerSensitive public static Unsafe getUnsafe() { Class var0 = Reflection.getCallerClass(); if(!VM.isSystemDomainLoader(var0.getClassLoader())) {//如果不是JDK

sun.misc.unsafe类的使用

这个帖子是关于JAVA中鲜为人知的特性的后续更新,如果想得到下次在线讨论的更新,请通过邮件订阅,并且不要忘了在评论区留下你的意见和建议. Java是一个安全的开发工具,它阻止开发人员犯很多低级的错误,而大部份的错误都是基于内存管理方面的.如果你想搞破坏,可以使用Unsafe这个类.这个类是属于sun.* API中的类,并且它不是J2SE中真正的一部份,因此你可能找不到任何的官方文档,更可悲的是,它也没有比较好的代码文档. 实例化sun.misc.Unsafe 如果你尝试创建Unsafe类的实例,

使用sun.misc.Unsafe及反射对内存进行内省(introspection)

对于一个有经验的JAVA程序员来说,了解一个或者其它的JAVA对象占用了多少内存,这将会非常有用.你可能已经听说过我们所生活的世界,存储容量将不再是一个问题,这个对于你的文本编辑器来说可能是对的(不过,打开一个包含大量的图片以及图表的文档,看看你的编辑器会消耗多少内存),对于一个专用服务器软件来说也可能是对的(至少在你的企业成长到足够大或者是在同一台服务器运行其它的软件之前),对于基于云的软件来说也可能是对的,如果你足够的富有可以花足够的钱可以买顶级的服务器硬件. 然而,现实是你的软件如果是受到

java对象的内存布局(二):利用sun.misc.Unsafe获取类字段的偏移地址和读取字段的值

在上一篇文章中.我们列出了计算java对象大小的几个结论以及jol工具的使用,jol工具的源代码有兴趣的能够去看下.如今我们利用JDK中的sun.misc.Unsafe来计算下字段的偏移地址,一则验证下之前文章中的结论,再则跟jol输出结果对照下.怎样获取sun.misc.Unsafe对象.能够參考这篇文章. public class VO { public int a = 0; public long b = 0; public static String c= "123"; pub

sun.misc.Unsafe的理解

以下sun.misc.Unsafe源码和demo基于jdk1.7: 最近在看J.U.C里的源码,很多都用到了sun.misc.Unsafe这个类,一知半解,看起来总感觉有点不尽兴,所以打算对Unsafe的源码及使用做个分析: 另外,网上找了份c++的源代码natUnsafe.cc(可惜比较老,Copyright (C) 2006, 2007年的,没找到新的),也就是sun.misc.Unsafe的C++实现,跟Unsafe类中的native方法对照起来看更加容易理解: Unsafe类的作用 可以