当前位置: 首页 > >

Java offheap memory

发布时间:

- MappedByteBuffer


public void copyFile(String filename,String srcpath,String destpath)throws IOException {
? ? ? File source = new File(srcpath+"/"+filename);
? ? ? File dest = new File(destpath+"/"+filename);
? ? ? ?FileChannel in = null, out = null;
? ? ? ?try {?
? ? ? ? in = new FileInputStream(source).getChannel();
? ? ? ? out = new FileOutputStream(dest).getChannel();
? ? ? ? long size = in.size();
? ? ? MappedByteBuffer buf = in.map(FileChannel.MapMode.READ_ONLY, 0, size);
? ? ? out.write(buf);
? ? ? in.close();
? ? ? out.close();
? ? ? source.delete();//文件复制完成后,删除源文件
? ? ?}catch(Exception e){
? ? ? e.printStackTrace();
? ? ?} finally {
? ? ? in.close();
? ? ? out.close();
? ? ?}
}

public static void clean(final Object buffer) throws Exception {
? ? ? ? ? ?AccessController.doPrivileged(new PrivilegedAction() {
? ? ? ? ? ? ? ?public Object run() {
? ? ? ? ? ? ? ?try {
? ? ? ? ? ? ? ? ? Method getCleanerMethod = buffer.getClass().getMethod("cleaner",new Class[0]);
? ? ? ? ? ? ? ? ? getCleanerMethod.setAccessible(true);
? ? ? ? ? ? ? ? ? sun.misc.Cleaner cleaner =(sun.misc.Cleaner)getCleanerMethod.invoke(buffer,new Object[0]);
? ? ? ? ? ? ? ? ? cleaner.clean();
? ? ? ? ? ? ? ?} catch(Exception e) {
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? ?}
? ? ? ? ? ? ? ? return null;}});
? ? ? ? ?
}

- Unsafe


Field f = Unsafe.class.getDeclaredField("theUnsafe");
f.setAccessible(true);
Unsafe unsafe = (Unsafe) f.get(null);

    lock and CAS, like AtomicInteger uses unsafe CAS heavilyarray operration, arrayBaseOffset, arrayIndexScaleoperation on class, object and fields, objectFieldOffset(Field f), putLong, putInt, putObjectspecial class initialization, allocateInstance (no constructor call)memory management, allocateMemory, freeMemory, copyMemory....



友情链接: