Small unrelated note:
- It seems that the old code uses Thread class but ManagedLocalsThread should be used instead.

The new code looks much simpler/clear. Thanks.

On 15/01/16 23:28, Roger Riggs wrote:
Hi Laurent,

Looks good.

Thanks, Roger


On 1/15/16 4:28 AM, Laurent Bourgès wrote:
Phil & Roger,

Please review the updated webrev according to Roger's comment:
http://cr.openjdk.java.net/~lbourges/marlin/marlin-Cleaner.1/
<http://cr.openjdk.java.net/%7Elbourges/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
<mailto: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/
    <http://cr.openjdk.java.net/%7Elbourges/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



--
Best regards, Sergey.

Reply via email to