没有合适的资源?快使用搜索试试~ 我知道了~
JUC基石——Unsafe类
0 下载量 102 浏览量
2020-12-21
06:49:03
上传
评论
收藏 80KB PDF 举报
温馨提示
试读
3页
前言 我们经常在JUC包下的ConcurrentHashMap、Atomic开头的原子操作类、AQS以及LockSupport里面看到Unsafe类的身影,这个Unsafe类究竟是干什么的,本文可以带着读者一探究竟。 Java和C++、C语言的一个重要区别,就是Java中我们无法直接操作一块内存区域,而在C++、C中却可以自己申请内存和释放内存。Unsafe类的设计,为我们提供了手动管理内存的能力。 如同它的名字一样,它被认定为不安全的。直接操纵内存,意味着实例化出来的对象不会受到JVM的管理,不会被GC,需要手动进行回收,容易出现内存泄露的问题。因此,官方并不建议我们在自己的应用程序中使用该
资源推荐
资源详情
资源评论
JUC基石基石——Unsafe类类
前言前言
我们经常在JUC包下的ConcurrentHashMap、Atomic开头的原子操作类、AQS以及LockSupport里面看到Unsafe类的身影,
这个Unsafe类究竟是干什么的,本文可以带着读者一探究竟。
Java和C++、C语言的一个重要区别,就是Java中我们无法直接操作一块内存区域,而在C++、C中却可以自己申请内存和释
放内存。Unsafe类的设计,为我们提供了手动管理内存的能力。
如同它的名字一样,它被认定为不安全的。直接操纵内存,意味着实例化出来的对象不会受到JVM的管理,不会被GC,需要
手动进行回收,容易出现内存泄露的问题。因此,官方并不建议我们在自己的应用程序中使用该类。
构造方法构造方法
public final class Unsafe {
private static final Unsafe theUnsafe;
private Unsafe() {
}
@CallerSensitive
public static Unsafe getUnsafe() {
Class var0 = Reflection.getCallerClass();
if (!VM.isSystemDomainLoader(var0.getClassLoader())) {
throw new SecurityException("Unsafe");
} else {
return theUnsafe;
}
}
//其他方法
}
可以看得出来,该类被final修饰,不允许被继承。构造方法是私有的,在外部不可被实例化。(关于final更多的作用,可以移
步这篇文章关键词final的作用)
但在内部提供了一个获取单例的getUnsafe()方法,不过该方法做了限制。如果是普通调用的话,它会抛出一个
SecurityException异常。只有由系统类加载器(BootStrap classLoader)加载的类才可以调用这个类中的方法。
如果var0由系统类加载器加载的话,那么var0.getClassLoader()会返回null,VM.isSystemDomainLoader(null)则直接返回
true,此时便不会抛出SecurityException异常。
当然,也不是无法获取到Unsafe类的实例,我们在文章最后会通过反射来获取。
获取偏移量获取偏移量
public native long staticFieldOffset(Field var1);
public native long objectFieldOffset(Field var1);
staticFieldOffset用于获取某一个静态属性在对象地址中的偏移量
objectFieldOffset用于获取某一个非静态属性在对象实例地址中的偏移量
偏移量这个名词在Unsafe类中十分重要,该类中80%的方法都需要依赖这个偏移量。
分配、释放内存等分配、释放内存等
//分配内存
public native long allocateMemory(long var1);
//扩展或重新分配内存
public native long reallocateMemory(long var1, long var3);
//内存初始化
public native void setMemory(Object var1, long var2, long var4, byte var6);
//内存复制
public native void copyMemory(Object var1, long var2, Object var4, long var5, long var7);
资源评论
weixin_38502239
- 粉丝: 7
- 资源: 941
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功