RFR: JDK-8232069: Enable CDS even when UseCompressedClassPointers and/or UseCompressedOops are false

Yumin Qi yumin.qi at oracle.com
Fri Feb 7 00:59:09 UTC 2020


HI, Ioi

   Thanks, will remove the ArrayList.


Yumin

On 2/6/20 4:09 PM, Ioi Lam wrote:
> Hi Yumin,
>
> Looks good! Just one small nit:
>
>  190                 ArrayList<String> testArgs = new 
> ArrayList<String>();
>  191                 testArgs
>  192                     .add("-cp");
>  193                 testArgs
>  194                     .add(helloJar);
>  195                 testArgs
>  196                     .add("-Xlog:cds");
>  197                 testArgs
>  198 .add(getCompressedOopsArg(c.useCompressedOops));
>  199                 testArgs
>  200 .add(getCompressedClassPointersArg(c.useCompressedClassPointers));
>  201                 testArgs
>  202                     .add("Hello");
>  203                 out = TestCommon.exec(helloJar, 
> testArgs.toArray(new String[testArgs.size()]));
>
>
> This can be simplified to
>
> out = TestCommon.exec(helloJar, "-cp", helloJar, "-Xlog:cds",
>                       getCompressedOopsArg(c.useCompressedOops),
> getCompressedClassPointersArg(c.useCompressedClassPointers),
>                       "Hello");
>
> (No need for new webrev).
>
> Thanks
> - Ioi
>
>
> On 2/6/20 2:07 PM, Yumin Qi wrote:
>> Hi, Ioi and all
>>
>>
>>   Forget to mention tests: hs-tier1 - 4 passed.
>>
>>
>> Thanks
>>
>> Yumin
>>
>> On 2/6/20 2:04 PM, Yumin Qi wrote:
>>> Hi, Ioi
>>>
>>>
>>>   Thanks for the review. See answers embedded.
>>>
>>>    New URL: http://cr.openjdk.java.net/~minqi/8232069/webrev-01/
>>>
>>> On 2/5/20 10:34 AM, Ioi Lam wrote:
>>>> Hi Yumin,
>>>>
>>>>
>>>> Looks good. Some nitpicks on the tests:
>>>>
>>>> CommandLineFlagComboNegative.java: the following line is not needed.
>>>>
>>>> import jdk.test.lib.cds.CDSTestUtils.Result;
>>>>
>>> Removed.
>>>>
>>>> TestCombinedCompressedFlags.java: DUMP_NORMAL_MSG doesn't seem to 
>>>> be used by the test.
>>>>
>>> Removed.
>>>
>>> Also changed to use TestCommon.dump/TestCommon.exec which better to 
>>> check dum/run results.
>>>
>>>> DifferentHeapSizes.java: after your change, 
>>>> CDSTestUtils.MSG_COMPRESSION_MUST_BE_USED is no longer used 
>>>> anywhere in the tests. Also, This message is no longer printed by 
>>>> the VM. I think the CDSTestUtils.MSG_COMPRESSION_MUST_BE_USED field 
>>>> should be removed.
>>>>
>>>>
>>> Removed.
>>>> IncompatibleOptions.java: COOPS_DUMP_WARNING can be removed.
>>>>
>>> Removed.
>>>> The check_shared parameter for testExec() should be removed. It's 
>>>> currently used only when expectedToFail == false. However, in all 
>>>> the cases where expectedToFail == false, check_shared is always true.
>>>>
>>>>
>>> Removed.
>>>
>>>> Also, in filemap.cpp, before checking "compressed_oops() != 
>>>> UseCompressedOops ...", I think it will be good to add a log to 
>>>> print out the expected compressed mode. That way if the user gets 
>>>> an error, they can run with -Xlog:cds to find out exactly what the 
>>>> reason is. E.g.
>>>>
>>>>     log_info(cds)("Archive was created with UseCompressedOops = %d, 
>>>> UseCompressedClassPointers = %d",
>>>>                           compressed_oops(), 
>>>> compressed_class_pointers());
>>>>     if (compressed_oops() != UseCompressedOops ...
>>>>
>>> Added.
>>>
>>>
>>> Thanks
>>>
>>> Yumin
>>>
>>>>
>>>> On 2/4/20 6:01 PM, Yumin Qi wrote:
>>>>> Hi,
>>>>>
>>>>>    Please review fix:
>>>>>
>>>>>    Bug: https://bugs.openjdk.java.net/browse/JDK-8232069
>>>>>
>>>>> Webrev:http://cr.openjdk.java.net/~minqi/8232069/webrev/
>>>>>
>>>>>     Description: Currently CDS only works when using compressed 
>>>>> Oops turned on, -XX:+UseCompressedOops (default), the fix is 
>>>>> allowing CDS works with uncompressed oops and uncompressed class 
>>>>> pointers. The contents of InstanceKlass::_fields are depending on 
>>>>> UseCompressedOops and UseCompressedClassPointers on/off. There are 
>>>>> three suggestions as described in bug description:
>>>>>
>>>>> 1. Remember the compression mode at CDS dump time. At runtime, 
>>>>> disable CDS if the compression mode is changed.
>>>>> 2. Same as 1, but save more than one CDS archives in the JDK 
>>>>> image. Choose the appropriate one at start-up
>>>>> 3. Recompute re-compute InstanceKlass::_fields at runtime.
>>>>>
>>>>> The fix takes the first one, storing UseCompressedOops and 
>>>>> UseCompressedClassPointers in shared archive. CDS is only allowed 
>>>>> at runtime if the flags are consistent with the stored versions in 
>>>>> archive.
>>>>>
>>>>>  Testing: hs-tier1-2
>>>>>
>>>>>
>>>>>   Thanks
>>>>>
>>>>>   Yumin
>>>>>
>>>>
>


More information about the hotspot-runtime-dev mailing list