On Wed, 5 Jun 2024 12:36:33 GMT, Jan Lahoda <jlah...@openjdk.org> wrote:

>> Consider these two programs:
>> 
>> 
>> public class SystemPrint {
>>     public static void main(String... args) {
>>         System.err.println("Hello!");
>>     }
>> }
>> 
>> and:
>> 
>> public class IOPrint {
>>     public static void main(String... args) {
>>         java.io.IO.println("Hello!");
>>     }
>> }
>> 
>> 
>> They do the same conceptual thing - write a text to the output. But, 
>> `IO.println` delegates to `Console.println`, which then delegates to a 
>> `Console` backend, and the default backend is currently based on JLine.
>> 
>> The issues is that JLine takes a quite a long time to initialize, and in a 
>> program like this, JLine is not really needed - it is used to provide better 
>> editing experience when reading input, but there's no reading in these 
>> programs.
>> 
>> For example, on my computer:
>> 
>> $ time java -classpath /tmp SystemPrint 
>> Hello!
>> 
>> real    0m0,035s
>> user    0m0,019s
>> sys     0m0,019s
>> 
>> $ time java -classpath /tmp --enable-preview IOPrint 
>> Hello!
>> 
>> real    0m0,165s
>> user    0m0,324s
>> sys     0m0,042s
>> 
>> 
>> The proposal herein is to delegate to the simpler `Console` backend from 
>> `java.base` as long as the user only uses methods that print to output, and 
>> switch to the JLine delegate when other methods (typically input) is used. 
>> Note that while technically `writer()` is a method doing output, it will 
>> force JLine initialization to avoid possible problems if the client caches 
>> the writer and uses it after switching the delegates.
>> 
>> With this patch, I can get timing like this:
>> 
>> $ time java --enable-preview -classpath /tmp/ IOPrint 
>> Hello!
>> 
>> real    0m0,051s
>> user    0m0,038s
>> sys     0m0,020s
>> 
>> 
>> which seems much more acceptable.
>> 
>> There is also #19467, which may reduce the time further.
>> 
>> A future work might focus on making JLine initialize faster, but avoiding 
>> JLine initialization in case where we don't need it seems like a good step 
>> to me in any case.
>
> Jan Lahoda has updated the pull request incrementally with one additional 
> commit since the last revision:
> 
>   Correctly reflecting review feedback

LGTM. Thanks for the changes.

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

Marked as reviewed by naoto (Reviewer).

PR Review: https://git.openjdk.org/jdk/pull/19479#pullrequestreview-2099801902

Reply via email to