Java中的sun.misc.Unsafe包

简介: chronicle项目:https://github.com/peter-lawrey/Java-Chronicle这个项目是利用mmap机制来实现高效的读写数据,号称每秒写入5到20百万条数据。

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));
	}
}


相关文章
|
23天前
java.lang.NoClassDefFoundError: com/sun/jna/Callback
java.lang.NoClassDefFoundError: com/sun/jna/Callback
15 0
|
2月前
|
分布式计算 Java 测试技术
Spark 单元测试报Error:(26, 16) java: 程序包sun.misc不存在
Spark 单元测试报Error:(26, 16) java: 程序包sun.misc不存在
29 0
|
2月前
|
消息中间件 数据可视化 Java
【Java】The Java Headless Mode
【Java】The Java Headless Mode
68 0
【Java】The Java Headless Mode
|
7月前
|
Java Maven
Native-java(4)
Native-java(4)
31 1
|
7月前
|
Oracle Java 关系型数据库
Native-java(3)
Native-java(3)
55 0
|
7月前
|
Oracle Java 开发工具
Native-java(1)
Native-java(1)
73 0
|
Java Windows
java.library.path中的java.lang.UnsatisfiedLinkError否*****dll
java.library.path中的java.lang.UnsatisfiedLinkError否*****dll
101 0
|
Java
全网首发:什么都对,报错java.lang.NoClassDefFoundError: com/sun/jna/Library
全网首发:什么都对,报错java.lang.NoClassDefFoundError: com/sun/jna/Library
380 0
|
存储 缓存 监控
Java 中的 Unsafe 魔法类,到底有啥用?
Unsafe是位于sun.misc包下的一个类,主要提供一些用于执行低级别、不安全操作的方法,如直接访问系统内存资源、自主管理内存资源等,这些方法在提升Java运行效率、增强Java语言底层资源操作能力方面起到了很大的作用。
222 0
Java 中的 Unsafe 魔法类,到底有啥用?

热门文章

最新文章