From: Mohamed A. <mam...@gm...> - 2012-09-28 10:51:10
|
Hi Jeremy, Thanks for your reply. For the first question: I handle the heap objects between the saving point and the restoration (long jump) using (Software Transactional Memory) STM technique. Which in my case simply discard all changes. Also, I'm using Mark&Sweep GC to eliminate the GC effect. I think I will have to handle this issue when I change to a moving GC. And for the second one: Yes. I handle each thread independently. Is the RVMThread object shared between multiple kernel threads? Thanks, Mohamed On Fri, Sep 28, 2012 at 5:59 AM, Jeremy Singer <jer...@gl...>wrote: > Hi Mohamed, > > This is very interesting. > > 1) How do you ensure the heap is the same between save and restore points? > If objects have been relocated due to intervening GC, pointers in the > dumped registers and stack will not be updated automatically. > > 2) Do you only need to save state for currentThread? What about the other > threads? > > Best regards, > Jeremy > > --- > http://www.dcs.gla.ac.uk/~jsinger > > > > On 28 Sep 2012, at 03:26, Mohamed Ahmed wrote: > > > Hi, > > > > I have implemented a simple technique to save program state at some > point inside the VM and restore it from another part. Which I use it to do > long jumps. > > > > My code is very simple now and lacks handling of special cases (which I > don't know actually). It works when the program is very simple but crash > with segmentation fault with large programs > > > > If you can please help me cover all missing case (may be stack resizing, > relocation, ...) > > > > Saving program state: > > > > //Save thread state > > RVMThread thread = RVMThread.getCurrentThread(); > > VM.disableGC(); > > data.context = new Registers(); > > byte[] stack = thread.getStack(); > > data.stack = new byte[stack.length]; > > System.arraycopy(stack, 0, data.stack, 0, stack.length); > > data.context.copyFrom(thread.contextRegisters); > > VM.enableGC(); > > > > > > Restoration: > > > > VM.disableGC(); > > RVMThread thread = RVMThread.getCurrentThread(); > > > > byte[] stack = thread.getStack(); > > System.arraycopy(data.stack, 0, stack, 0, > data.stack.length); > > VM.enableGC(); > > Magic.restoreHardwareExceptionState(data.context); > > > > Thanks, > > Mohamed > > > ------------------------------------------------------------------------------ > > Got visibility? > > Most devs has no idea what their production app looks like. > > Find out how fast your code is with AppDynamics Lite. > > http://ad.doubleclick.net/clk;262219671;13503038;y? > > > http://info.appdynamics.com/FreeJavaPerformanceDownload.html_______________________________________________ > > Jikesrvm-researchers mailing list > > Jik...@li... > > https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers > > > > ------------------------------------------------------------------------------ > Got visibility? > Most devs has no idea what their production app looks like. > Find out how fast your code is with AppDynamics Lite. > http://ad.doubleclick.net/clk;262219671;13503038;y? > http://info.appdynamics.com/FreeJavaPerformanceDownload.html > _______________________________________________ > Jikesrvm-researchers mailing list > Jik...@li... > https://lists.sourceforge.net/lists/listinfo/jikesrvm-researchers > |