• Home
    • View
    • Login
    This page
    • Normal
    • Export PDF
    • Page Information

    Loading...
  1. Dashboard
  2. Undefined Space
  3. HotSpot
  4. CompressedOops

Page History

Versions Compared

Old Version 7

changes.mady.by.user John Rose

Saved on Apr 03, 2009

compared with

New Version 8

changes.mady.by.user John Rose

Saved on May 15, 2009

  • Previous Change: Difference between versions 6 and 7
  • Next Change: Difference between versions 8 and 9
  • View Page History

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

If UseCompressedOops is true, the klass is 32 bits. Non-arrays have a gap field immediately after the klass, while arrays store the length field immediately after the klass.

Zero based compressed oops

(To do: format the following nicely.}

No Format

The 64-bit VM with compressed oops uses an arbitrary address
for the narrow oop base which is calculated as java heap base
minus one (protected) page size for implicit NULL checks to work.
This means a generic field reference is
<narrow-oop-base> + (<narrow-oop> << 3) + <field-offset>.
If the narrow oop base can be made to be zero (the java heap
doesn't actually have to start at offset zero), then a generic
field reference can be just (<narrow-oop << 3) + <field-offset>,
allowing to save the heap base add (current Register Allocator
does not allow to save register).
Also with zero base the null check of compressed oop is not
needed. Current code for decoding compressed oops looks like this:

if (<narrow-oop> == NULL)
<wide_oop> = NULL
else
<wide_oop> = <narrow-oop-base> + (<narrow-oop> << 3)

With zero base the code is much simpler:

<wide_oop> = <narrow-oop> << 3

Also if java heap size < 4Gb and it can be moved into low virtual
address space then compressed oops can be used without
encoding/decoding.

Zero based implementation tries to allocated java heap using different
strategies based on the heap size and a platform it runs on.
First, it tries to allocate java heap below 4Gb to use
compressed oops without decoding if heap size < 4Gb.
If it fails or heap size > 4Gb it will try to allocate the heap
below 32Gb to use zero based compressed oops.
If this also fails it will switch to regular compressed oops
with narrow oop base.
Overview
Content Tools
ThemeBuilder

Terms of Use
• License: GPLv2
• Privacy • Trademarks • Contact Us

Powered by a free Atlassian Confluence Open Source Project License granted to https://www.atlassian.com/software/views/opensource-community-additional-license-offer. Evaluate Confluence today.

  • Kolekti ThemeBuilder Powered by Atlassian Confluence 8.5.23
  • Kolekti ThemeBuilder printed.by.atlassian.confluence
  • Report a bug
  • Atlassian News
Atlassian
Kolekti ThemeBuilder EngineAtlassian Confluence
{"serverDuration": 332, "requestCorrelationId": "fa806b72258449c8"}