http://cr.openjdk.java.net/~shade/density/string-density-bench.zip http://cr.openjdk.java.net/~shade/density/string-density-bench.jar $ java -jar target/string-density-bench.jar encoding -f 3 -wi 3 -i 3 (add more precise benchmark name after "encoding" to constrain benchmarks) (add -p encoding=... and/or -p size=... to constrain parameters) === UTF-8/From Benchmark (encoding) (size) Mode Cnt Score Error Units # JDK 9 Baseline From.ascii UTF-8 4096 avgt 9 1813.472 ± 12.360 ns/op From.beg_00FF UTF-8 4096 avgt 9 2734.943 ± 17.374 ns/op From.beg_FF43 UTF-8 4096 avgt 9 2757.093 ± 22.989 ns/op From.end_00FF UTF-8 4096 avgt 9 2730.908 ± 25.934 ns/op From.end_FF43 UTF-8 4096 avgt 9 2703.780 ± 70.832 ns/op # Patched, -XX:-CompactStrings From.ascii UTF-8 4096 avgt 9 2619.706 ± 37.186 ns/op From.beg_00FF UTF-8 4096 avgt 9 2749.935 ± 18.645 ns/op From.beg_FF43 UTF-8 4096 avgt 9 2755.768 ± 24.121 ns/op From.end_00FF UTF-8 4096 avgt 9 2759.387 ± 92.994 ns/op From.end_FF43 UTF-8 4096 avgt 9 2625.446 ± 26.018 ns/op Issues: *) From.ascii test with -XX:-CS is not returning back to baseline level. # SD baseline From.ascii UTF-8 4096 avgt 9 432.447 ± 15.278 ns/op From.beg_00FF UTF-8 4096 avgt 9 2388.569 ± 33.109 ns/op From.beg_FF43 UTF-8 4096 avgt 9 2905.258 ± 231.059 ns/op From.end_00FF UTF-8 4096 avgt 9 2281.112 ± 9.465 ns/op From.end_FF43 UTF-8 4096 avgt 9 3082.166 ± 11.344 ns/op # Patched, -XX:+CompactStrings From.ascii UTF-8 4096 avgt 9 429.647 ± 19.920 ns/op From.beg_00FF UTF-8 4096 avgt 9 2374.979 ± 24.685 ns/op From.beg_FF43 UTF-8 4096 avgt 9 2915.967 ± 255.949 ns/op From.end_00FF UTF-8 4096 avgt 9 2288.545 ± 37.812 ns/op From.end_FF43 UTF-8 4096 avgt 9 3108.206 ± 14.971 ns/op No issues. === UTF-8/To Benchmark (encoding) (size) Mode Cnt Score Error Units # JDK 9 Baseline To.ascii UTF-8 4096 avgt 9 2132.241 ± 15.759 ns/op To.beg_00FF UTF-8 4096 avgt 9 3282.173 ± 25.895 ns/op To.beg_FF43 UTF-8 4096 avgt 9 4028.761 ± 60.334 ns/op To.end_00FF UTF-8 4096 avgt 9 2150.415 ± 13.280 ns/op To.end_FF43 UTF-8 4096 avgt 9 2157.799 ± 17.116 ns/op # Patched, -XX:-CompactStrings To.ascii UTF-8 4096 avgt 9 2938.611 ± 35.227 ns/op To.beg_00FF UTF-8 4096 avgt 9 4097.243 ± 63.274 ns/op To.beg_FF43 UTF-8 4096 avgt 9 4905.990 ± 170.744 ns/op To.end_00FF UTF-8 4096 avgt 9 2942.579 ± 25.674 ns/op To.end_FF43 UTF-8 4096 avgt 9 2969.094 ± 32.423 ns/op Issues: *) Almost all tests are not returning to baseline level. # SD baseline To.ascii UTF-8 4096 avgt 9 2907.588 ± 16.363 ns/op To.beg_00FF UTF-8 4096 avgt 9 4032.347 ± 24.569 ns/op To.beg_FF43 UTF-8 4096 avgt 9 4566.033 ± 53.746 ns/op To.end_00FF UTF-8 4096 avgt 9 2921.026 ± 13.361 ns/op To.end_FF43 UTF-8 4096 avgt 9 2955.212 ± 49.612 ns/op # Patched, -XX:+CompactStrings To.ascii UTF-8 4096 avgt 9 426.043 ± 9.371 ns/op To.beg_00FF UTF-8 4096 avgt 9 4042.002 ± 29.074 ns/op To.beg_FF43 UTF-8 4096 avgt 9 4594.469 ± 192.615 ns/op To.end_00FF UTF-8 4096 avgt 9 2966.955 ± 25.135 ns/op To.end_FF43 UTF-8 4096 avgt 9 2969.876 ± 52.524 ns/op No issues. === UTF-16/From Benchmark (encoding) (size) Mode Cnt Score Error Units # JDK 9 baseline From.ascii UTF-16 4096 avgt 9 13556.418 ± 877.297 ns/op From.beg_00FF UTF-16 4096 avgt 9 13252.383 ± 179.153 ns/op From.beg_FF43 UTF-16 4096 avgt 9 13238.729 ± 131.864 ns/op From.end_00FF UTF-16 4096 avgt 9 13323.692 ± 109.823 ns/op From.end_FF43 UTF-16 4096 avgt 9 13684.421 ± 2040.777 ns/op # Patched, -XX:-CompactStrings From.ascii UTF-16 4096 avgt 9 13305.095 ± 130.302 ns/op From.beg_00FF UTF-16 4096 avgt 9 13356.803 ± 191.065 ns/op From.beg_FF43 UTF-16 4096 avgt 9 13342.801 ± 444.266 ns/op From.end_00FF UTF-16 4096 avgt 9 13327.449 ± 215.131 ns/op From.end_FF43 UTF-16 4096 avgt 9 13326.647 ± 302.509 ns/op No issues. # SD Baseline From.ascii UTF-16 4096 avgt 9 12871.428 ± 162.275 ns/op From.beg_00FF UTF-16 4096 avgt 9 13040.963 ± 728.920 ns/op From.beg_FF43 UTF-16 4096 avgt 9 13484.810 ± 447.801 ns/op From.end_00FF UTF-16 4096 avgt 9 12957.423 ± 688.531 ns/op From.end_FF43 UTF-16 4096 avgt 9 13590.109 ± 325.016 ns/op # Patched, -XX:+CompactStrings From.ascii UTF-16 4096 avgt 9 13000.952 ± 409.589 ns/op From.beg_00FF UTF-16 4096 avgt 9 13316.081 ± 2454.769 ns/op From.beg_FF43 UTF-16 4096 avgt 9 13588.976 ± 1214.578 ns/op From.end_00FF UTF-16 4096 avgt 9 12872.211 ± 124.235 ns/op From.end_FF43 UTF-16 4096 avgt 9 13658.163 ± 211.070 ns/op No issues. === UTF-16/To Benchmark (encoding) (size) Mode Cnt Score Error Units # JDK 9 baseline To.ascii UTF-16 4096 avgt 9 6380.390 ± 399.404 ns/op To.beg_00FF UTF-16 4096 avgt 9 6207.107 ± 19.867 ns/op To.beg_FF43 UTF-16 4096 avgt 9 9681.787 ± 8576.288 ns/op To.end_00FF UTF-16 4096 avgt 9 6255.891 ± 89.767 ns/op To.end_FF43 UTF-16 4096 avgt 9 6288.601 ± 351.498 ns/op # Patched, -XX:-CompactStrings To.ascii UTF-16 4096 avgt 9 6986.680 ± 38.000 ns/op To.beg_00FF UTF-16 4096 avgt 9 6958.777 ± 18.865 ns/op To.beg_FF43 UTF-16 4096 avgt 9 10584.699 ± 8259.775 ns/op To.end_00FF UTF-16 4096 avgt 9 10453.951 ± 8679.397 ns/op To.end_FF43 UTF-16 4096 avgt 9 7043.708 ± 199.714 ns/op Issues: *) Almost all tests are not returning to baseline level. *) (Some run-to-run variance is observed) # SD Baseline To.ascii UTF-16 4096 avgt 9 7108.013 ± 70.826 ns/op To.beg_00FF UTF-16 4096 avgt 9 10538.816 ± 8550.993 ns/op To.beg_FF43 UTF-16 4096 avgt 9 13940.282 ± 8586.786 ns/op To.end_00FF UTF-16 4096 avgt 9 7481.672 ± 955.146 ns/op To.end_FF43 UTF-16 4096 avgt 9 7225.158 ± 428.748 ns/op # Patched, -XX:+CompactStrings To.ascii UTF-16 4096 avgt 9 7090.758 ± 45.910 ns/op To.beg_00FF UTF-16 4096 avgt 9 7137.101 ± 248.284 ns/op To.beg_FF43 UTF-16 4096 avgt 9 7205.252 ± 495.074 ns/op To.end_00FF UTF-16 4096 avgt 9 7144.024 ± 317.968 ns/op To.end_FF43 UTF-16 4096 avgt 9 7047.074 ± 93.236 ns/op No issues. === ISO-8859-1/From Benchmark (encoding) (size) Mode Cnt Score Error Units # JDK 9 baseline From.ascii ISO-8859-1 4096 avgt 9 1854.618 ± 16.214 ns/op From.beg_00FF ISO-8859-1 4096 avgt 9 1855.655 ± 15.273 ns/op From.beg_FF43 ISO-8859-1 4096 avgt 9 1863.509 ± 29.172 ns/op From.end_00FF ISO-8859-1 4096 avgt 9 1847.640 ± 10.851 ns/op From.end_FF43 ISO-8859-1 4096 avgt 9 1851.610 ± 14.257 ns/op # Patched, -XX:-CompactStrings From.ascii ISO-8859-1 4096 avgt 9 2310.909 ± 6.424 ns/op From.beg_00FF ISO-8859-1 4096 avgt 9 2319.014 ± 27.928 ns/op From.beg_FF43 ISO-8859-1 4096 avgt 9 2565.613 ± 311.246 ns/op From.end_00FF ISO-8859-1 4096 avgt 9 2316.846 ± 13.149 ns/op From.end_FF43 ISO-8859-1 4096 avgt 9 2559.515 ± 331.928 ns/op Issues: *) Almost all tests are not returning to baseline level. # SD Baseline From.ascii ISO-8859-1 4096 avgt 9 409.730 ± 4.142 ns/op From.beg_00FF ISO-8859-1 4096 avgt 9 408.972 ± 1.705 ns/op From.beg_FF43 ISO-8859-1 4096 avgt 9 409.021 ± 2.535 ns/op From.end_00FF ISO-8859-1 4096 avgt 9 408.639 ± 3.234 ns/op From.end_FF43 ISO-8859-1 4096 avgt 9 406.365 ± 5.721 ns/op # Patched, -XX:+CompactStrings From.ascii ISO-8859-1 4096 avgt 9 424.231 ± 27.785 ns/op From.beg_00FF ISO-8859-1 4096 avgt 9 2709.812 ± 24.869 ns/op From.beg_FF43 ISO-8859-1 4096 avgt 9 441.024 ± 13.163 ns/op From.end_00FF ISO-8859-1 4096 avgt 9 2773.211 ± 17.219 ns/op From.end_FF43 ISO-8859-1 4096 avgt 9 434.324 ± 11.307 ns/op Issues: *) All tests are regressing! It would seem we lost the fast-path to plain copy, and instead doing this: private static class sun/nio/cs/ISO_8859_1.Decoder extends CharsetDecoder implements ArrayDecoder { public int decode(byte[] src, int sp, int len, char[] dst) { if (len > dst.length) len = dst.length; int dp = 0; while (dp < len) dst[dp++] = (char)(src[sp++] & 0xff); return dp; } } === ISO-8859-1/To Benchmark (encoding) (size) Mode Cnt Score Error Units # JDK 9 baseline To.ascii ISO-8859-1 4096 avgt 9 373.911 ± 6.524 ns/op To.beg_00FF ISO-8859-1 4096 avgt 9 375.138 ± 7.099 ns/op To.beg_FF43 ISO-8859-1 4096 avgt 9 380.838 ± 4.333 ns/op To.end_00FF ISO-8859-1 4096 avgt 9 372.919 ± 8.642 ns/op To.end_FF43 ISO-8859-1 4096 avgt 9 399.107 ± 5.228 ns/op # Patched, -XX:-CompactStrings To.ascii ISO-8859-1 4096 avgt 9 1153.573 ± 6.029 ns/op To.beg_00FF ISO-8859-1 4096 avgt 9 1158.133 ± 10.280 ns/op To.beg_FF43 ISO-8859-1 4096 avgt 9 1167.302 ± 11.072 ns/op To.end_00FF ISO-8859-1 4096 avgt 9 1158.010 ± 10.968 ns/op To.end_FF43 ISO-8859-1 4096 avgt 9 1161.513 ± 8.947 ns/op Issues: *) Almost all tests are not returning to baseline level. # SD Baseline To.ascii ISO-8859-1 4096 avgt 9 1138.785 ± 14.830 ns/op To.beg_00FF ISO-8859-1 4096 avgt 9 1139.529 ± 9.486 ns/op To.beg_FF43 ISO-8859-1 4096 avgt 9 1165.575 ± 13.798 ns/op To.end_00FF ISO-8859-1 4096 avgt 9 1138.156 ± 8.041 ns/op To.end_FF43 ISO-8859-1 4096 avgt 9 1167.203 ± 8.646 ns/op # Patched, -XX:+CompactStrings To.ascii ISO-8859-1 4096 avgt 9 422.241 ± 14.226 ns/op To.beg_00FF ISO-8859-1 4096 avgt 9 1139.888 ± 10.081 ns/op To.beg_FF43 ISO-8859-1 4096 avgt 9 1159.927 ± 11.434 ns/op To.end_00FF ISO-8859-1 4096 avgt 9 1197.651 ± 13.931 ns/op To.end_FF43 ISO-8859-1 4096 avgt 9 1164.348 ± 9.006 ns/op No issues.