博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java Unsafe类
阅读量:5775 次
发布时间:2019-06-18

本文共 828 字,大约阅读时间需要 2 分钟。

参考了这篇文章:

《》

 

Unsafe开始以为是和多线程安全相关的,其实不是,是和Java底层硬件级别不安全操作相关的。

 

java不能直接访问操作系统底层,而是通过本地方法来访问。Unsafe类提供了硬件级别的原子操作,主要提供了以下功能:

1、通过Unsafe类可以分配内存,可以释放内存;

类中提供的3个本地方法allocateMemory、reallocateMemory、freeMemory分别用于分配内存,扩充内存和释放内存,与C语言中的3个方法对应。
public native long allocateMemory(long l);  public native long reallocateMemory(long l, long l1);  public native void freeMemory(long l);

 

2、可以定位对象某字段的内存位置,也可以修改对象的字段值,即使它是私有的;

 

3、挂起与恢复

 

4、CAS操作

是通过compareAndSwapXXX方法实现的
/** * 比较obj的offset处内存位置中的值和期望的值,如果相同则更新。此更新是不可中断的。 *  * @param obj 需要更新的对象 * @param offset obj中整型field的偏移量 * @param expect 希望field中存在的值 * @param update 如果期望值expect与field的当前值相同,设置filed的值为这个新值 * @return 如果field的值被更改返回true */  public native boolean compareAndSwapInt(Object obj, long offset, int expect, int update);

CAS操作有3个操作数,内存值M,预期值E,新值U,如果M==E,则将内存值修改为B,否则啥都不做。

 

可以再参加这篇文章:

《》

 

 

转载地址:http://grhux.baihongyu.com/

你可能感兴趣的文章
Android BlueDroid(一):BlueDroid概述
查看>>
Java利用httpasyncclient进行异步HTTP请求
查看>>
宿舍局域网的应用
查看>>
html代码究竟什么用途
查看>>
oracle的substr函数的用法
查看>>
Hadoop HDFS编程 API入门系列之路径过滤上传多个文件到HDFS(二)
查看>>
Nginx反向代理,负载均衡,redis session共享,keepalived高可用
查看>>
CentOS7 yum 安装git
查看>>
三元表达式之理解/jquery源代码分析之$.inArray实现
查看>>
STM32 mdk软件仿真时过不去时钟的问题
查看>>
Spark Streaming概念学习系列之Spark Streaming容错
查看>>
单例模式
查看>>
用友网络陈强兵:企业互联网需解决五大问题
查看>>
SMA推出Powerwall兼容Sunny Boy Storage逆变器
查看>>
云路由 vyatta 体验(二)NAT
查看>>
Python version 2.7 required, which was not foun...
查看>>
centos7.3 下安装 composer,解决Failed to decode zlib stream错误
查看>>
Git 常用命令
查看>>
在Postgres 数据库中生成36位的UUID代码
查看>>
小黑小波比.功能测试登录用户
查看>>