解析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 类

Unsafe类是啥?Java最初被设计为一种安全的受控环境。尽管如此,Java HotSpot还是包含了一个“后门”,提供了一些可以直接操控内存和线程的低层次操作。这个后门类——sun.misc.Un...
  • zhxdick
  • zhxdick
  • 2016-07-23 15:45:49
  • 4890

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

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

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

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

Java中Unsafe类详解

转自:http://www.cnblogs.com/mickole/articles/3757278.html java不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe...
  • jfengamarsoft
  • jfengamarsoft
  • 2017-05-15 20:32:49
  • 213

【实战Java高并发程序设计 1】Java中的指针:Unsafe类

Java中的指针有你看不到的一面。
  • xinaij
  • xinaij
  • 2015-11-25 16:25:14
  • 1990

sun.misc.unsafe类的使用

Java是一个安全的开发工具,它阻止开发人员犯很多低级的错误,而大部份的错误都是基于内存管理方面的。如果你想搞破坏,可以使用Unsafe这个类。这个类是属于sun.* API中的类,并且它不是J2SE...
  • fenglibing
  • fenglibing
  • 2013-12-05 14:29:37
  • 34448

41. Java中的Unsafe类

Unsafe类简单讲一下这个类。Java无法直接访问底层操作系统,而是通过本地(native)方法来访问。不过尽管如此,JVM还是开了一个后门,JDK中有一个类Unsafe,它提供了硬件级别的原子操作...
  • u010853261
  • u010853261
  • 2017-01-07 12:58:49
  • 457

JAVA并发编程学习笔记之Unsafe类

java不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe类提供了硬件级别的原子操作,主要提供了以下功能: 1、通过Unsafe类可以分配内存,可以释放内存; 类中提供的3个本地方法a...
  • aesop_wubo
  • aesop_wubo
  • 2012-05-05 15:30:22
  • 26165

java Unsafe.java(一)

探究java.misc.Unsafe 类
  • hezuideda
  • hezuideda
  • 2015-04-19 20:32:54
  • 1990

Java --- Unsafe

Java --- Unsafe 初步介绍 在AQS,Netty和Guava的源码中出现了sun.misc.Unsafe 的身影。Unsafe类的定义是:执行底层,不安全的操作的方法的集合,所有的方...
  • dreamsofa
  • dreamsofa
  • 2015-10-09 16:19:20
  • 1218
收藏助手
不良信息举报
您举报文章:解析java9中的Unsafe
举报原因:
原因补充:

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