RFR: 8333103: Re-examine the console provider loading
Jan Lahoda
jlahoda at openjdk.org
Thu May 30 10:33:04 UTC 2024
On Wed, 29 May 2024 19:51:36 GMT, Naoto Sato <naoto at openjdk.org> wrote:
> There is an initialization code in `Console` class that searches for the Console implementations. Refactoring the init code not to use lambda/stream would reduce the (initial) number of loaded classes by about 100 for java.base implementations. This would become relevant when the java.io.IO (JEP 477) uses Console as the underlying framework.
Just to clarify a bit, this is only vaguely related to the implicitly declared classes. The actual issue is that having 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!");
}
}
(note there are no implicitly declared classes, and no implicit imports in the samples), there is a considerable difference in the runtime of (compiled versions) of these classes. E.g. on my laptop:
$ 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
(Vast) majority of the time is spent in JLine initialization. There's https://bugs.openjdk.org/browse/JDK-8333086 for that, where the intent is to avoid initializing JLine for simple printing. There may be other opportunities to make JLine initialization faster in case we need to initialize it.
-------------
PR Comment: https://git.openjdk.org/jdk/pull/19467#issuecomment-2139255172
More information about the core-libs-dev
mailing list