mark_segmap_as_used optimization: --------------------------------- For a detailed description, see the implementation comments. The optimization is for the case when two free blocks are joined. In short: instead of re-marking the entire, potentially large, segment map range, one additional "hop" is introduced to link the two blocks. platform: ppc64 server: ls3883 build: release parameters: -XX:ReservedCodeCacheSize=1024M, optimizations ON Note: timer#25 includes the time to evaluate fragmentation. This slows down the optimized variant. Compared to the not optimized variant, the effect can be neglected. Some sample output: #blocks: 5365, extra hops: 2910, free block hop overhead: 1455.0000. #blocks: 4364, extra hops: 3923, free block hop overhead: 1961.5000. #blocks: 3363, extra hops: 4936, free block hop overhead: 2468.0000. #blocks: 2362, extra hops: 5949, free block hop overhead: 2974.5000. #blocks: 1361, extra hops: 6962, free block hop overhead: 3481.0000. #blocks: 360, extra hops: 7975, free block hop overhead: 3987.5000. details for buffer #25 CodeHeap::mark_segmap_as_used buffer # 25 calls [n]: n= 30000, n4= 13010, n8= 15, n12= 16594, n14= 1, n16= 380 buffer # 25 segments marked[k]: b= 20272, b4= 14, b8= 1, b12= 8185, b14= 4, b16= 12066 buffer # 25 times [us]: t= 70946, t4= 46257, t8= 5, t12= 13301, t14= 6, t16= 11375 buffer # 25 time per call [us]: t= 2, t4= 3, t8= 0, t12= 0, t14= 6, t16= 29 buffer # 25 segments per call : b= 691, b4= 1, b8= 70, b12= 505, b14= 4507, b16= 32517 Note: The following is the result of a second run where the code path to evaluate fragmentation was completely removed. details for buffer #25 CodeHeap::mark_segmap_as_used buffer # 25 calls [n]: n= 30000, n4= 12999, n8= 26, n12= 16594, n14= 1, n16= 380 buffer # 25 segments marked[k]: b= 20272, b4= 14, b8= 1, b12= 8185, b14= 4, b16= 12066 buffer # 25 time [us]: t= 7065, t4= 734, t8= 1, t12= 4081, t14= 1, t16= 2245 buffer # 25 time per call [us]: t= 0, t4= 0, t8= 0, t12= 0, t14= 1, t16= 5 buffer # 25 segments per call : b= 691, b4= 1, b8= 50, b12= 505, b14= 4507, b16= 32517 parameters: -XX:ReservedCodeCacheSize=1024M, optimizations OFF details for buffer #25 CodeHeap::mark_segmap_as_used buffer # 25 calls [n]: n= 30000, n4= 400, n8= 17, n12= 16782, n14= 49, n16= 12752 buffer # 25 segments marked[k]: b= 20486744, b4= 2, b8= 1, b12= 8305, b14= 489, b16= 20477946 buffer # 25 time [us]: t= 89824596, t4= 46, t8= 5, t12= 44595, t14= 4858, t16= 89775089 buffer # 25 time per call [us]: t= 2994, t4= 0, t8= 0, t12= 2, t14= 99, t16= 7040 buffer # 25 segments per call : b= 699280, b4= 6, b8= 65, b12= 506, b14= 10233, b16= 1644402 platform: s390x server: ihls101 build: release parameters: -XX:ReservedCodeCacheSize=1024M, optimizations ON Note: timer#25 includes the time to evaluate fragmentation. This slows down the optimized variant. Compared to the not optimized variant, the effect can be neglected. Some sample output: #blocks: 5772, extra hops: 7616, free block hop overhead: 3808.0000. #blocks: 4771, extra hops: 8913, free block hop overhead: 4456.5000. #blocks: 3770, extra hops: 10209, free block hop overhead: 5104.5000. #blocks: 2769, extra hops: 11506, free block hop overhead: 5753.0000. #blocks: 1768, extra hops: 12802, free block hop overhead: 6401.0000. #blocks: 767, extra hops: 14099, free block hop overhead: 7049.5000. details for buffer #25 CodeHeap::mark_segmap_as_used buffer # 25 calls [n]: n= 40000, n4= 16194, n8= 23422, n12= 3, n14= 381, n16= 0 buffer # 25 segments marked[k]: b= 10175, b4= 17, b8= 4091, b12= 4, b14= 6063, b16= 0 buffer # 25 time [us]: t= 6323, t4= 5448, t8= 306, t12= 2, t14= 565, t16= 0 buffer # 25 time per call [us]: t= 0, t4= 0, t8= 0, t12= 0, t14= 1, t16= 0 buffer # 25 segments per call : b= 260, b4= 1, b8= 178, b12= 1424, b14= 16295, b16= 0 Note: The following is the result of a second run where the code path to evaluate fragmentation was completely removed. details for buffer #25 CodeHeap::mark_segmap_as_used buffer # 25 calls [n]: n= 40000, n4= 16203, n8= 23412, n12= 3, n14= 381, n16= 1 buffer # 25 segments marked[k]: b= 11879, b4= 17, b8= 4091, b12= 4, b14= 6063, b16= 1704 buffer # 25 time [us]: t= 2347, t4= 1447, t8= 356, t12= 0, t14= 479, t16= 64 buffer # 25 time per call [us]: t= 0, t4= 0, t8= 0, t12= 0, t14= 1, t16= 64 buffer # 25 segments per call : b= 304, b4= 1, b8= 178, b12= 1424, b14= 16295, b16= 1745071 parameters: -XX:ReservedCodeCacheSize=1024M, optimizations OFF details for buffer #25 CodeHeap::mark_segmap_as_used buffer # 25 calls [n]: n= 40000, n4= 410, n8= 23626, n12= 45, n14= 772, n16= 15147 buffer # 25 segments marked[k]: b= 12986104, b4= 1, b8= 4125, b12= 92, b14= 11464, b16= 12970420 buffer # 25 time [us]: t= 8488705, t4= 5, t8= 2653, t12= 66, t14= 7023, t16= 8478957 buffer # 25 time per call [us]: t= 212, t4= 0, t8= 0, t12= 1, t14= 9, t16= 559 buffer # 25 segments per call : b= 332444, b4= 4, b8= 178, b12= 2099, b14= 15206, b16= 876854