United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: JDK-6951686 Using large pages on Linux prevents zero based compressed oops
JDK-6951686 : Using large pages on Linux prevents zero based compressed oops

Details
Type:
Bug
Submit Date:
2010-05-11
Status:
Resolved
Updated Date:
2010-09-24
Project Name:
JDK
Resolved Date:
2010-06-01
Component:
hotspot
OS:
linux_2.6
Sub-Component:
compiler
CPU:
x86
Priority:
P4
Resolution:
Fixed
Affected Versions:
hs18
Fixed Versions:
hs19 (b02)

Related Reports
Backport:
Backport:
Backport:
Backport:
Backport:
Relates:

Sub Tasks

Description
> java -d64 -XX:+UseCompressedOops -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode -Xmx26g

heap address: 0x000000017ac00000, zero based Compressed Oops


> java -d64 -XX:+UseLargePages -XX:+UseCompressedOops -XX:+UnlockDiagnosticVMOptions -XX:+PrintCompressedOopsMode -Xmx26g

heap address: 0x00002aaaae400000, Compressed Oops with base: 0x00002aaaae3ff000

                                    

Comments
EVALUATION

The java heap with COOP is not reserved at specified address because of next (in os_linux.cpp):

// Linux does not support anonymous mmap with large page memory. The only way
// to reserve large page memory without file backing is through SysV shared
// memory API. The entire memory region is committed and pinned upfront.
// Hopefully this will change in the future...
bool os::can_commit_large_page_memory() {
  return false;
}

As result the method os::reserve_memory_special() is called but req_addr parameter is not used:

  addr = (char*)shmat(shmid, NULL, 0);
                                     
2010-05-11
EVALUATION

http://hg.openjdk.java.net/jdk7/hotspot-comp/hotspot/rev/79bf863697eb
                                     
2010-05-17



Hardware and Software, Engineered to Work Together