United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-7014874 Incorrect COOPs modes on solaris-{sparcv9,amd64} with ParallelGC
JDK-7014874 : Incorrect COOPs modes on solaris-{sparcv9,amd64} with ParallelGC

Details
Type:
Bug
Submit Date:
2011-01-26
Status:
Closed
Updated Date:
2011-03-08
Project Name:
JDK
Resolved Date:
2011-03-08
Component:
hotspot
OS:
generic
Sub-Component:
gc
CPU:
generic
Priority:
P3
Resolution:
Fixed
Affected Versions:
hs20
Fixed Versions:
hs21 (b03)

Related Reports
Backport:

Sub Tasks

Description
The following heap parameters cause "zero based Compressed Oops" to be used, while "zero based Compressed Oops, 32-bits Oops" are expected. The parameters are "near maximum" for "zero based Compressed Oops, 32-bi
ts Oops" mode, i.e. HeapBaseMinAddress + Xmx + MaxPermSize = 4g:

1.
.../solaris-amd64//bin/java -d64 -server -Xmixed -XX:+UseParallelGC -XX:ObjectAlignmentInBytes=8 -XX:HeapBaseMinAddress=2048m -Xmx1024m -XX:MaxPermSize=1024m -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOop
sMode -version

heap address: 0x0000000080000000, size: 2050 MB, zero based Compressed Oops

2.
.../solaris-amd64//bin/java -d64 -server -Xmixed -XX:+UseParallelGC -XX:ObjectAlignmentInBytes=8 -XX:HeapBaseMinAddress=1536m -Xmx2048m -XX:MaxPermSize=512m -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode -version

heap address: 0x0000000060000000, size: 2562 MB, zero based Compressed Oops

3.
.../solaris-amd64//bin/java -d64 -server -Xmixed -XX:+UseParallelGC -XX:ObjectAlignmentInBytes=16 -XX:HeapBaseMinAddress=2048m -Xmx1024m -XX:MaxPermSize=1024m -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode -version

heap address: 0x0000000080000000, size: 2050 MB, zero based Compressed Oops

4.
.../solaris-amd64//bin/java -d64 -server -Xmixed -XX:+UseParallelGC -XX:ObjectAlignmentInBytes=16 -XX:HeapBaseMinAddress=1536m -Xmx2048m -XX:MaxPermSize=512m -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode -version

heap address: 0x0000000060000000, size: 2562 MB, zero based Compressed Oops



The following heap parameters cause "Compressed Oops with base" to be used, while "zero based Compressed Oops" are expected. The parameters are "near maximum" for "Compressed Oops with base", i.e. HeapBaseMinAddress + Xmx + MaxPermSize = 32g (64g if -XX:ObjectAlignmentInBytes=16):

5.
.../solaris-amd64//bin/java -d64 -server -Xmixed -XX:+UseParallelGC -XX:ObjectAlignmentInBytes=8 -XX:HeapBaseMinAddress=16384m -Xmx8192m -XX:MaxPermSize=8192m -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode -version

Protected page at the reserved heap base: 0x00000003ffe00000 / 2097152 bytes

heap address: 0x0000000400000000, size: 16386 MB, Compressed Oops with base: 0x00000003fffff000

6.
.../solaris-amd64//bin/java -d64 -server -Xmixed -XX:+UseParallelGC -XX:ObjectAlignmentInBytes=8 -XX:HeapBaseMinAddress=16128m -Xmx8320m -XX:MaxPermSize=8320m -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode -version

Protected page at the reserved heap base: 0x00000003efe00000 / 2097152 bytes

heap address: 0x00000003f0000000, size: 16642 MB, Compressed Oops with base: 0x00000003effff000

7.
.../solaris-amd64//bin/java -d64 -server -Xmixed -XX:+UseParallelGC -XX:ObjectAlignmentInBytes=16 -XX:HeapBaseMinAddress=65400m -Xmx112m -XX:MaxPermSize=24m -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode -version

Protected page at the reserved heap base: 0x0000000ff77f0000 / 65536 bytes

heap address: 0x0000000ff7800000, size: 138 MB, Compressed Oops with base: 0x0000000ff77ff000

8.
.../solaris-amd64//bin/java -d64 -server -Xmixed -XX:+UseParallelGC -XX:ObjectAlignmentInBytes=16 -XX:HeapBaseMinAddress=32762m -Xmx16390m -XX:MaxPermSize=16384m -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode -version

Protected page at the reserved heap base: 0x00000007ff800000 / 2097152 bytes

heap address: 0x00000007ffa00000, size: 32776 MB, Compressed Oops with base: 0x00000007ff9ff000



All instances are common to solaris-sparcv9 and solaris-amd64, UseParallelGC and UseParallelOldGC

                                    

Comments
EVALUATION

http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/336d17dff7cc
                                     
2011-02-09
PUBLIC COMMENTS

scale_by_NewRatio_aligned() aligns boundary between old
and young gens to min_alignment() (64K). But code in
ParallelScavengeHeap::initialize() aligns up both old and
young gen sizes to large page size.
As result total heap size could be increased by one large
page and cross 4gb boundary preventing usage of 32-bit COOPs.

Align old gen size down to keep specified heap size but
not less than its old gen min size.
                                     
2011-02-09



Hardware and Software, Engineered to Work Together