The follow pages introduce some of the larger changes relating to the Java Virtual Machine introduced in the JDK 7 release:
In addition, the following enhancements are added:
Area: HotSpot
Standard/Platform: Java SE 7 Update 1
Synopsis: JIT and Loop Bugs: Three bugs reported by various parties, including Apache Lucene developers, have been fixed in JDK 7 Update 1, in addition to a fourth related bug found by Oracle.
RFE: 7070134,
7068051,
7044738,
7077439
Area: HotSpot
Standard/Platform: Java SE 7
Synopsis: The JVM/TI version number was changed from 1.1 to
1.2 in order to add the GetLocalInstance method.
RFE: 7003782,
7004582
Area: HotSpot
Standard/Platform: JDK 7
Synopsis: Classfiles with version number 51 are exclusively
veritified using the type-checking verifier, and thus the methods
must have StackMapTable attributes when appropriate. For
classfiles with version 50, the HotSpot JVM would (and continues
to) failover to the type-inferencing verifier if the stackmaps in
the file were missing or incorrect. This failover behavior does not
occur for classfiles with version 51 (the default version for
JDK7).
Any tool the modifies bytecode in a version 51 classfile must be
sure to update the stackmap information to be consistent with the
bytecode in order to pass verification.
RFE: 6693236
Area: HotSpot
Standard/Platform: JDK 7
Synopsis: In JDK 7, interned strings are no longer allocated
in the permanent generation of the Java heap, but are instead
allocated in the main part of the Java heap (known as the young and
old generations), along with the other objects created by the
application. This change will result in more data residing in the
main Java heap, and lessw data in the permanent generation, and
thus may require heap sizes to be adjusted. Most applications will
see only relatively small differences in heap usage due to this
change, but larger applications that load many classes or make
heavy use of the String.intern() method will see more
significant differences.
RFE: 6962931
Area: HotSpot
Standard/Platform: JDK 7
Synopsis: The default out-of-the-box heap size and shape
parameters for the concurrent mark sweep collector (CMS) have been
modified. The new settings take advantage of faster platforms that
have been introduced since JDK 6 was released. Like the other
collectors in HotSpot, CMS will now use the available physical
memory on the platform to size its heap, while attempting to shape
that heap to keep pause times associated with minor collections
"reasonable". The specific shape of the heap may be
platform-depenent in other ways as well.
Users can override all or some of these default settings by
explicitly sizing or shaping the heap, AKA "heap tuning", to suit
their specific needs.
For more information on the default settings for this and other
garbage collectors, please see the
Heap Tuning Guide for JDK 6.
RFE: 6896099
Area: HotSpot
Standard/Platform: JDK 7
Synopsis: The JDK 6 release notes included performance
enhancements for CMS. To provide a mechanism to continue using the
behavior provided by JDK 5, the CMSUseOldDefaults flag was
provided. This flag restored a number of settings to a default
state. During the last few years, this flag has received minimal
use and most customers prefer the improved CMS performance. The
CMSUseOldDefaults flag is now removed.
RFE: 7027529
Area: HotSpot
Standard/Platform: JDK 7
Synopsis: The GarbageFirst (G1) garbage collector is
experimental in this release. Some command line tools, such as
jstack or jmap, may not work properly when using
the G1 collector.
RFE: 6966967
Area: HotSpot
Standard/Platform: JDK 7
Synopsis: In previous releases of the JDK on Solaris only,
the Thread.interrupt() method would interrupt some
blocking I/O operatons resulting in InterruptedIOException
thrown by the target thread and leaving socket or file streams in
an inconsistent state. This so called "legacy interruptible I/O
support" has been disabled in JDK 7. Applications that previously
relied on this Solaris specific behavior can re-enable this support
by running with the following option on the command line:
-XX:+UseVMInterruptibleIO. A future release of the JDK may
remove the legacy interruptible I/O support completely.
RFE: 6554406