add_to_freelist optimization: ----------------------------- At each call, remember the insert point (block after which the new free block was inserted). For the following call, insert point search can start with the remembered address, if the address of the new free block is higher than the remembered address. That can save a considerable number of FreeList iterations. Savings increase with FreeList length and with the ordering of the free blocks to be inserted. platform: ppc64 server: ls3883 build: release parameters: -XX:ReservedCodeCacheSize=1024M, optimizations ON Note: timer#29 time includes timer#23 time! details for buffer #29 CodeHeap::add_to_freelist buffer # 29 calls [n]: n= 10000, n4= 10000, n8= 0, n12= 0, n14= 0, n16= 0 buffer # 29 FreeList elem [k]: b= 28, b4= 28, b8= 0, b12= 0, b14= 0, b16= 0 buffer # 29 time [us]: t= 867, t4= 867, t8= 0, t12= 0, t14= 0, t16= 0 buffer # 29 time per call [us]: t= 0, t4= 0, t8= 0, t12= 0, t14= 0, t16= 0 buffer # 29 avg FreeList len : b= 2, b4= 2, b8= 0, b12= 0, b14= 0, b16= 0 details for buffer #23 (counting saved FreeList iterations) Note: The following is the result of a second run where the code path measured by timer#23 was completely removed. details for buffer #29 CodeHeap::add_to_freelist buffer # 29 calls [n]: n= 10000, n4= 10000, n8= 0, n12= 0, n14= 0, n16= 0 buffer # 29 FreeList elem [k]: b= 28, b4= 28, b8= 0, b12= 0, b14= 0, b16= 0 buffer # 29 time [us]: t= 142, t4= 142, t8= 0, t12= 0, t14= 0, t16= 0 buffer # 29 time per call [us]: t= 0, t4= 0, t8= 0, t12= 0, t14= 0, t16= 0 buffer # 29 avg FreeList len : b= 2, b4= 2, b8= 0, b12= 0, b14= 0, b16= 0 parameters: -XX:ReservedCodeCacheSize=1024M, optimizations OFF Note: timer#29 time is time spent in add_to_freelist(). There is no counting overhead. No timer#23 in this code path. details for buffer #29 CodeHeap::add_to_freelist buffer # 29 calls [n]: n= 10000, n4= 10000, n8= 0, n12= 0, n14= 0, n16= 0 buffer # 29 FreeList elem [k]: b= 28, b4= 28, b8= 0, b12= 0, b14= 0, b16= 0 buffer # 29 time [us]: t= 1667, t4= 1667, t8= 0, t12= 0, t14= 0, t16= 0 buffer # 29 time per call [us]: t= 0, t4= 0, t8= 0, t12= 0, t14= 0, t16= 0 buffer # 29 avg FreeList len : b= 2, b4= 2, b8= 0, b12= 0, b14= 0, b16= 0 platform: s390x server: ihls101 build: release parameters: -XX:ReservedCodeCacheSize=1024M, optimizations ON Note: timer#29 time includes timer#23 time! details for buffer #29 CodeHeap::add_to_freelist buffer # 29 calls [n]: n= 20000, n4= 20000, n8= 0, n12= 0, n14= 0, n16= 0 buffer # 29 FreeList elem [k]: b= 58, b4= 58, b8= 0, b12= 0, b14= 0, b16= 0 buffer # 29 time [us]: t= 157, t4= 157, t8= 0, t12= 0, t14= 0, t16= 0 buffer # 29 time per call [us]: t= 0, t4= 0, t8= 0, t12= 0, t14= 0, t16= 0 buffer # 29 avg FreeList len : b= 2, b4= 2, b8= 0, b12= 0, b14= 0, b16= 0 details for buffer #23 (counting saved FreeList iterations) parameters: -XX:ReservedCodeCacheSize=1024M, optimizations OFF Note: timer#29 time is time spent in add_to_freelist(). There is no counting overhead. No timer#23 in this code path. details for buffer #29 CodeHeap::add_to_freelist buffer # 29 calls [n]: n= 20000, n4= 20000, n8= 0, n12= 0, n14= 0, n16= 0 buffer # 29 FreeList elem [k]: b= 58, b4= 58, b8= 0, b12= 0, b14= 0, b16= 0 buffer # 29 time [us]: t= 208, t4= 208, t8= 0, t12= 0, t14= 0, t16= 0 buffer # 29 time per call [us]: t= 0, t4= 0, t8= 0, t12= 0, t14= 0, t16= 0 buffer # 29 avg FreeList len : b= 2, b4= 2, b8= 0, b12= 0, b14= 0, b16= 0