ja获取Unsafe类的实例和取消eclipse编译的错误和警告

JRE的rt.jar中提供了一个类sun.misc.Unsafe,虽然这个类因为其不其安全性,不建议使用,而且被加了诸多限制;但

是在很多场合下我们确实需要这个类提供的强大功能。JDK类库下的NIO和concurrent包下的很多类都使用到了Unsafe

类,如AtomicInteger和AbstractQueuedSynchronizer等。

JDK源码中对这个类进行了严格限制,我们不能通过常规new的方式去获取该类的实例,也不能通过Unsafe.getUnsafe

()来获取实例。但是我们可以通过反射,在我们的应用代码中获取Unsafe类的实例:

public static Unsafe getUnsafeInstance() throws Exception
{
        // 通过反射获取rt.jar下的Unsafe类
        Field theUnsafeInstance = Unsafe.class.getDeclaredField("theUnsafe");
        theUnsafeInstance.setAccessible(true);
        // return (Unsafe) theUnsafeInstance.get(null);是等价的
        return (Unsafe) theUnsafeInstance.get(Unsafe.class);
}

在eclipse编写完这个函数之后,会出现错误或者警告提示:Access restriction: The type Unsafe is not accessible

due to restriction on required library C:\Program Files\Java\jdk1.6.0_32\jre\lib\rt.jar。

虽然这段代码在eclipse里面会报经过或者报错,但它的却是可以运行的。我们可以在eclipse进行如下设置,来取消警

告或错误:Window-->Preferences-->Java-->Compiler-->Errors/Warnings,将里面的Deprecated and restricted API中

的Forbidden references(access rules)设置成Ignore,这样eclipse就不会再报警告或者错误了。

ja获取Unsafe类的实例和取消eclipse编译的错误和警告,布布扣,bubuko.com

时间: 2024-10-12 13:42:24

ja获取Unsafe类的实例和取消eclipse编译的错误和警告的相关文章

sun.misc.unsafe类的使用

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

java的sun.misc.Unsafe类

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

Java sun.misc.unsafe类的使用

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

反射的源头,Class类的实例

java.lang.Class:是反射的源头.创建一个类,通过编译,生成.class文件.之后使用java.exe加载(JVM的类加载器)加载此.class文件.加载到内存以后,就是一个运行时类,存在缓冲区.那么这个运行时类本身就是一个Class的实例. 1. 一个运行时类只加载一次 2. 有了Class的实例以后,才可以进行如下操作 1)创建对应的运行时类的对象 2)获取对应的运行时类的完整结构(属性,方法,构造器-) 3)获取对应的运行时类的指定结构(属性,方法,构造器) 4)反射的应用:动

[多线程系列]unsafe类和反射获取对象字段值速度比较

在分析atomic包的时候看到很多类的静态代码块中使用了一下这个方法(例如AtomicInteger) static { try { valueOffset = unsafe.objectFieldOffset (AtomicInteger.class.getDeclaredField("value")); } catch (Exception ex) { throw new Error(ex); } } 所以对objectFieldOffset方法很好奇,看了注释也没太了解,搜索了相

利用反射获取一个类实例的所有属性名称和值 拼接为字符串

需要一个功能:获取一个类实例的所有属性名称和值并拼接为字符串,然后进行处理.代码保存在此以备后用. 建立一个类文件ClassToString.cs 以下代码可以直接使用,参数为一个类的实例,返回的是一个数组,[0]为属性名的拼接,[1]为属性Value的拼接. 对于类的属性类型没有限制,但是如果没有全部赋值的话,Value会范围默认值, 比如int为0,String为空,DateTime为0001/1/1 0:00:00,0,0,0 需要有需要的话可以在拼接的时候判断进行相应处理 ClassTo

读Unsafe类源码

Unsafe类简介 JUC中很多的实现都是调用了Unsafe类来实现的,所以这里阅读下该类的内容. Unsafe类包装了很多低级别的非安全性操作.虽然该类及其所有的方法都是public的,但是它只能被受信任的代码使用(也就是jdk中的代码) 读源码过程中,这里只会对部分方法进行说明,其余的方法要么类似要么不那么重要. 读源码 //构造方法私有化 private Unsafe() {} //采用饿汉式单例 private static final Unsafe theUnsafe = new Un

java 非阻塞算法实现基础:unsafe类介绍

一.为什么要有Unsfae.我们为什么要了解这个类 1. java通常的代码无法直接使用操作底层的硬件,为了使java具备该能力,增加了Unsafe类 2.java的并发包中底层大量的使用这个类的功能,了解这个类有助于了解java 并发包,理解为什么并发包中的类的并发性能为什么会比使用synchronized好 二.Unsafe的主要功能 1.读功能 读功能有两类: 1)读内存中某一块的数据,getXXXVolatile和getXXX.前者支持Volatile语义,后者不支持,可以看最后面的c代

Java中Unsafe类详解

http://www.cnblogs.com/mickole/articles/3757278.html Java不能直接访问操作系统底层,而是通过本地方法来访问.Unsafe类提供了硬件级别的原子操作,主要提供了以下功能: 1.通过Unsafe类可以分配内存,可以释放内存: 类中提供的3个本地方法allocateMemory.reallocateMemory.freeMemory分别用于分配内存,扩充内存和释放内存,与C语言中的3个方法对应. public native long alloca