Phil & Roger, Please review the updated webrev according to Roger's comment: http://cr.openjdk.java.net/~lbourges/marlin/marlin-Cleaner.1/
Changes: + // Register a cleaning function to ensure freeing off-heap memory:+ CleanerFactory.cleaner().register(parent, () -> this.free()); I created the bug: https://bugs.openjdk.java.net/browse/JDK-8147443 Could you add the proper tags (no-reg, jigsaw ?) Phil, can I push it myself as modules.xml is modified or you should do it for me ? Regards, Laurent 2016-01-13 17:56 GMT+01:00 Roger Riggs <roger.ri...@oracle.com>: > Hi Laurent, > > Nice use. > > You don't need to use the local_array in this case. > Since the reference being cleaned is a the parent object it is ok that the > closure captures 'this'. > > The modules.xml qualified export is fine. > > Roger > > > > On 1/13/16 11:48 AM, Laurent Bourgès wrote: > > Phil & Roger, > > Please review this first webrev refactoring Marlin OffHeapArray to use the > new jdk.internal.ref.CleanerFactory (new Cleaner API): > http://cr.openjdk.java.net/~lbourges/marlin/marlin-Cleaner.0/ > > The new API is really great as it just needs few lines: > > + // Register a cleaning function to ensure freeing off-heap memory:+ > final OffHeapArray local_array = this; // local to prevent capture of > this+ CleanerFactory.cleaner().register(parent, () -> > local_array.free()); > > > I added a qualified export in modules.xml: > > <export>+ <name>jdk.internal.ref</name>+ > <to>java.desktop</to>+ </export>+ <export> > > Who can review such changes to modules.xml (out of my scope) ? > > Please check I made it right as I cannot test it with jake ! > > > I tested it using the following settings to use weak references to Marlin > RendererContexts and log all allocations / free buffers in OffHeapArray: > -Dsun.java2d.renderer.log=true > -Dsun.java2d.renderer.logUnsafeMalloc=true > -Dsun.java2d.renderer.useRef=weak > > INFO: 1452703097931: OffHeapArray.allocateMemory = 65536 to addr = > 140642864899472 > INFO: 1452703097931: OffHeapArray.allocateMemory = 98304 to addr = > 140642864965024 > ... > INFO: 1452703103321: OffHeapEdgeArray.free = 98304 at addr = > 140642864965024 > INFO: 1452703103321: OffHeapEdgeArray.free = 65536 at addr = > 140642864899472 > ... > INFO: 1452703103827: OffHeapArray.allocateMemory = 65536 to addr = > 140642864910240 > INFO: 1452703103827: OffHeapArray.allocateMemory = 98304 to addr = > 140642864975792 > ... > INFO: 1452703113822: OffHeapEdgeArray.free = 98304 at addr = > 140642864975792 > INFO: 1452703113822: OffHeapEdgeArray.free = 65536 at addr = > 140642864910240 > ... > > PS: I did not create a bug yet. > > Cheers, > Laurent > > > -- -- Laurent Bourgès