[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-2d-dev
Subject:    Re: [OpenJDK 2D-Dev] Cleaner usage in java2 / awt
From:       Sergey Bylokhov <Sergey.Bylokhov () oracle ! com>
Date:       2016-01-15 21:43:49
Message-ID: 56996815.6030303 () oracle ! com
[Download RAW message or body]

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.riggs@oracle.com
>> <mailto:roger.riggs@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.
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic