Mercurial > hg > release > heapstats-1.0
changeset 30:57fd757ef0e2
Bug 1644: Can't hook FullGC when G1 Evacuation Failure occurs.
reviewed-by: ykubota
author | Yasumasa Suenaga <suenaga.yasumasa@lab.ntt.co.jp> |
---|---|
date | Wed, 15 Jan 2014 10:10:31 +0900 |
parents | bbf8065fcd37 |
children | 2fd23c59d3ef |
files | agent/ChangeLog agent/src/oopUtil.cpp agent/src/oopUtil.hpp agent/src/overrideFunc.S |
diffstat | 4 files changed, 38 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/agent/ChangeLog Thu Jan 09 13:16:46 2014 +0900 +++ b/agent/ChangeLog Wed Jan 15 10:10:31 2014 +0900 @@ -1,3 +1,7 @@ +2014-01-15 Yasumasa Suenaga <suenaga.yasumasa@lab.ntt.co.jp> + + * Bug 1644: Can't hook FullGC when G1 Evacuation Failure occurs. + 2014-01-09 Yasumasa Suenaga <suenaga.yasumasa@lab.ntt.co.jp> * Bug 1633: Cannot attach HeapStats agent to OpenJDK7 in Fedora20
--- a/agent/src/oopUtil.cpp Thu Jan 09 13:16:46 2014 +0900 +++ b/agent/src/oopUtil.cpp Wed Jan 15 10:10:31 2014 +0900 @@ -138,7 +138,7 @@ /*! * \brief Override function for cleanup event on G1GC. */ -DEFINE_OVERRIDE_FUNC_2(g1Event) +DEFINE_OVERRIDE_FUNC_3(g1Event) /*! * \brief Override function for adjust klassOop. @@ -782,9 +782,12 @@ HOOK_FUNC("_ZTV9CMCleanUp", "_ZN9CMCleanUp7do_voidEv", &g1Event_override_func_0, NULL), - HOOK_FUNC("_ZTV16VM_G1CollectFull", - "_ZN16VM_G1CollectFull4doitEv", - &g1Event_override_func_1, (void*)&callbackForG1FullReturn), + HOOK_FUNC("_ZTV15G1CollectedHeap", + "_ZN15G1CollectedHeap11gc_prologueEb", + &g1Event_override_func_1, NULL), + HOOK_FUNC("_ZTV15G1CollectedHeap", + "_ZN15G1CollectedHeap11gc_epilogueEb", + &g1Event_override_func_2, NULL), HOOK_FUNC_END }; @@ -1452,8 +1455,17 @@ /*! * \brief Callback function for before System.gc() on using G1GC. + * \param isFull [in] Is this event FullGC? */ -extern "C" void callbackForG1Full(void) { +extern "C" void callbackForG1Full(bool isFull) { + + /* This function must be processed when FullGC occurs. + * e.g. System.gc(), evacuation failure, etc... + */ + if(!isFull){ + return; + } + THookFunctionInfo *funcs; SELECT_HOOK_FUNCS(funcs, g1) @@ -1470,8 +1482,17 @@ /*! * \brief Callback function for after System.gc() on using G1GC. + * \param isFull [in] Is this event FullGC? */ -extern "C" void callbackForG1FullReturn(void) { +extern "C" void callbackForG1FullReturn(bool isFull) { + + /* This function must be processed when FullGC occurs. + * e.g. System.gc(), evacuation failure, etc... + */ + if(!isFull){ + return; + } + THookFunctionInfo *funcs; SELECT_HOOK_FUNCS(funcs, g1)
--- a/agent/src/oopUtil.hpp Thu Jan 09 13:16:46 2014 +0900 +++ b/agent/src/oopUtil.hpp Wed Jan 15 10:10:31 2014 +0900 @@ -405,13 +405,15 @@ /*! * \brief Callback function for before System.gc() on using G1GC. + * \param isFull [in] Is this event FullGC? */ -extern "C" void callbackForG1Full(void); +extern "C" void callbackForG1Full(bool isFull); /*! * \brief Callback function for after System.gc() on using G1GC. + * \param isFull [in] Is this event FullGC? */ -extern "C" void callbackForG1FullReturn(void); +extern "C" void callbackForG1FullReturn(bool isFull); /*! * \brief Callback function for WatcherThread.
--- a/agent/src/overrideFunc.S Thu Jan 09 13:16:46 2014 +0900 +++ b/agent/src/overrideFunc.S Wed Jan 15 10:10:31 2014 +0900 @@ -663,8 +663,10 @@ /* CMCleanUp::do_void() */ OVERRIDE_CALLBACK_DEFINE(g1Event, 0, callbackForG1Cleanup); -/* VM_G1CollectFull::doit() */ +/* G1CollectedHeap::gc_prologue() */ OVERRIDE_CALLBACK_DEFINE(g1Event, 1, callbackForG1Full); +/* G1CollectedHeap::gc_epilogue() */ +OVERRIDE_CALLBACK_DEFINE(g1Event, 2, callbackForG1FullReturn); /* for Klass relocation. */