解析java9中的Unsafe

原创 2018年01月18日 16:19:13

欢迎移步到我的个人博客

版权声明:本文为博主原创文章,转载请注明出处,谢谢!

写在前面

关于Unsafe我之前写过一个文章Unsafe类初探,有兴趣的话可以先看下。这里先说一下这个类的重要性吧。

其实在一般的应用中这个类并没有作用,但是在一些场景下它是不可替代的,这里可以举一个常见的例子。我们都知道JavaC++C不同,可以说是最大的不同,是没有办法直接操作内存,默认都是由JVM进行内存分配和垃圾回收,但是这种方式往往在垃圾回收时由于STW太长导致服务短暂或较长时间停止,而且这种问题即使调JVM参数也无法根本的解决,甚至无任何好转。但是使用Unsafe,我们即使在Java中也可以手动操作内存,这样可以大大减少垃圾回收时间而且可以减少堆内内存的使用。

但是一直有传言,java9的时候将会把这个类删除,这是个灾难性的消息,因为有很多应用现在依赖于它。不过就目前的java9版本来看这个类并没有删除,而且还更加易于使用。

Unsafe的变化

包路径

1.8之前Unsafe的包路径为:

package sun.misc;

而到了java9,它的包路径改成了下面这个,说明这个类已经开放使用。

package jdk.internal.misc;

获取Unsafe实例方式

1.8之前Unsafe是不公开的类,只能通过反射或者使用系统类加载器使用,利用反射的使用方式如下。这里不再详细分析。

Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
Unsafe unsafe = (Unsafe) f.get(null);

而到了java9,Unsafe包含了一个静态方法,可以直接拿到theUnsafe对象。如下。

/**
 * 给调用者提供执行不安全操作的能力
 */
public static Unsafe getUnsafe() {
    return theUnsafe;
}

注释

1.8之前Unsafe是没有注释的,但是在java9中给予了非常详细的注释,这里不贴图做比较了。

写在最后

我并没有实际测试,只是将之前一个包装了Unsafe的工具类拷贝到了java9环境中,没有报什么错误,目测可以兼容使用。如果你们发现了有什么使用上的不同可以留言。

欢迎加入微信公众号
这里写图片描述

Java为什么会引入及如何使用Unsafe

http://www.importnew.com/14511.html综述sun.misc.Unsafe至少从2004年Java1.4开始就存在于Java中了。在Java9中,为了提高JVM的可维护性...
  • bluejoe2000
  • bluejoe2000
  • 2017年06月23日 08:58
  • 291

Java 9 新特性快速预览

Java 8 已经出来三年多的时间了,原本计划2016年七月份release Java 9,但是基于种种原因,Java 9 被推迟到了2017年的3月份,本人也在Open JDK的官网上看到了Java...
  • wangwenjun69
  • wangwenjun69
  • 2016年12月11日 13:22
  • 51882

jdk 源码分析(10)java unsafe 分析

cas大意就是先去获取一次结果,如果结果和现在不同,就直接返回,因为有其他人修改了;否则会一直尝试去修改。直到成功。...
  • chenfenggang
  • chenfenggang
  • 2017年08月03日 21:37
  • 389

Java JDK Unsafe

最近看java.util.concurrent.atomic包,发现其中大量的用到Unsafe这个类。就在网上查了一下这个类到底是来干嘛的.java不能直接访问操作系统底层,而是通过本地方法来访问。U...
  • u012410733
  • u012410733
  • 2016年09月01日 22:05
  • 420

解析java9中的Unsafe

听说java9要移除Unsafe类了,真的吗
  • luzheqi
  • luzheqi
  • 2018年01月18日 16:19
  • 102

java 中的Unsafe

在阅读AtomicInteger的源码时,看到了这个类:sum.msic.Unsafe,之前从没见过。所以花了点时间google了一下。   Unsafe的源码:http://www.do...
  • z69183787
  • z69183787
  • 2015年09月04日 22:01
  • 550

9. Java 对Json的解析

JSON(Javascript Object Notation)是一种轻量级的数据交换语言,以文字为基础,且易于让人阅读。尽管JSON是在Javascript的一个子集,但JSON是独立于语言的文本格...
  • zhagener
  • zhagener
  • 2014年03月12日 11:44
  • 2581

Unsafe 源码解析

/** * This class should provide access to low-level operations and its * use should be limited to ...
  • Alex19881006
  • Alex19881006
  • 2014年04月28日 15:39
  • 1843

JDK8中UnSafe.java类的源码

  • 2015年01月24日 10:30
  • 45KB
  • 下载

Unsafe--Java为什么会引入及如何使用Unsafe

转载自:http://www.importnew.com/14511.html 综述 sun.misc.Unsafe至少从2004年Java1.4开始就存在于Java中了。在Java9中,为了...
  • szzt_lingpeng
  • szzt_lingpeng
  • 2017年04月26日 20:05
  • 160
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:解析java9中的Unsafe
举报原因:
原因补充:

(最多只允许输入30个字)