java unsafe 告警_Java Unsafe 常用API 例子。

importjava.lang.reflect.Field;importcom.alibaba.fastjson.JSON;importcom.guo.util.Util;importsun.misc.Unsafe;/*** unsafe 操作数组

*@authorGuoJunWei

**/

public classTest1 {public static Unsafe unsafe =Util.getUnsafe();public static void main(String[] args) throwsException {//function1();//function2();//function3();//function4();//function5();

function6();

}/*** park():方法返回条件

* 1 当前现在调用过 unpark 方法 (多次调用 按照一次计算)

* 2 当前线程被中断

* 3 当park 为 false:时间块到了 单位纳秒

* 4 当park 为 true:时间是绝对时间(1970)年 到期 单位毫秒*/

public static voidfunction6() {

System.out.println("Start");long time = System.currentTimeMillis()+3000l;

unsafe.park(true,time);

System.out.println("end");

}/*** CAS操作

*@throwsException*/

public static void function5() throwsException {

Player player= (Player) unsafe.allocateInstance(Player.class);

Field age= player.getClass().getDeclaredField("age");long addressAge =unsafe.objectFieldOffset(age);

unsafe.compareAndSwapInt(player, addressAge,0, 100);

System.out.println(player.getAge());

}/*** 直接分配内存地址:内存管理*/

public static voidfunction4() {//分配100字节内存 返回初始地址

long address = unsafe.allocateMemory(100);//往分配的内存地址写入值

unsafe.putInt(address, 55);//获取值

System.out.println(unsafe.getInt(address));//分配100字节内存 返回初始地址

long address1 = unsafe.allocateMemory(100);//copy 内存值

unsafe.copyMemory(address, address1, 4);

System.out.println(unsafe.getInt(address1));//释放内存

unsafe.freeMemory(address);

unsafe.freeMemory(address1);

}/*** 操作对象属性值

*@throwsException*/

public static void function3() throwsException {

Player player= (Player) unsafe.allocateInstance(Player.class);

Field fieldName= player.getClass().getDeclaredField("name");

Field fieldAge= player.getClass().getDeclaredField("age");long fileNameaddres =unsafe.objectFieldOffset(fieldName);long fileAgeaddres =unsafe.objectFieldOffset(fieldAge);

unsafe.putObjectVolatile(player, fileNameaddres,"wangWu");

unsafe.putInt(player,fileAgeaddres,100);

System.out.println(player.getAge()+" "+player.getName());

}/*** 实例化对象

*@throwsInstantiationException*/

public static void function2() throwsInstantiationException {

Player player= (Player) unsafe.allocateInstance(Player.class);

player.setAge(100);

player.setName("zhangShan");

System.out.println(player.getAge()+" "+player.getName());

}/*** 对数组的操作*/

public static voidfunction1() {int[] num = new int[7];//数组的起始地址

long adress = unsafe.arrayBaseOffset(int[].class);//block 大小

long index = unsafe.arrayIndexScale(int[].class);

unsafe.putInt(num, adress,1);

unsafe.putInt(num, adress+index, 2);

unsafe.putInt(num, adress+index+index, 3);

unsafe.putInt(num, adress+index+index+index, 4);

System.out.println(JSON.toJSONString(num));

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值