Project proposal: Remove the Permanent Generation
Jon Masamitsu
jon.masamitsu at oracle.com
Thu May 31 09:08:17 PDT 2012
On 05/31/12 00:08, Bengt Rutisson wrote:
>
> 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?
I've removed it. It's easy enough to add back if needed.
>
>
> ConcurrentMarkSweepGeneration::update_counters(size_t used)
> It looks like this method lost its implementation. Was this intentional?
That looks like a mistake. I'll add it back.
>
>
> 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.
I have a repository where this is replaced by _metadata_GC_threshold
>
>
> 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.
PermSize, MaxPermSize, MinPermHeapExpansion, MaxPermHeapExpansion will
be replaced.
I think we keep CMSIsTooFullPercentage. I think this is used to decide
to unload classes
even if CMSClassUnloadingEnabled is false.
The others are obsolete and will be added to the ObsoleteFlag in
arguments.cpp
Jon
>
>
> 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