一,简介
Unsafe可以用于获取成员字段在类实例中的偏移量,直接操作变量在主内存中的值等操作。
1,获取unsafe.objectFieldOffset(Field f)成员变量地址偏移量。
public class AtomicInteger extends Number implements java.io.Serializable { private static final long serialVersionUID = 6214790243416807050L; // setup to use Unsafe.compareAndSwapInt for updates private static final Unsafe unsafe = Unsafe.getUnsafe(); private static final long valueOffset; static { try { valueOffset = unsafe.objectFieldOffset (AtomicInteger.class.getDeclaredField("value"));//获取该字段的偏移量 } catch (Exception ex) { throw new Error(ex); } } private volatile int value;//成员字段 /** * Creates a new AtomicInteger with the given initial value. * * @param initialValue the initial value */ public AtomicInteger(int initialValue) { value = initialValue; } }2,根据字段偏移量获取实例中此字段的值。
long offset = unsafe.objectFieldOffset(User.class.getDeclaredField("age")); Object obj = unsafe.getInt(this, offset);//获取int型值,getObject(),getLong()等 System.out.println(obj);3,CAS算法支持
public class AtomicBoolean implements java.io.Serializable { /** * Atomically sets the value to the given updated value * if the current value {@code ==} the expected value. * * @param expect the expected value * @param update the new value * @return true if successful. False return indicates that * the actual value was not equal to the expected value. */ public final boolean compareAndSet(boolean expect, boolean update) { int e = expect ? 1 : 0; int u = update ? 1 : 0; return unsafe.compareAndSwapInt(this, valueOffset, e, u);//如果主内存中的值是期望 //的e则替换成u并返回true,否则返回false。 } }4,获取Unsafe实例
/**import sun.misc.Unsafe;导入此包 * 反射获取该实例,还绕开了安全管理器的限制 */ private static Unsafe getUnsafeInstance() throws SecurityException, NoSuchFieldException, IllegalArgumentException, IllegalAccessException { Field theUnsafeInstance = Unsafe.class.getDeclaredField("theUnsafe"); theUnsafeInstance.setAccessible(true); return (Unsafe) theUnsafeInstance.get(Unsafe.class);//返回指定对象上此Field字段表示的值 }
相关推荐
CAS算法的出现使得在不使用synchronize这种“悲观锁”依然可以实现数据的安全访问,CAS算法是指先读取要修改的变量值,对它进行计算,然后执行检查并更新这个步骤(更新前判断那个值是否是之前那个读到的值),检查...
JDK8中sun.misc下UnSafe类源代码 UnSafe.java JDK8中sun.misc下UnSafe类源代码 UnSafe.java
JDK8中sun.misc包下的UnSafe类,想查看源码的就拿走,没积分的请与我联系!xtfggef@gmail.com
Java Unsafe类1
在阅读AtomicInteger的源码时,看到了这个类:sum.msic.Unsafe,之前从没见过。所以花了点时间研究了下,下面这篇文章主要给大家介绍了关于Java中Unsafe类的相关资料,需要的朋友可以参考借鉴,下面来一起学习学习吧
这个Unsafe类允许直接访问JVM中的内存,这是非常危险的,但是很有趣:)。 unsafe-helper-包含一些简单的方法,这些方法使使用sun.misc.Unsafe更容易。 unsafe-collection-在ArrayList上建模的示例列表,该列表不...
过度的使用Unsafe类会使得出错的几率变大,因此Java官方并不建议使用的,官方文档也几乎没有。Oracle正在计划从Java 9中去掉Unsafe类,如果真是如此影响就太大了。 Unsafe类提供了以下这些功能: 一、内存管理。包括...
并发作为 Java 中非常重要的一部分,其内部大量使用了 Unsafe 类,它为 java.util.concurrent 包中的类提供了底层支持。
其实Java官方不推荐使用Unsafe类,因为官方认为,这个类别人很难正确使用,非正确使用会给JVM带来致命错误。但还是要会使用,下面这篇文章就来给大家简单的谈一谈关于Java中Unsafe类的相关资料,需要的朋友可以参考...
java魔法类:Unsafe应用
我们经常在JUC包下的ConcurrentHashMap、Atomic开头的原子操作类、AQS以及LockSupport里面看到Unsafe类的身影,这个Unsafe类究竟是干什么的,本文可以带着读者一探究竟。 Java和C++、C语言的一个重要区别,就是Java...
主要给大家介绍了关于Java并发编程学习之Unsafe类与LockSupport类源码的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
不安全适配器一个工具包,用于协助使用Java Unsafe类来分配和管理本地堆外内存块。
在Java9中,为了提高JVM的可维护性,Unsafe和许多其他的东西一起都被作为内部使用类隐藏起来了。但是究竟是什么取代Unsafe不得而知,个人推测会有不止一样来取代它,那么问题来了,到底为什么要使用Unsafe? 做...
内存不安全 以完全通用的非类型安全方式使用指针和非托管内存的不安全方法。 NuGet 当前的NuGet软件包名称为DotNetCross....Unsafe类现在已添加到.NET Core中,并作为单独的程序包存在: 如有疑问,请使用此官方软件
Java 多线程与并发(8_26)-JUC原子类_ CAS, Unsafe和原子类详解
不安全的我 使用关键但非常快的序列化对象的简单库。 使用这部进行解释。 ##Warning 这个库是一个... 原因很简单:Unsafe 类的任何错误都不会导致异常,而是会导致 VM 崩溃! 使用风险自负。 ##许可证麻省理工学院
JDK8中sun.misc下UnSafe类源代码 UnSafe.java
Java是一个安全的开发工具,它阻止开发人员犯很多低级的错误,而大部份的...如果你想搞破坏,可以使用Unsafe这个类。下面这篇文章主要给大家介绍了关于Java中魔法类:sun.misc.Unsafe的相关资料,需要的朋友可以参考下
LockSupport是JDK1.6中在java.util.concurrent中的子包locks中引入的一个比较底层的工具类,用来创建锁...根据LockSupport 源码发现LockSupport的核心方法都是基于大名鼎鼎的sun.misc.Unsafe类中的park和unpark实现的。