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

graham sanderson commented on CASSANDRA-7546:
---------------------------------------------

In case anyone is reading them, here is the latest output - note with the 
current wasted work limit of 100, we actually kick in later except under the 
higher contention loads, but doing a one time flip, actually do less work 
overall...

{code}
    [junit] --------------------------------------------------
    [junit] 1 THREAD; ELEMENT SIZE 64
    [junit] 
    [junit] Threads = 1 elements = 100000 (of size 64) partitions = 1
    [junit]  original code:
    [junit]   Duration = 996ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 36 ms for 3 collections
    [junit]   Approx allocation = 563MB vs 8MB; ratio to raw data size = 
70.37447428571429
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 765ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 38 ms for 3 collections
    [junit]   Approx allocation = 590MB vs 8MB; ratio to raw data size = 
73.67167714285715
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 1 elements = 100000 (of size 64) partitions = 16
    [junit]  original code:
    [junit]   Duration = 496ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 20 ms for 2 collections
    [junit]   Approx allocation = 448MB vs 8MB; ratio to raw data size = 
55.95978857142857
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 574ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 27 ms for 2 collections
    [junit]   Approx allocation = 485MB vs 8MB; ratio to raw data size = 
60.56426285714286
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 1 elements = 100000 (of size 64) partitions = 256
    [junit]  original code:
    [junit]   Duration = 662ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 12 ms for 1 collections
    [junit]   Approx allocation = 333MB vs 8MB; ratio to raw data size = 
41.59998095238095
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 241ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 9 ms for 1 collections
    [junit]   Approx allocation = 349MB vs 8MB; ratio to raw data size = 
43.65317619047619
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 1 elements = 100000 (of size 64) partitions = 1024
    [junit]  original code:
    [junit]   Duration = 222ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 11 ms for 1 collections
    [junit]   Approx allocation = 273MB vs 8MB; ratio to raw data size = 
34.18085428571428
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 234ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 10 ms for 1 collections
    [junit]   Approx allocation = 286MB vs 8MB; ratio to raw data size = 
35.788306666666664
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit] 
    [junit] --------------------------------------------------
    [junit] 100 THREADS; ELEMENT SIZE 64
    [junit] 
    [junit] Threads = 100 elements = 100000 (of size 64) partitions = 1
    [junit]  original code:
    [junit]   Duration = 1383ms maxConcurrency = 100
    [junit]   GC for PS Scavenge: 108 ms for 29 collections
    [junit]   Approx allocation = 9525MB vs 8MB; ratio to raw data size = 
1189.0213895238096
    [junit]   loopRatio (closest to 1 best) 16.74471 raw 100000/1674471 counted 
0/0 sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 1728ms maxConcurrency = 100
    [junit]   GC for PS Scavenge: 14 ms for 1 collections
    [junit]   Approx allocation = 572MB vs 8MB; ratio to raw data size = 
71.49758761904762
    [junit]   loopRatio (closest to 1 best) 1.00011 raw 144/154 counted 0/0 
sync 99856/99857 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 100 elements = 100000 (of size 64) partitions = 16
    [junit]  original code:
    [junit]   Duration = 223ms maxConcurrency = 100
    [junit]   GC for PS Scavenge: 24 ms for 2 collections
    [junit]   Approx allocation = 760MB vs 8MB; ratio to raw data size = 
94.87286476190476
    [junit]   loopRatio (closest to 1 best) 1.88353 raw 100000/188353 counted 
0/0 sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 206ms maxConcurrency = 100
    [junit]   GC for PS Scavenge: 10 ms for 1 collections
    [junit]   Approx allocation = 454MB vs 8MB; ratio to raw data size = 
56.72647714285714
    [junit]   loopRatio (closest to 1 best) 1.00235 raw 1505/1720 counted 0/0 
sync 98495/98515 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 100 elements = 100000 (of size 64) partitions = 256
    [junit]  original code:
    [junit]   Duration = 189ms maxConcurrency = 98
    [junit]   GC for PS Scavenge: 14 ms for 1 collections
    [junit]   Approx allocation = 342MB vs 8MB; ratio to raw data size = 
42.777810476190474
    [junit]   loopRatio (closest to 1 best) 1.01988 raw 100000/101988 counted 
0/0 sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 190ms maxConcurrency = 98
    [junit]   GC for PS Scavenge: 13 ms for 1 collections
    [junit]   Approx allocation = 346MB vs 8MB; ratio to raw data size = 
43.281460952380954
    [junit]   loopRatio (closest to 1 best) 1.01848 raw 97640/99487 counted 0/0 
sync 2360/2361 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 100 elements = 100000 (of size 64) partitions = 1024
    [junit]  original code:
    [junit]   Duration = 191ms maxConcurrency = 97
    [junit]   GC for PS Scavenge: 13 ms for 1 collections
    [junit]   Approx allocation = 282MB vs 8MB; ratio to raw data size = 
35.20254476190476
    [junit]   loopRatio (closest to 1 best) 1.0037 raw 100000/100370 counted 
0/0 sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 186ms maxConcurrency = 96
    [junit]   GC for PS Scavenge: 14 ms for 1 collections
    [junit]   Approx allocation = 300MB vs 8MB; ratio to raw data size = 
37.474085714285714
    [junit]   loopRatio (closest to 1 best) 1.00365 raw 100000/100365 counted 
0/0 sync 0/0 up 0 down 0
    [junit] 
    [junit] 
    [junit] --------------------------------------------------
    [junit] 1 THREAD; ELEMENT SIZE 256
    [junit] 
    [junit] Threads = 1 elements = 100000 (of size 256) partitions = 1
    [junit]  original code:
    [junit]   Duration = 932ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 29 ms for 2 collections
    [junit]   Approx allocation = 560MB vs 26MB; ratio to raw data size = 
21.306322898550725
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 715ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 25 ms for 2 collections
    [junit]   Approx allocation = 570MB vs 26MB; ratio to raw data size = 
21.673085217391304
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 1 elements = 100000 (of size 256) partitions = 16
    [junit]  original code:
    [junit]   Duration = 572ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 9 ms for 1 collections
    [junit]   Approx allocation = 457MB vs 26MB; ratio to raw data size = 
17.370253623188407
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 805ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 11 ms for 1 collections
    [junit]   Approx allocation = 460MB vs 26MB; ratio to raw data size = 
17.51271188405797
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 1 elements = 100000 (of size 256) partitions = 256
    [junit]  original code:
    [junit]   Duration = 546ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 14 ms for 1 collections
    [junit]   Approx allocation = 348MB vs 26MB; ratio to raw data size = 
13.242675942028985
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 253ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 12 ms for 1 collections
    [junit]   Approx allocation = 349MB vs 26MB; ratio to raw data size = 
13.26744347826087
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 1 elements = 100000 (of size 256) partitions = 1024
    [junit]  original code:
    [junit]   Duration = 457ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 15 ms for 1 collections
    [junit]   Approx allocation = 293MB vs 26MB; ratio to raw data size = 
11.139665217391304
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 546ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 15 ms for 1 collections
    [junit]   Approx allocation = 294MB vs 26MB; ratio to raw data size = 
11.20318347826087
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit] 
    [junit] --------------------------------------------------
    [junit] 100 THREADS; ELEMENT SIZE 256
    [junit] 
    [junit] Threads = 100 elements = 100000 (of size 256) partitions = 1
    [junit]  original code:
    [junit]   Duration = 1444ms maxConcurrency = 100
    [junit]   GC for PS Scavenge: 90 ms for 30 collections
    [junit]   Approx allocation = 9732MB vs 26MB; ratio to raw data size = 
369.75210231884057
    [junit]   loopRatio (closest to 1 best) 16.57088 raw 100000/1657088 counted 
0/0 sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 1610ms maxConcurrency = 100
    [junit]   GC for PS Scavenge: 17 ms for 1 collections
    [junit]   Approx allocation = 580MB vs 26MB; ratio to raw data size = 
22.067385797101448
    [junit]   loopRatio (closest to 1 best) 1.00018 raw 155/172 counted 0/0 
sync 99845/99846 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 100 elements = 100000 (of size 256) partitions = 16
    [junit]  original code:
    [junit]   Duration = 218ms maxConcurrency = 100
    [junit]   GC for PS Scavenge: 25 ms for 2 collections
    [junit]   Approx allocation = 783MB vs 26MB; ratio to raw data size = 
29.776342898550723
    [junit]   loopRatio (closest to 1 best) 1.93609 raw 100000/193609 counted 
