[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-hotspot-runtime-dev
Subject: RFR JDK-8059092: Store Interned Strings in CDS Archives
From: Jiangli Zhou <jiangli.zhou () oracle ! com>
Date: 2015-05-29 19:39:27
Message-ID: 950E7237-1EBC-4C22-8D41-701BDE7ABBC3 () oracle ! com
[Download RAW message or body]
Greetings,
Please review the changes for supporting interned String objects and the underling \
character arrays in the CDS shared archive. The webrevs listed below only include the \
runtime changes. The webrev for GC specific changes will be sent out by Tom Benson \
shortly.
JEP
https://bugs.openjdk.java.net/browse/JDK-8059092
Webrev
hotspot : http://cr.openjdk.java.net/~jiangli/8059092/webrev_hotspot.01/index.html
whitebox: http://cr.openjdk.java.net/~jiangli/8059092/webrev_wb.01/index.html
Summary
The shared strings support is added on top of the basic CDS function that enables the \
archiving of the interned String objects and String’s underlying ‘value' array \
objects from the java heap. During CDS dump time, all Strings referenced from the \
string table is copied into a special region in java heap, which is at the top of the \
dump time java heap. The special region is referred as the string space. While \
copying the String related objets, a compact table is created for storing the \
references to the copied Strings. Both the compact table and the string space are \
written into the CDS archive with the rest of the class metadata during dumping. The \
compact table for shared strings uses the same format as the shared symbol table in \
CDS archive and shares implementations.
At runtime, the string space is mapped at the same offset from the narrow oop \
encoding base as dump time within the java heap. That allows the shared strings to be \
‘partially’ relocatable, which means the runtime java heap could be at different \
address location and have different size from the dump time java heap as long as the \
same narrow oop encoding can be used. If the narrow oop encoding changes due to the \
large difference between the dump-time and runtime heap sizes, the shared string \
space from the CDS archive is ignored and not mapped to the VM address space.
The mapped string space is an ‘archive’ region in the java heap. All shared objects \
residing within the region are not collected or forwarded by GC. GC activities never \
write to the memory pages that are mapped as the shared string space. The identity \
hash of shared objects in the string space are pre-computed during CDS archive dump \
time. The only possible ‘write’ to the shared string space at runtime is from \
synchronization on the shared objects. That allows majority or all mapped string \
memory to be sharable between different VM processes.
Only 64-bit process is supported for shared strings due to the dependency on the \
narrow oop support. Windows is not supported currently.
Performance Results
Memory
Tested using about 3M of string data for memory measurement. Memory results were \
measured using linux ps_mem tool. No Shared String
Private + Shared = RAM used Program Saving
28.0 MiB + 110.5 KiB = 28.1 MiB java
31.5 MiB + 12.6 MiB = 44.2 MiB java (2)
47.2 MiB + 12.7 MiB = 59.9 MiB java (3)
63.2 MiB + 12.8 MiB = 76.1 MiB java (4)
78.0 MiB + 12.9 MiB = 90.8 MiB java (5)
With Shared String
27.6 MiB + 111.5 KiB = 27.7 MiB java 0.4M
23.7 MiB + 16.3 MiB = 40.0 MiB java (2) 4.2M
35.3 MiB + 16.4 MiB = 51.7 MiB java (3) 8.2M
48.3 MiB + 16.5 MiB = 64.8 MiB java (4) 11.3M
60.6 MiB+ 16.5 MiB= 77.2MiB java(5) 13.6M
Runtime Performance
Tested on isolated linux-x64 machine.
SpecJVM98
==============================================================================
logs.specjvm.before2:
Benchmark Samples Mean Stdev Geomean Weight
specjvm98 10 603.39 23.25
==============================================================================
logs.specjvm.after2:
Benchmark Samples Mean Stdev %Diff P Significant
specjvm98 10 604.89 10.85 0.25 0.856 *
==============================================================================
No performance degradation shown in specjvm.
Testing
Tested with:
Developed unit tests
JPRT
Full QA test cycle: vm.gc, vm.runtime, nsk.sysdict, vm.metaspace, vm.quick, JCK: vm, \
lang, api, KS-24hrs, runThese Thanks,
Jiangli
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic