- Notifications
You must be signed in to change notification settings - Fork7.6k
Tags: ReactiveX/RxJava
Tags
v3.1.11-RC3
Remove the old publish command
v3.1.11-RC2
Also have to call sign
v3.1.11-RC1
3.x: Upgrade to Gradle 8.14, toolchains, Central release (#7868)* 3.x: Upgrade to Gradle 8.14, toolchains, Central release* Fix checkstyle problem with module-info.java under 11* javadoc error: try force compat settings* Just disable javadoc for build-11
v3.1.10
Fix MpscLinkedQueue GC issues (#7799)* Refactor MpscLinkedQueue.pollHandle empty queue first, then share most of theimplementation for non-empty scenarios (spin andnon-spin).* Unlink dead nodes in MpscLinkedQueueSimilar tohttps://github.com/JCTools/JCTools/blob/master/jctools-core/src/main/java/org/jctools/queues/MpscLinkedQueue.java#L120,null out the next pointer in the discarded consumer nodewhen polling from the queue. If not, we leave behind a (potentially long)chain of connected garbage nodes. If we're unlucky (for example one ofthe early nodes is promoted to old generation, triggering nepotism),this can cause GC issues as now we have a long linked list which must bemarked by young collections.Reproducer:```import io.reactivex.rxjava3.internal.queue.MpscLinkedQueue;public class MpscLinkedQueueGC { public static void main(String[] args) { MpscLinkedQueue<Integer> queue = new MpscLinkedQueue<>(); for (int i = 0; i < 10; i++) System.gc(); // tenure consumer node while (true) { queue.offer(123); queue.poll(); } }}``````Before fix:$ java -Xlog:gc -Xmx1G -cp build/classes/java/main MpscLinkedQueueGC.java...[1.261s] GC(20) Pause Young (Normal) (G1 Preventive Collection) 115M->115M(204M) 209.335ms[1.385s] GC(23) Pause Young (Normal) (G1 Evacuation Pause) 148M->149M(204M) 31.491ms[1.417s] GC(24) Pause Young (Normal) (G1 Evacuation Pause) 157M->158M(204M) 19.333ms[1.453s] GC(25) Pause Young (Normal) (G1 Evacuation Pause) 166M->167M(599M) 22.678ms[1.966s] GC(26) Pause Young (Normal) (G1 Evacuation Pause) 249M->249M(497M) 305.238ms...After fix:$ java -Xlog:gc -Xmx1G -cp build/classes/java/main MpscLinkedQueueGC.java...[1.169s] GC(14) Pause Young (Normal) (G1 Evacuation Pause) 304M->2M(506M) 0.755ms[1.558s] GC(15) Pause Young (Normal) (G1 Evacuation Pause) 304M->2M(506M) 0.689ms[1.948s] GC(16) Pause Young (Normal) (G1 Evacuation Pause) 304M->2M(506M) 0.800ms[2.337s] GC(17) Pause Young (Normal) (G1 Evacuation Pause) 304M->2M(506M) 0.714ms...```* Revert "Unlink dead nodes in MpscLinkedQueue"This reverts commit4c6c6fa.* Revert "Refactor MpscLinkedQueue.poll"This reverts commitb8582b9.* Unlink dead nodes in MpscLinkedQueueSimilar tohttps://github.com/JCTools/JCTools/blob/master/jctools-core/src/main/java/org/jctools/queues/MpscLinkedQueue.java#L120,null out the next pointer in the discarded consumer nodewhen polling from the queue. If not, we leave behind a (potentially long)chain of connected garbage nodes. If we're unlucky (for example one ofthe early nodes is promoted to old generation, triggering nepotism),this can cause GC issues as now we have a long linked list which must bemarked by young collections.Reproducer:```import io.reactivex.rxjava3.internal.queue.MpscLinkedQueue;public class MpscLinkedQueueGC { public static void main(String[] args) { MpscLinkedQueue<Integer> queue = new MpscLinkedQueue<>(); for (int i = 0; i < 10; i++) System.gc(); // tenure consumer node while (true) { queue.offer(123); queue.poll(); } }}``````Before fix:$ java -Xlog:gc -Xmx1G -cp build/classes/java/main MpscLinkedQueueGC.java...[1.261s] GC(20) Pause Young (Normal) (G1 Preventive Collection) 115M->115M(204M) 209.335ms[1.385s] GC(23) Pause Young (Normal) (G1 Evacuation Pause) 148M->149M(204M) 31.491ms[1.417s] GC(24) Pause Young (Normal) (G1 Evacuation Pause) 157M->158M(204M) 19.333ms[1.453s] GC(25) Pause Young (Normal) (G1 Evacuation Pause) 166M->167M(599M) 22.678ms[1.966s] GC(26) Pause Young (Normal) (G1 Evacuation Pause) 249M->249M(497M) 305.238ms...After fix:$ java -Xlog:gc -Xmx1G -cp build/classes/java/main MpscLinkedQueueGC.java...[1.169s] GC(14) Pause Young (Normal) (G1 Evacuation Pause) 304M->2M(506M) 0.755ms[1.558s] GC(15) Pause Young (Normal) (G1 Evacuation Pause) 304M->2M(506M) 0.689ms[1.948s] GC(16) Pause Young (Normal) (G1 Evacuation Pause) 304M->2M(506M) 0.800ms[2.337s] GC(17) Pause Young (Normal) (G1 Evacuation Pause) 304M->2M(506M) 0.714ms...```
PreviousNext