Project proposal: Remove the Permanent Generation
Bengt Rutisson
bengt.rutisson at oracle.com
Thu May 31 00:08:24 PDT 2012
Coleen,
Sorry for the late reply on this. I have been going through the perm gen
removal changes with Stefan over the past few weeks. Overall I think it
looks great! You are all doing an excellent job!
Stefan has made several changes based on our code walk through we did.
Below are a few minor things that he did not have time to fix. I am not
sure any of them are particularly important.
Bengt
CardTableModRefBS::write_ref_needs_barrier()
This does not seem to be used anymore and is now implemented as
ShouldNotReachHere(). Is there a plan to start using it again or should
it be removed?
ConcurrentMarkSweepGeneration::update_counters(size_t used)
It looks like this method lost its implementation. Was this intentional?
GCCause::_permanent_generation_full
Should maybe be renamed to "metadata"-something when we trigger a GC due
to too much memory being allocated for metadata.
PermGen flags. What are the plans for the existing PermGen flags? Will
they be replaced, ignored or reused?
I've seen: PermSize, MaxPermSize, CMSPermGenPrecleaningEnabled,
CMSTriggerPermRatio, CMSInitiatingPermOccupancyFraction,
CMSIsTooFullPercentage, AdaptivePermSizeWeight, PermGenPadding,
MinPermHeapExpansion, MaxPermHeapExpansion and PermMarkSweepDeadRatio.
The comments for these class data sharing flags mention perm gen and
should probably be updated:
UseSharedSpaces, RequireSharedSpaces, SharedReadWriteSize,
SharedReadOnlySize
On 2012-05-09 20:45, Coleen Phillimore wrote:
>
> Please find below the webrev of the Permgen elimination changes from
> our latest merge with the hotspot-gc baseline. We have completed the
> major functional changes and are now working on cleanups, testing and
> bug fixes. There are a few items left to do that we will file as
> RFE's when this is integrated. We'll have a couple of other webrevs
> before integration which we will again solicit code review comments.
> But don't wait! This is huge so your comments in advance regarding
> areas within your expertise.
>
> You can also get a patch file and patch against
> http://hg.openjdk.java.net/hsx/hotspot-gc/hotspot changeset
> 9f059abe8cf2 .
>
> http://cr.openjdk.java.net/~coleenp/metadata4
>
> Changes since last webrev include serviceability agent support,
> compiledICHolders are allocated in C Heap and class data sharing
> support (CDS). Left to do is the big rename of the metadata from a
> lower case name to upper case name without the OopDesc. We're taking
> suggestions for what to rename constantPoolCacheOopDesc since it's
> never been a cache and it's now not an oop either.
>
> Thanks!
> Coleen
>
>
> On 4/13/2012 6:50 PM, Coleen Phillimore wrote:
>>
>> We want to keep the openjdk community aware of the changes to remove
>> the permanent generation. We are nearing completion of the
>> functional changes. The webrev below has been generated as side
>> effect of syncing to the latest hotspot-gc repository.
>>
>> http://cr.openjdk.java.net/~coleenp/metadata3
>>
>> Since the last webrev that we sent out, these areas have been completed:
>>
>> 1. G1 and CMS (concurrent mark sweep) garbage collectors are now
>> supported.
>> 2. Metadata is now allocated from chunks in mmap space(s). The
>> chunks are still freed when the class loader that owns the metadata
>> is unloaded.
>> 3. Many cleanups, including removing is_parseable is_conc_safe and
>> is_partially_loaded, and others.
>> 4. Bug fixes from internal test runs.
>>
>> There are a few large changes coming to this repository very soon:
>>
>> 1. Allocate CompiledICHolders (once oops) out of CHeap memory.
>> 2. Serviceability Agent changes to reflect the new metadata types.
>> 3. Class data sharing.
>>
>> The last change we'll make is to rename the metadata types to remove
>> the Oop suffixes and capitalize type names.
>>
>> Please feel free to comment, ask questions and/or make suggestions.
>>
>> Thanks,
>> Coleen
>>
>> On 3/20/2012 10:40 AM, Jon Masamitsu wrote:
>>> You may have noticed that this project proposal never got
>>> any farther then this mail. Somewhat due to indecision on
>>> our part, this work is not going to become its own project
>>> but will be integrated through the hsx/hotspot-gc/hotspot
>>> repository. We wanted to provide a preview of the work
>>> so prepared this webrev from an recent merge of the perm gen
>>> removal work with hotspot-gc. We're still working on it
>>> but thought this intermediate webrev would be of interest.
>>>
>>> http://cr.openjdk.java.net/~coleenp/metadata2
>>>
>>> In this webrev
>>>
>>> Allocations for the class metadata are made from the C heap.
>>> More work is coming here. The infrastructure for the perm
>>> gen has not yet been removed but nothing is allocated in
>>> the perm gen.
>>>
>>> The klasses that were used to described class metadata have
>>> been removed (klassKlass and it's derivatives).
>>>
>>> Class metadata type (instanceKlass) has been changed and is
>>> being separated from oops. It still derives from Klass but
>>> Klass now derives from metadataOop and not Klass_vtbl. Please
>>> note that metadataOop does not derive from oop. In an attempt
>>> to stay sane we're not changing everything at once. The
>>> separation of instanceKlass from oop is being done in a staged
>>> way and we're not done. You'll see klassOop, constantPoolOop,
>>> and constantPoolCacheOop but they are not oops. For example
>>> klassOop is typedef'ed to Klass and these types will be renamed
>>> to remove the Oop extension and capitalize the first letter
>>> to be consistent with other Hotspot type names.
>>>
>>> instanceKlass, constantPoolOop, and constantPoolCacheOop
>>> have been restructured to reduce the number of oops they contain.
>>> constantPoolKlass and cpCacheKlass are gone.
>>>
>>> Data structures have been added to represent class loaders and
>>> dependencies between class loaders (ClassLoaderData and
>>> ClassLoaderDataGraph, respectively). Class unloading is directly
>>> tied
>>> to the liveness of the class loaders.
>>>
>>> All the garbage collectors have been modified to find and follow
>>> oops in class metadata. The work for the CMS collector is not
>>> complete.
>>>
>>> Changed interpreter to support the move of oops out of the constant
>>> pool.
>>>
>>> Within the compilers and associated code most of the changes
>>> involved separating the oop and metadata types, which required
>>> changes throughout the compiler interface, relocations,
>>> dependencies,
>>> nmethods, debug info and the type systems of the compilers
>>> themselves.
>>> Code generation is for the most part unchanged.
>>>
>>>
>>> On 11/28/11 09:20, Jon Masamitsu wrote:
>>>> I am going to be proposing the permanent generation
>>>> removal as a OpenJDK project shortly. The project is
>>>> described in the JEP 122
>>>>
>>>> http://openjdk.java.net/jeps/122
>>>>
>>>> This is not the formal proposal of the project but rather
>>>> a chance to ask questions ahead of that proposal.
More information about the hotspot-dev
mailing list