We currently have code compiled in Java 8 but we are running that on Java 11 VM. Now we are trying to move our code to Java 11 compile time as well. Wondering if there are any benefits to compiled code in Java 8 vs Compiled code in Java 11 performance-wise, since both compilers will produce different class files (bytecode)? How does one differ from the other in terms of efficiency?
Compiled code in java 8 vs Compiled code in java 11
2.1k Views Asked by Sagar At
1
There are 1 best solutions below
Related Questions in JAVA
- Resolve object using DI container with object instance
- Angularjs dependency injection parameter
- Dagger 2 - unable to inject object
- How to have SimpleInjector resolve viewmodel dependencies?
- Command Bus/Dispatcher and Handler registration without Dependency Injection
- Receiving a NoClassDefFoundError even though jar is successfully downloaded via Maven and referenced in pom.xml
- automapper error collection was modified when multiple users are creating a user
- When to use DI over abstract inheritance?
- Simple Injector Dependency Resolution Error - Could not load file or assembly System.Web.Http
- How can I use Dependency Injection to either Override a method or to set a default method when no dependency is explicitly injected?
Related Questions in JAVA-8
- Resolve object using DI container with object instance
- Angularjs dependency injection parameter
- Dagger 2 - unable to inject object
- How to have SimpleInjector resolve viewmodel dependencies?
- Command Bus/Dispatcher and Handler registration without Dependency Injection
- Receiving a NoClassDefFoundError even though jar is successfully downloaded via Maven and referenced in pom.xml
- automapper error collection was modified when multiple users are creating a user
- When to use DI over abstract inheritance?
- Simple Injector Dependency Resolution Error - Could not load file or assembly System.Web.Http
- How can I use Dependency Injection to either Override a method or to set a default method when no dependency is explicitly injected?
Related Questions in COMPILATION
- Resolve object using DI container with object instance
- Angularjs dependency injection parameter
- Dagger 2 - unable to inject object
- How to have SimpleInjector resolve viewmodel dependencies?
- Command Bus/Dispatcher and Handler registration without Dependency Injection
- Receiving a NoClassDefFoundError even though jar is successfully downloaded via Maven and referenced in pom.xml
- automapper error collection was modified when multiple users are creating a user
- When to use DI over abstract inheritance?
- Simple Injector Dependency Resolution Error - Could not load file or assembly System.Web.Http
- How can I use Dependency Injection to either Override a method or to set a default method when no dependency is explicitly injected?
Related Questions in JVM
- Resolve object using DI container with object instance
- Angularjs dependency injection parameter
- Dagger 2 - unable to inject object
- How to have SimpleInjector resolve viewmodel dependencies?
- Command Bus/Dispatcher and Handler registration without Dependency Injection
- Receiving a NoClassDefFoundError even though jar is successfully downloaded via Maven and referenced in pom.xml
- automapper error collection was modified when multiple users are creating a user
- When to use DI over abstract inheritance?
- Simple Injector Dependency Resolution Error - Could not load file or assembly System.Web.Http
- How can I use Dependency Injection to either Override a method or to set a default method when no dependency is explicitly injected?
Related Questions in JAVA-11
- Resolve object using DI container with object instance
- Angularjs dependency injection parameter
- Dagger 2 - unable to inject object
- How to have SimpleInjector resolve viewmodel dependencies?
- Command Bus/Dispatcher and Handler registration without Dependency Injection
- Receiving a NoClassDefFoundError even though jar is successfully downloaded via Maven and referenced in pom.xml
- automapper error collection was modified when multiple users are creating a user
- When to use DI over abstract inheritance?
- Simple Injector Dependency Resolution Error - Could not load file or assembly System.Web.Http
- How can I use Dependency Injection to either Override a method or to set a default method when no dependency is explicitly injected?
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular # Hahtags
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
javac
is not an optimizing compiler, so in general, don't expect it to produce "faster" bytecode from release to release. Optimization is a job of the JVM.Meanwhile, Java Compiler does support new language features and may support new JVM features. Some of them indeed have performance implications. Most notable examples in JDK 9 - JDK 11 are the following.
JEP 280: Indify String Concatenation (JDK 9).
This JEP changes the way how string concatenation expressions are compiled. Before JDK 9, string
+
expression was translated toAlthough JIT recognizes such chains and tries to optimize them in runtime, this optimization is fragile and does not always work as expected. Compiling string concatenation with
invokedynamic
gives the JVM more freedom to produce better code. You may find the detailed explanation and benchmarks in the notes to this JEP.JEP 181: Nest-Based Access Control (JDK 11)
This JEP solves the problem of accessing private members of nested classes. Before JDK 11, Java Compiler generated synthetic bridge methods for them (example).
At first glance, this has nothing to do with performance. However, in marginal cases an additional synthetic method may break inlining due to inlining depth limit.
Nest-Based Access Control allows nestmate classes to access private members of each other without synthetic bridges, thus reducing risk of accidential performance degradation.
Update
Previously I included JDK-8175883: Bytecode Generation for Enhanced for Loop in this list, but as @Holger noticed in the comments, this "optimization" didn't actually work.
Conclusion
Changes in Java Compiler are mostly related to new language/JVM features. Bytecode level optimization is not a goal. However, some of these changes may (indirectly) affect the performance, too. Anyway, the possible performance benefits from recompiling the code are usually so small that you won't even notice them in a real application.