Code review request: 7199092 NMT: NMT needs to deal overlapped virtual memory ranges
Zhengyu Gu
zhengyu.gu at oracle.com
Thu Oct 18 11:54:16 PDT 2012
The new webrev reflects some suggestions from previous code review,
along with:
1. Caught more cases that virtual memory operations do not go through os
api, which cause mis-matched records that confuse NMT.
2. Fixed a bug that JavaThread releases its per-thread recorder too
later, so that the record could be misplaced in wrong generation.
3. Cleanup. Removed some dead code and unnecessary assertions
4. Fixed racing conditions that could mis-count arena sizes. When
ResourceMark or HandleMark resets, it should reset arena size first,
before release memory chunks.
5. Fixed missing call to record native stack on AttachListener thread.
6. Removed unused Arena constructor.
Webrev: http://cr.openjdk.java.net/~zgu/7199092/webrev.01/
Thanks,
-Zhengyu
On 9/28/2012 4:36 PM, Zhengyu Gu wrote:
> With PermGen removal integration, virtual memory usage patterns have
> changed vs. earlier. NMT can not longer just track reserved memory
> regions, and assume commits and uncommits are performed from the tail
> end.
>
> NMT now tracks committed memory regions, alone with reserved memory
> regions, a virtual memory map is maintained by NMT, and it is reported
> with detail tracking data.
>
> The changes also include some cleanup and enhanced assertion, etc.
>
> CR: http://bugs.sun.com/view_bug.do?bug_id=7199092
> Webrev: http://cr.openjdk.java.net/~zgu/7199092/webrev.00/
>
>
> An example of virtual memory map:
>
> Virtual memory map:
>
> [0x8f17e000 - 0x8f364000] reserved 1944KB for Thread Stack
> from [Thread::record_stack_base_and_size()+0x120]
> [0x8f17e000 - 0x8f364000] committed 1944KB from
> [Thread::record_stack_base_and_size()+0x120]
>
> [0x8f389000 - 0x8f680000] reserved 3036KB for Thread Stack
> from [Thread::record_stack_base_and_size()+0x120]
> [0x8f389000 - 0x8f680000] committed 3036KB from
> [Thread::record_stack_base_and_size()+0x120]
>
> [0x8f7dd000 - 0x8f900000] reserved 1164KB for Thread Stack
> from [Thread::record_stack_base_and_size()+0x120]
> [0x8f7dd000 - 0x8f900000] committed 1164KB from
> [Thread::record_stack_base_and_size()+0x120]
>
> [0x8fa20000 - 0x8faa1000] reserved 516KB for Thread Stack
> from [Thread::record_stack_base_and_size()+0x120]
> [0x8fa20000 - 0x8faa1000] committed 516KB from
> [Thread::record_stack_base_and_size()+0x120]
>
> [0x8fd30000 - 0x914b8000] reserved 24096KB for GC
> from [ReservedSpace::initialize(unsigned int, unsigned int,
> bool, char*, unsigned int, bool)+0x555]
> [0x8fd30000 - 0x914b8000] committed 24096KB from
> [PSVirtualSpace::expand_by(unsigned int)+0x95]
>
> [0x914b8000 - 0x916bc000] reserved 2064KB for Thread Stack
> from [Thread::record_stack_base_and_size()+0x120]
> [0x914b8000 - 0x916bc000] committed 2064KB from
> [Thread::record_stack_base_and_size()+0x120]
>
> [0x916bc000 - 0x91860000] reserved 1680KB for GC
> from [ReservedSpace::initialize(unsigned int, unsigned int,
> bool, char*, unsigned int, bool)+0x555]
> [0x916bc000 - 0x916c7000] committed 44KB from
> [PSVirtualSpace::expand_by(unsigned int)+0x95]
> [0x91764000 - 0x9176f000] committed 44KB from
> [CardTableModRefBS::resize_covered_region(MemRegion)+0xebf]
> [0x9180b000 - 0x91811000] committed 24KB from
> [CardTableModRefBS::resize_covered_region(MemRegion)+0xebf]
> [0x9185f000 - 0x91860000] committed 4KB from
> [CardTableModRefBS::CardTableModRefBS(MemRegion, int)+0x2a0]
>
> [0x91860000 - 0xb1060000] reserved 516096KB for Java Heap
> from [ReservedSpace::initialize(unsigned int, unsigned int,
> bool, char*, unsigned int, bool)+0x190]
> [0x91860000 - 0x92d50000] committed 21440KB from
> [PSVirtualSpace::expand_by(unsigned int)+0x95]
> [0xa6710000 - 0xa7180000] committed 10688KB from
> [PSVirtualSpace::expand_by(unsigned int)+0x95]
> [0xb0e60000 - 0xb0ea9000] committed 292KB from
> [VirtualSpace::initialize(ReservedSpace, unsigned int)+0x3e8]
>
> [0xb1069000 - 0xb71e9000] reserved 99840KB for Code
> from [ReservedSpace::initialize(unsigned int, unsigned int,
> bool, char*, unsigned int, bool)+0x555]
> [0xb1069000 - 0xb1072000] committed 36KB from
> [VirtualSpace::initialize(ReservedSpace, unsigned int)+0x3e8]
> [0xb11e9000 - 0xb1429000] committed 2304KB from
> [VirtualSpace::initialize(ReservedSpace, unsigned int)+0x3e8]
>
> [0xb71e9000 - 0xb77e9000] reserved 6144KB for Class
> from [ReservedSpace::initialize(unsigned int, unsigned int,
> bool, char*, unsigned int, bool)+0x555]
> [0xb71e9000 - 0xb750a000] committed 3204KB from
> [VirtualSpace::initialize(ReservedSpace, unsigned int)+0x3e8]
>
> [0xb77e9000 - 0xb783a000] reserved 324KB for Thread Stack
> from [Thread::record_stack_base_and_size()+0x120]
> [0xb77e9000 - 0xb783a000] committed 324KB from
> [Thread::record_stack_base_and_size()+0x120]
>
> Tests performed:
> - JPRT tests
>
> - Linux 32 bit:
> vm.quick.testlist
> nsk.stress
> runtime.ParallelClassLoading
> nsk.quick-jdi.testlist
> nsk.quick-jvmti.testlist
>
> - Solaris x64
> vm.quick.testlist
> runtime.ParallelClassLoading
> nsk.stress.jck60
>
> - Solaris sparcv9
> vm.quick.testlist
> runtime.ParallelClassLoading
> nsk.stress.jck60
>
>
> Thanks,
>
> -Zhengyu
More information about the hotspot-dev
mailing list