On 11/2/15 1:57 PM, Ioi Lam wrote:


On 10/30/15 1:31 PM, Coleen Phillimore wrote:


On 10/30/15 4:18 PM, Karen Kinnear wrote:
Coleen,

Question for you below please ...
On Oct 30, 2015, at 3:44 PM, Coleen Phillimore <coleen.phillim...@oracle.com> wrote:


Hi Ioi,
This is a manageable code change.

http://cr.openjdk.java.net/~iklam/8140802-cds-refactoring.v01/hotspot/src/share/vm/classfile/classListParser.hpp.html

You forward declare Klass* but don't use it in this header file.
Also can you add a comment to #endif to say what it's endifing. ie. // SHARE_VM_MEMORY_CLASSLISTPARSER_HPP

http://cr.openjdk.java.net/~iklam/8140802-cds-refactoring.v01/hotspot/src/share/vm/classfile/classLoaderExt.cpp.html

33 TempNewSymbol class_name_symbol = SymbolTable::new_permanent_symbol(parser->current_class_name(), THREAD);

This doesn't make sense. If you want a permanent symbol, it doesn't need to get un-reference counted with the TempNewSymbol destructor.
Thank you for chiming in on this one - I wanted your opinion here. (this code used to be in MetaspaceShared::
preload_and_dump and I think was wrong there as well).
My understanding is that it is a TempNewSymbol that he wants, so he should call SymbolTable::new_symbol. The code creates a (temporary) symbol for the name, and then calls SystemDictionary::resolve_or_null, which if it succeeds will walk through the classFileParser which will create a permanent symbol for the class name, via the symbol_alloc_batch handling. That would be consistent with the TempNewSymbol call in SystemDictionary::resolve_or_null as well as in parse_stream - all places dealing with the class name
before doing classfile parsing.

Does that make sense?

Yes, this makes sense. The symbol shouldn't be permanent. Ioi can test this by putting a strange long name in the classlist file and make sure it doesn't make it out to the shared archive, since I think -Xshare:dump cleans out the SymbolTable before dumping.

After changing to use new_symbol instead of new_permanent_symbol, I ran -Xshare:dump:

$ java -Xshare:dump
Preload Warning: Cannot find sun/text/normalizer/UnicodeMatcher
...
total   :  13063134 [100.0% of total] out of  27385856 bytes [47.7% used]

$ strings images/jdk/lib/i386/hotspot/classes.jsa | grep sun/text/normalizer/UnicodeMatcher
sun/text/normalizer/UnicodeMatcher

So the unused symbols are not removed. Anyway, I have filed a separate issue for this: https://bugs.openjdk.java.net/browse/JDK-8141207

I just realized that the reason that it doesn't clean out unused symbols is that it would leave gaps in the Metaspace memory where they're stored, so there wouldn't be much point.

Coleen


Thanks
- Ioi


Coleen

thanks,
Karen

http://cr.openjdk.java.net/~iklam/8140802-cds-refactoring.v01/hotspot/src/share/vm/classfile/systemDictionary.cpp.udiff.html

+    // Make sure we have an entry in the SystemDictionary on success


This assert code is a copy of some code elsewhere. Can you make it a function that they boh can call?
Can you also comment the raw #endif's to what they're endifing?

Otherwise, this looks okay.

Coleen


On 10/30/15 1:00 PM, Ioi Lam wrote:
Please review the following fix:

http://cr.openjdk.java.net/~iklam/8140802-cds-refactoring.v01/

Bug: Clean up and refactor of class loading code for CDS

    https://bugs.openjdk.java.net/browse/JDK-8140802

Summary of fix:

    We need to clean up and refactor the class loading code in order
    to support CDS in JDK9

    [1] Remove code that has been made obsolete by the module changes
        (such as supporting code used for meta-index file)
    [2] Add new whitebox API to be used by CDS-related tests.
[3] Refactor the parsing of classlist files for future enhancements. [4] Add new APIs in the class loading code to support Oracle CDS enhancements.

Tests:

    JPRT
    RBT - with same set of tests as hs-rt nightly

Thanks
- Ioi



Reply via email to