package com.ruedigermoeller.heapofftest; import org.nustaq.serialization.FSTClazzInfo; import org.nustaq.serialization.FSTConfiguration; import org.nustaq.serialization.util.FSTUtil; import sun.misc.Unsafe; import java.util.Date; /** * Copyright (c) 2012, Ruediger Moeller. All rights reserved. * <p/> * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * <p/> * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * <p/> * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301 USA * <p/> * Date: 24.02.13 * Time: 21:48 * To change this template use File | Settings | File Templates. */ public class AnotherOffheapThingy<T> { static class Sample extends Date { int x = 11; int y = 12; String s = "Hallo"; } public static <T> T copyObj(Unsafe un, T test, int siz) { byte b[] = new byte[(int) siz]; un.copyMemory(test,0, b, 0, siz); return (T)b; } public static void main( String arg[] ) { System.setProperty("fst.unsafe","true"); Unsafe un = FSTUtil.getUnsafe(); FSTConfiguration conf = FSTConfiguration.createDefaultConfiguration(); FSTClazzInfo cl = conf.getClassInfo(Sample.class); Sample test = new Sample(); System.out.println("fioff "+cl.getFieldInfo("fastTime",Date.class).getMemOffset() ); System.out.println("fioff "+cl.getFieldInfo("x",Sample.class).getMemOffset() ); test.x = 9999; Sample other = new Sample(); long pos = cl.getFieldInfo("x", Sample.class).getMemOffset(); long siz = cl.getFieldInfo("s", Sample.class).getMemOffset()+8; byte b[] = new byte[(int) siz]; un.copyMemory(test,0, b, 0, siz); other = copyObj(un,test, (int) siz); } }