Vladimir Ozerov created IGNITE-6736: ---------------------------------------
Summary: 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 Security Level: Public (Viewable by anyone) Reporter: Vladimir Ozerov 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)