Java中的sun.misc.Unsafe包

简介:

chronicle项目:https://github.com/peter-lawrey/Java-Chronicle

这个项目是利用mmap机制来实现高效的读写数据,号称每秒写入5到20百万条数据。

作者有个测试,写入1百万条log用时0.234秒,用java自带的logger,用时7.347秒。


在看chronicle的源代码,发现一个牛B的利用Unsafe来直接读写内存,从而提高效率的例子。

详细见这个类:https://github.com/peter-lawrey/Java-Chronicle/blob/master/src/main/java/vanilla/java/chronicle/impl/UnsafeExcerpt.java


Unsafe包的参考:http://www.docjar.com/docs/api/sun/misc/Unsafe.html

下面这个例子演示了简单的修改一个byte[]的数据。

这个例子在eclipse里不能直接编译,要到项目的属性,Java Compiler,Errors/Warnings中Forbidden reference(access rules)中设置为warning。

另外,因为sun.misc.Unsafe包不能直接使用,所有代码里用反射的技巧得到了一个Unsafe的实例。

import java.lang.reflect.Field;
import java.util.Arrays;
import sun.misc.Unsafe;

public class Test {
	private static int byteArrayBaseOffset;

	public static void main(String[] args) throws SecurityException,
			NoSuchFieldException, IllegalArgumentException,
			IllegalAccessException {
		Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
		theUnsafe.setAccessible(true);
		Unsafe UNSAFE = (Unsafe) theUnsafe.get(null);
		System.out.println(UNSAFE);

		byte[] data = new byte[10];
		System.out.println(Arrays.toString(data));
		byteArrayBaseOffset = UNSAFE.arrayBaseOffset(byte[].class);

		System.out.println(byteArrayBaseOffset);
		UNSAFE.putByte(data, byteArrayBaseOffset, (byte) 1);
		UNSAFE.putByte(data, byteArrayBaseOffset + 5, (byte) 5);
		System.out.println(Arrays.toString(data));
	}
}


目录
相关文章
|
1月前
|
Java jenkins 持续交付
Java项目jar包启动脚本,适用jenkins或定时任务或手动执行
Java项目jar包启动脚本,适用jenkins或定时任务或手动执行
143 3
|
1月前
|
druid Java Maven
杨校老师课堂之java_关于如何下载jar包的教程
杨校老师课堂之java_关于如何下载jar包的教程
58 0
|
1月前
|
网络协议 Java 程序员
TCP/IP协议栈是网络通信基础,Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用
【6月更文挑战第23天】 **TCP/IP协议栈是网络通信基础,它包含应用层(HTTP, FTP等)、传输层(TCP, UDP)、网络层(IP)、数据链路层(帧, MAC地址)和物理层(硬件信号)。Java的`java.net`包提供工具,使开发者能利用TCP/IP创建网络应用,如Socket和ServerSocket用于客户端和服务器通信。**
35 3
|
1月前
|
存储 XML Java
探索Java常用的包:从核心到扩展
探索Java常用的包:从核心到扩展
27 3
|
1月前
|
运维 监控 Java
性能监控之 Java Metrics 度量包
【6月更文挑战10天】标题性能监控之 Java Metrics 度量包
44 2
|
1月前
|
存储 并行计算 Java
Java8中JUC包同步工具类深度解析(Semaphore,CountDownLatch,CyclicBarrier,Phaser)
Java8中JUC包同步工具类深度解析(Semaphore,CountDownLatch,CyclicBarrier,Phaser)
23 2
|
28天前
|
Java Maven
java运行jar包提示 “XXX中没有主清单属性”,配置maven插件
java运行jar包提示 “XXX中没有主清单属性”,配置maven插件
22 0
|
1月前
|
IDE Java 程序员
25. 【Java教程】Java 包
25. 【Java教程】Java 包
22 1
|
1月前
|
Java 测试技术 Spring
Java反射包:java.lang.reflect的神奇功能与实战技巧
Java反射包:java.lang.reflect的神奇功能与实战技巧
|
1月前
|
Java 数据库连接 Spring
杨校老师课堂之Java EE框架SSM所需jar包下载
杨校老师课堂之Java EE框架SSM所需jar包下载
29 0