On Thu, 27 May 2021 05:13:44 GMT, David Holmes <dhol...@openjdk.org> wrote:

>> Maxim Kartashev has refreshed the contents of this pull request, and 
>> previous commits have been removed. The incremental views will show 
>> differences compared to the previous content of the PR. The pull request 
>> contains one new commit since the last revision:
>> 
>>   8195129: System.load() fails to load from unicode paths
>
> src/hotspot/os/windows/os_windows.cpp line 1541:
> 
>> 1539: void * os::dll_load(const char *utf8_name, char *ebuf, int ebuflen) {
>> 1540:   LPWSTR utf16_name = NULL;
>> 1541:   errno_t err = convert_UTF8_to_UTF16(utf8_name, &utf16_name);
> 
> Do you have any figures on the cost of this additional conversion in relation 
> to startup time?
> 
> I'm already concerned to see that we have to perform each conversion twice 
> via MultiByteToWideChar/WideCharToMultiByte, once to get the size and then to 
> actually get the characters! This seems potentially very inefficient.

I measured time spend converting the library path name relative to the overall 
time of a (successful) `os::dll_load()` call. It varies between a fraction of a 
percent to ~3% (see below for the actual data from a `release` build). I'll 
defer to your expertise wrt to these numbers.

What can be done here (without changing os::dll_load() API) is to have a "fast 
path" for ascii-only path names, in which case no conversion is necessary, and 
a "slow path" for all the rest. This will complicate things a bit, but not by 
much, I believe. I am certainly willing to give that a try. Let me know what do 
you think.



./build/windows-x86_64-server-release/images/jdk/bin/java -jar 
./build/windows-x86_64-server-fastdebug/images/jdk/demo/jfc/SwingSet2/SwingSet2.jar
0.050% for 
C:\cygwin64\home\maxim\work\OpenJDK\jdk\build\windows-x86_64-server-release\images\jdk\bin\jimage.dll
2.273% for 
C:\cygwin64\home\maxim\work\OpenJDK\jdk\build\windows-x86_64-server-release\images\jdk\bin\java.dll
0.177% for 
C:\cygwin64\home\maxim\work\OpenJDK\jdk\build\windows-x86_64-server-release\images\jdk\bin\net.dll
0.541% for 
C:\cygwin64\home\maxim\work\OpenJDK\jdk\build\windows-x86_64-server-release\images\jdk\bin\nio.dll
0.359% for 
C:\cygwin64\home\maxim\work\OpenJDK\jdk\build\windows-x86_64-server-release\images\jdk\bin\zip.dll
3.186% for 
C:\cygwin64\home\maxim\work\OpenJDK\jdk\build\windows-x86_64-server-release\images\jdk\bin\jimage.dll
0.075% for 
C:\cygwin64\home\maxim\work\OpenJDK\jdk\build\windows-x86_64-server-release\images\jdk\bin\awt.dll
0.232% for 
C:\cygwin64\home\maxim\work\OpenJDK\jdk\build\windows-x86_64-server-release\images\jdk\bin\freetype.dll
0.136% for 
C:\cygwin64\home\maxim\work\OpenJDK\jdk\build\windows-x86_64-server-release\images\jdk\bin\fontmanager.dll
0.170% for 
C:\cygwin64\home\maxim\work\OpenJDK\jdk\build\windows-x86_64-server-release\images\jdk\bin\javajpeg.dll

-------------

PR: https://git.openjdk.java.net/jdk/pull/4169

Reply via email to