Hi, during JDK 9 development we ended up converting package name Strings from external to internal form in the JNI layer rather than in Java - a reasonable optimization at the time[1].
In light of recent startup optimization work, profiles now show clearly that we still have some overhead here. Partly due calling many times over into the VM from JNI. Moving the conversion completely into VM we reduce overhead of Module.defineModule0, with a measurable effect on bootstrap overhead[2]. Patch: http://cr.openjdk.java.net/~redestad/8242452/open.00/ Bug: https://bugs.openjdk.java.net/browse/JDK-8242452 Testing: tier1-6, complete headless run of JCK 15-b04 locally The patch includes a few enhancement to internal utilities, e.g., an as_utf8_string variant which allows (re-)using a provided char buffer if it's sufficiently sized, but which does not truncate the converted string if the buffer is too small. I'm open to splitting that out into a standalone RFE if preferable. Thanks! /Claes [1] https://bugs.openjdk.java.net/browse/JDK-8171855 [2] perf stat -r 250 java HelloWorld Before: 103,884,846 instructions # 0.81 insns per cycle ( +- 0.07% ) 20,470,109 branches # 419.732 M/sec ( +- 0.07% ) 740,708 branch-misses # 3.62% of all branches ( +- 0.14% ) 0.033977482 seconds time elapsed ( +- 0.23% ) After: 102,459,412 instructions # 0.80 insns per cycle ( +- 0.08% ) 20,192,923 branches # 416.229 M/sec ( +- 0.08% ) 733,137 branch-misses # 3.63% of all branches ( +- 0.13% ) 0.033858386 seconds time elapsed ( +- 0.32% )