0/0 sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 204ms maxConcurrency = 99
    [junit]   GC for PS Scavenge: 11 ms for 1 collections
    [junit]   Approx allocation = 469MB vs 26MB; ratio to raw data size = 
17.852590144927536
    [junit]   loopRatio (closest to 1 best) 1.00213 raw 1866/2073 counted 0/0 
sync 98134/98140 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 100 elements = 100000 (of size 256) partitions = 256
    [junit]  original code:
    [junit]   Duration = 187ms maxConcurrency = 98
    [junit]   GC for PS Scavenge: 13 ms for 1 collections
    [junit]   Approx allocation = 361MB vs 26MB; ratio to raw data size = 
13.738468695652173
    [junit]   loopRatio (closest to 1 best) 1.02042 raw 100000/102042 counted 
0/0 sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 189ms maxConcurrency = 98
    [junit]   GC for PS Scavenge: 12 ms for 1 collections
    [junit]   Approx allocation = 363MB vs 26MB; ratio to raw data size = 
13.825418260869565
    [junit]   loopRatio (closest to 1 best) 1.01876 raw 97150/99024 counted 0/0 
sync 2850/2852 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 100 elements = 100000 (of size 256) partitions = 1024
    [junit]  original code:
    [junit]   Duration = 178ms maxConcurrency = 97
    [junit]   GC for PS Scavenge: 14 ms for 1 collections
    [junit]   Approx allocation = 301MB vs 26MB; ratio to raw data size = 
11.468054492753623
    [junit]   loopRatio (closest to 1 best) 1.00399 raw 100000/100399 counted 
0/0 sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 188ms maxConcurrency = 100
    [junit]   GC for PS Scavenge: 14 ms for 1 collections
    [junit]   Approx allocation = 305MB vs 26MB; ratio to raw data size = 
11.606495652173914
    [junit]   loopRatio (closest to 1 best) 1.00398 raw 100000/100398 counted 
0/0 sync 0/0 up 0 down 0
    [junit] 
    [junit] 
    [junit] --------------------------------------------------
    [junit] 1 THREAD; ELEMENT SIZE 1024
    [junit] 
    [junit] Threads = 1 elements = 100000 (of size 1024) partitions = 1
    [junit]  original code:
    [junit]   Duration = 1024ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 30 ms for 2 collections
    [junit]   Approx allocation = 596MB vs 99MB; ratio to raw data size = 
5.994579233716475
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 848ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 39 ms for 3 collections
    [junit]   Approx allocation = 634MB vs 99MB; ratio to raw data size = 
6.374710421455939
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 1 elements = 100000 (of size 1024) partitions = 16
    [junit]  original code:
    [junit]   Duration = 599ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 24 ms for 2 collections
    [junit]   Approx allocation = 540MB vs 99MB; ratio to raw data size = 
5.430191570881226
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 812ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 30 ms for 2 collections
    [junit]   Approx allocation = 524MB vs 99MB; ratio to raw data size = 
5.269081149425287
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 1 elements = 100000 (of size 1024) partitions = 256
    [junit]  original code:
    [junit]   Duration = 702ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 34 ms for 2 collections
    [junit]   Approx allocation = 414MB vs 99MB; ratio to raw data size = 
4.164158697318007
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 618ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 30 ms for 2 collections
    [junit]   Approx allocation = 403MB vs 99MB; ratio to raw data size = 
4.057552490421456
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 1 elements = 100000 (of size 1024) partitions = 1024
    [junit]  original code:
    [junit]   Duration = 485ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 30 ms for 2 collections
    [junit]   Approx allocation = 356MB vs 99MB; ratio to raw data size = 
3.5774026053639845
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 469ms maxConcurrency = 1
    [junit]   GC for PS Scavenge: 28 ms for 2 collections
    [junit]   Approx allocation = 360MB vs 99MB; ratio to raw data size = 
3.617753026819923
    [junit]   loopRatio (closest to 1 best) 1.0 raw 100000/100000 counted 0/0 
sync 0/0 up 0 down 0
    [junit] 
    [junit] 
    [junit] --------------------------------------------------
    [junit] 100 THREADS; ELEMENT SIZE 1024
    [junit] 
    [junit] Threads = 100 elements = 100000 (of size 1024) partitions = 1
    [junit]  original code:
    [junit]   Duration = 2016ms maxConcurrency = 100
    [junit]   GC for PS Scavenge: 139 ms for 39 collections
    [junit]   Approx allocation = 12348MB vs 99MB; ratio to raw data size = 
