RFR: JDK-8318566: Heap walking functions should not use FilteredFieldStream
Alex Menkov
amenkov at openjdk.org
Thu Feb 1 18:59:02 UTC 2024
On Wed, 31 Jan 2024 23:24:22 GMT, Chris Plummer <cjplummer at openjdk.org> wrote:
>> FilteredFieldStream used by heap walking functions to iterate through klass/superclasses/interfaces fields are known to have poor performance (see [JDK-8317692](https://bugs.openjdk.org/browse/JDK-8317692) for details).
>> Heap walking API implementation is the last user of the klasses.
>> The fix reworks iteration through klass/superclasses/interfaces fields and drops FilteredFieldStream-related code.
>> Additionally removed/updated includes of reflectionUtils.hpp.
>>
>> Testing:
>> - tier1..4;
>> - test/hotspot/jtreg/vmTestbase/nsk/jvmti (contains tests for different heap walking functions);
>> - new test from #17580 (now the test runs several times faster).
>
> src/hotspot/share/prims/jvmtiTagMap.cpp line 453:
>
>> 451: InstanceKlass* super_klass = ik->java_super();
>> 452: if (super_klass != nullptr) {
>> 453: start_index += add_instance_fields(super_klass, start_index);
>
> Does hotspot have any rules against potentially very deep recursion that can overflow the stack?
I looked at hotspot code and don't see "implementation limits" for level of inheritance, so it looks like a valid concern.
Need to reimplement this without recursion.
-------------
PR Review Comment: https://git.openjdk.org/jdk/pull/17661#discussion_r1474976858
More information about the serviceability-dev
mailing list