You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@ignite.apache.org by "Andrey Gura (JIRA)" <ji...@apache.org> on 2018/01/12 11:52:02 UTC

[jira] [Comment Edited] (IGNITE-6736) Java 9: rework GridCacheMapEntry synchronization logic to avoid Unsafe.monitor* methods

    [ https://issues.apache.org/jira/browse/IGNITE-6736?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16323860#comment-16323860 ] 

Andrey Gura edited comment on IGNITE-6736 at 1/12/18 11:51 AM:
---------------------------------------------------------------

LGTM. Perfromance tests are ok. But now we have additional memory overhead on each entry.

Merged to master branch. Thanks for contribution!


was (Author: agura):
LGTM. Perfromance tests are ok. But now we have additional memory overhead on each entry.

Merged to master branch.

> Java 9: rework GridCacheMapEntry synchronization logic to avoid Unsafe.monitor* methods
> ---------------------------------------------------------------------------------------
>
>                 Key: IGNITE-6736
>                 URL: https://issues.apache.org/jira/browse/IGNITE-6736
>             Project: Ignite
>          Issue Type: Task
>          Components: cache
>            Reporter: Vladimir Ozerov
>            Assignee: Andrey Kuznetsov
>             Fix For: 2.4
>
>
> {{GridCacheMapEntry}} class rely on {{synchronized}} on itself heavily. In {{ATOMIC}} caches we lock multiple entries at once using {{Unsafe.monitorEnter/Exit}} methods. Unfortunately these methods were removed in Java 9. Recursion is not an option, as it would cause stack overflow for {{putAll}} operations with multiple entries.
> Possible fixes:
> 1) Rework {{synchronized}} to {{ReentrantLock}}. Easy, but may cause additional memory pressure.
> 2) Have different implementations for Java 8 ({{synchronzied}}) and Java 9 ({{ReentrantLock}}) - much more complex solution, because we will require separate module for Java 8 and Java 9.
> 3) Rework {{ATOMIC}} caches, so that {{putAll}} operation updates entries one-by-one. As a side effect it will eliminate deadlocks.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)