124.02623823754789
    [junit]   loopRatio (closest to 1 best) 18.58224 raw 100000/1858224 counted 
0/0 sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 1401ms maxConcurrency = 100
    [junit]   GC for PS Scavenge: 25 ms for 2 collections
    [junit]   Approx allocation = 640MB vs 99MB; ratio to raw data size = 
6.437993486590038
    [junit]   loopRatio (closest to 1 best) 1.00019 raw 21/39 counted 0/0 sync 
99979/99980 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 100 elements = 100000 (of size 1024) partitions = 16
    [junit]  original code:
    [junit]   Duration = 234ms maxConcurrency = 100
    [junit]   GC for PS Scavenge: 36 ms for 3 collections
    [junit]   Approx allocation = 852MB vs 99MB; ratio to raw data size = 
8.563656015325671
    [junit]   loopRatio (closest to 1 best) 1.9605 raw 100000/196050 counted 
0/0 sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 226ms maxConcurrency = 100
    [junit]   GC for PS Scavenge: 29 ms for 2 collections
    [junit]   Approx allocation = 484MB vs 99MB; ratio to raw data size = 
4.861978007662835
    [junit]   loopRatio (closest to 1 best) 1.00254 raw 897/1143 counted 0/0 
sync 99103/99111 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 100 elements = 100000 (of size 1024) partitions = 256
    [junit]  original code:
    [junit]   Duration = 214ms maxConcurrency = 98
    [junit]   GC for PS Scavenge: 32 ms for 2 collections
    [junit]   Approx allocation = 418MB vs 99MB; ratio to raw data size = 
4.201469731800766
    [junit]   loopRatio (closest to 1 best) 1.01951 raw 100000/101951 counted 
0/0 sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 216ms maxConcurrency = 97
    [junit]   GC for PS Scavenge: 35 ms for 2 collections
    [junit]   Approx allocation = 409MB vs 99MB; ratio to raw data size = 
4.107927662835249
    [junit]   loopRatio (closest to 1 best) 1.01843 raw 96895/98735 counted 0/0 
sync 3105/3108 up 0 down 0
    [junit] 
    [junit] 
    [junit] Threads = 100 elements = 100000 (of size 1024) partitions = 1024
    [junit]  original code:
    [junit]   Duration = 200ms maxConcurrency = 100
    [junit]   GC for PS Scavenge: 31 ms for 2 collections
    [junit]   Approx allocation = 367MB vs 99MB; ratio to raw data size = 
3.6926790038314175
    [junit]   loopRatio (closest to 1 best) 1.00402 raw 100000/100402 counted 
0/0 sync 0/0 up 0 down 0
    [junit] 
    [junit]  modified code: 
    [junit]   Duration = 201ms maxConcurrency = 95
    [junit]   GC for PS Scavenge: 32 ms for 2 collections
    [junit]   Approx allocation = 364MB vs 99MB; ratio to raw data size = 
3.6609434482758623
    [junit]   loopRatio (closest to 1 best) 1.00399 raw 100000/100399 counted 
0/0 sync 0/0 up 0 down 0
    [junit] 
    [junit] 
    [junit] ==================================================
{code}

> AtomicSortedColumns.addAllWithSizeDelta has a spin loop that allocates memory
> -----------------------------------------------------------------------------
>
>                 Key: CASSANDRA-7546
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-7546
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>            Reporter: graham sanderson
>            Assignee: graham sanderson
>         Attachments: 7546.20.txt, 7546.20_2.txt, 7546.20_3.txt, 
> 7546.20_alt.txt, suggestion1.txt, suggestion1_21.txt
>
>
> In order to preserve atomicity, this code attempts to read, clone/update, 
> then CAS the state of the partition.
> Under heavy contention for updating a single partition this can cause some 
> fairly staggering memory growth (the more cores on your machine the worst it 
> gets).
> Whilst many usage patterns don't do highly concurrent updates to the same 
> partition, hinting today, does, and in this case wild (order(s) of magnitude 
> more than expected) memory allocation rates can be seen (especially when the 
> updates being hinted are small updates to different partitions which can 
> happen very fast on their own) - see CASSANDRA-7545
> It would be best to eliminate/reduce/limit the spinning memory allocation 
> whilst not slowing down the very common un-contended case.



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to