3 ms·
They add new instructions with each release so the bytecode is not backwards compatible. But it does not matter much because most of jvm code is deployed on the
by guard-of-terra 14y ago
They add new instructions with each release so the bytecode is not backwards compatible. But it does not matter much because most of jvm code is deployed on the server, and the rest is delivered with bundled jvm.
However, you can have compiler generate lower version bytecode for you. If you have a Java 8 compiler but want Java 1.4 bytecode - no problem, just ask compiler to target 1.4. It will warn you if you use any >1.4 features. Maybe it will even let you use lambdas (maybe not, I'm not sure).
Java is very backwards compatible. That's why it progresses so slowly perhaps.
- ZoFreX 14y agoBytecode is not made incompatible with every release, actually - for example the generics added in 1.5 use type erasure, and so are a compile-time-only feature, leaving the bytecode still compatible with 1.4 JVMs.
- guard-of-terra 14y agoYou're confusing JVM versions with Java versions. A JVM class compiled for JVM 6 target will not run under JVM 1.4. It will fail to load because of version mismatch. However, you can use Java 6 compiler to compile Java 6 code to JVM 1.4 bytecode. That's what you are talking about.
- ZoFreX 14y agoYes, I am. I got confused over what you meant by " It will warn you if you use any >1.4 features" - I thought you meant language >1.4, not bytecode spec >1.4. Thanks for setting me straight :)
- guard-of-terra 14y agoI actually meant "language features that require bytecode spec >1.4". Varargs and enums perhaps?