RFR (XL) 8046070 - Class Data Sharing clean up and refactoring, round #2
David Holmes
david.holmes at oracle.com
Thu Aug 7 03:25:35 UTC 2014
A couple of responses inline ...
Cheers,
David
On 7/08/2014 11:25 AM, Ioi Lam wrote:
> Hi David,
>
> Thanks for the reviews. I will incorporate your suggestions. See
> additional comments below:
>
> On 8/6/14, 3:20 AM, David Holmes wrote:
>> Hi Ioi,
>>
>> Continuing ... just a few minor comments
>>
>> Thanks,
>> David
>> ------
>>
>> hotspot/src/share/vm/memory/filemap.cpp
>>
>> Nit: printing string literals doesn't need to use %s ie:
>>
>> + tty->print("%s", "[");
>> + tty->vprint(msg, ap);
>> + tty->print_cr("%s", "]");
>>
>> Should just be:
>>
>> + tty->print("[");
>> + tty->vprint(msg, ap);
>> + tty->print_cr("]");
>>
>> ---
>> Why do we need memset here:
>>
>> 140 FileMapInfo::FileMapInfo() {
>> 141 assert(_current_info == NULL, "must be singleton"); // not
>> thread safe
>> 142 _current_info = this;
>> 143 memset(this, 0, sizeof(FileMapInfo));
>>
> The FileMapInfo is a CHeapObj<mtClass>. Does the "new" operator zero the
> memory? I added the memset just for "extra safety". Maybe I should
> remove it (the original code didn't do memset)?
I would not expect the memory to be zeroed. The fields of the object
should be initialized as appropriate.
>> ---
>> I don't quite follow the name related logic here:
>>
>> 224 strcpy(strptr, name);
>>
> I am adding an assert like this. Do you think this is enough?
No I think static analysis tools may flag this as a "bad usage".
> + assert(strptr + strlen(name) + 1 <= strptr_max, "miscalculated
> buffer size");
> strcpy(strptr, name);
> strptr += name_bytes;
> ...
> EXCEPTION_MARK;
> Array<u8>* arr = MetadataFactory::new_array<u8>(loader_data,
> (bytes + 7)/8, THREAD);
> strptr = (char*)(arr->data());
> + strptr_max = strptr + bytes;
>
>> but strcpy rather than strncpy raises a red-flag.
>>
>> ---
>> What is the role of this:
>>
>> 230 EXCEPTION_MARK;
>>
>> Can new_array post exceptions? If so you need to deal with it else the
>> EXCEPTION_MARK will terminate the VM abruptly.
>>
> At dump time, new_array() will fail if SharedReadOnlySpace or
> SharedReadWriteSpace is too small. But instead of throwing an exception,
> it will print a message about SharedReadOnlySpace or
> SharedReadWriteSpace, and exit the VM.
>
> The EXCEPTION_MARK just indicates we should never return back to this
> function with a pending exception.
Use of EXCEPTION_MARK is always a bit unclear to me.
Thanks,
David
-----------------
>> ---
>>
>> hotspot/src/share/vm/memory/metaspaceShared.cpp
>>
>> 779 // Rewrite and unlink classes.
>> 780 tty->print_cr("Rewriting and linking classes ...");
>>
>> Is it linking or unlinking?
>>
> linking. I will fix comment.
>> ---
>>
>> hotspot/src/share/vm/oops/instanceKlass.hpp
>>
>> + // was loaded. For archived classes, this filed is either NULL
>> (for system
>>
>> Typo: filed
>>
>> + // needed after afterwards.
>>
>> Typo: after after
>>
>> ----
>>
>> test/testlibrary/com/oracle/java/testlibrary/BuildHelper.java
>>
>> File has the wrong copyright header.
>>
>>
>> On 29/07/2014 9:09 AM, Ioi Lam wrote:
>>> Hi Folks,
>>>
>>> Please review the following clean up and refactoring of the CDS code,
>>> for JDK9
>>>
>>> http://cr.openjdk.java.net/~iklam/8046070-cds-cleanup-v2/
>>> https://bugs.openjdk.java.net/browse/JDK-8046070
>>>
>>> Summary of fix:
>>>
>>> Clean up and refactor the Class Data Sharing (CDS) code, including:
>>>
>>> + Improve archive integrity checking
>>> + Support bytecode verification during archive dumping time
>>> + Allow the user to configure the CDS class list and archive file.
>>> + Allow future extension of the CDS class loading mechanism.
>>>
>>> Tests:
>>>
>>> JPRT
>>> UTE (vm.runtime.testlist, vm.quick.testlist,
>>> vm.parallel_class_loading.testlist)
>>> Various adhoc SQE tests on Aurora
>>> JCK
>>>
>>> Thanks
>>> - Ioi
>
More information about the core-libs-dev
mailing list