Contents | Prev | Next
J2ME CDC 1.0
Porting Guide

The C Stack Check

Table of Contents


Introduction

The usage of the native stack in CVM can overrun when a function has a recursive invocation such as the bytecode interpreter loop, class loading, and class verifier. Running CVM on target devices that have less memory available and the underlying OS may not have MMU support needs to take into account native stack management to avoid stack overflow situation.

CVM cannot take the same approach as the JDK does, in which large memory area is reserved for the native stack. To ensure system robustness against C stack overflow situations caused by tight C stacks, an extensive static analysis of the native codes in CVM and the supporting libraries is performed. A dynamic C stack check is introduced at the points where recursive function calls can happen. As a result, CVM guarantees that a C stack overflow failure is detected so that a StackOverflowError is thrown when a C stack check notifies that insufficient native stack space is available and a potential memory corruption caused by native stack overflow is eliminated.

CVM native codes are statically analyzed to identify where recursive call cycles occur, sum up stack use in any given call cycles, and eliminate call cycles as much as possible. As a result, the worst case of stack usage called stack redzone required by the recursive function calls is used by a redzone check in the C stack check routine called CVMCStackCheckSize. The C stack check codes on a cycle determine whether another invocation of the cycle can continue execution with sufficient native stack size left. This redzone (worst case of stack usage) size is used to find out the available stack size for next function invocation in the cycle at execution time. When the native stack is insufficient to continue execution, CVM throws a StackOverflowError.


Calculate C stack redzones for C stack check in CVM

The CVM stack usage is statically analyzed to identify the recursive functions and calculate the worst case C stack redzone values for each recursive function. All CVM programs written in C are first compiled into platform-specific assembly codes by the GNU C compiler. All indirect function calls, such as JNI function invocation through the function pointers and other function invocations through function pointers in CVM programs, are resolved and mapped into direct function calls to assist the static stack analysis. The mapping information can be found in file impllist and file stublist.

Note: In stublist, a function named CVM_worst_case_psuedo_method is a link between CVMjniInvokeNative and all of the JNI functions in the JNI vector table and the JVMDI vector table. It is also a link between ansiJavaMain and all of the JNI functions defined in the JNI vector table for the code outside the VM calling into JNI functions. The worse case stack usage for a JNI call cycle from calling CVM_worst_case_psuedo_method to a JNI call is assumed to be 3K bytes, and the same is true for all call cycles that end with OS and C library functions.

There are nine functions that have recursive invocation paths.

 (1)    CVMgcUnsafeExecuteJavaMethod
 (2)    CVMimplementsInterface
 (3)    classlookup:CVMclassLookupFromClassLoader
 (4)    CVMclassLink
 (5)    utils:CVMCstackDummy2CVMformatStringVaList
 (6)    utils:CVMCstackDummy2CVMconsolePrintf
 (7)    utils:CVMCstackDummy2CVMobjectGetHashSafe
 (8)    verifycode:CVMCstackDummy2merge_fullinfo_types
 (9)    CVMsignalErrorVaLisT
Three recursions occurring in the function CVMformatStringVaList from file utils.c detected by the static stack analysis have at most one-level deep recursion which terminates itself at the second invocation of CVMformatStringVaList. To obtain an accurate stack size required to invoke CVMformatStringVaList another time, a dummy function is temporarily created for each recursion and is called at the place that needs to check stack overflow before going into the loop to terminate itself. Once the stack requirement is obtained by the static stack analysis, each dummy function invocation is removed and a runtime C stack check is added in the place that invokes the dummy function. The three dummy functions are statically defined in utils.c and are invoked in CVMformatStringVaList as below:
 (1)    utils:CVMCstackDummy2CVMformatStringVaList
 (2)    utils:CVMCstackDummy2CVMconsolePrintf
 (3)    utils:CVMCstackDummy2CVMobjectGetHashSafe
The self recursive invocation of merge_fullinfo_types in file verifycode.c has at most one-level deep recursion. A dummy function called CVMCstackDummy2merge_fullinfo_types is temporarily created and invoked at the place that needs to check stack overflow before entering the loop and terminating itself in that call path so that the stack redzone can be calculated accurately. Once the stack requirement is obtained by the static stack analysis, this dummy function invocation is removed and a runtime C stack check is added in the place that invokes the dummy function. The dummy function is statically defined in file verifycode.c and is invoked in merge_fullinfo_types as below:
 (1)    verifycode:CVMCstackDummy2merge_fullinfo_types

C stack redzone checks in CVM

Once the nine recursive functions are identified by the tool, eight stack redzone values are calculated based on the given function call path of each recursion that consumes the most stack usage. The C stack redzone values are used by the C stack check routines in CVM to detect a C stack overflow failure before making a recursive function invocation. The following table shows each C stack redzone macro used by the C stack check in its corresponding recursive function.

CVM-Function			C-Stack-Redzone-Macro
------------------------------------------------------------------------------------
CVMgcUnsafeExecuteJavaMethod	CVM_REDZONE_ILOOP
CVMimplementsInterface		CVM_REDZONE_CVMimplementsInterface
CVMformatStringVaList		CVM_REDZONE_CVMCstackCVMpc2string
CVMformatStringVaList		CVM_REDZONE_CVMCstackCVMID_objectGetClassAndHashSafe  
CVMclassLookupFromClassLoader   CVM_REDZONE_CVMclassLookupFromClassLoader            
CVMclassLink			CVM_REDZONE_CVMclassLink                            
merge_fullinfo_to_types		CVM_REDZONE_CVMCstackmerge_fullinfo_to_types       

C stack redzone values

There are eight stack redzones used by the stack check routines in CVM as below:

C-Stack-Redzone-Macro                                   Stack-Redzone-Value
----------------------------------------------------------------------------
CVM_REDZONE_ILOOP                                       11592 (11.32K bytes)
CVM_REDZONE_CVMimplementsInterface                       4752 ( 5.14K bytes)
CVM_REDZONE_CVMCstackCVMpc2string                        4752 ( 5.14K bytes)
CVM_REDZONE_CVMCstackCVMID_objectGetClassAndHashSafe     5392 ( 5.27K bytes)
CVM_REDZONE_CVMclassLookupFromClassLoader               13500 (13.18K bytes)
CVM_REDZONE_CVMclassLink                                 7456 ( 7.28K bytes)
CVM_REDZONE_CVMCstackmerge_fullinfo_to_types             5800 ( 5.66K bytes)
CVM_REDZONE_CVMsignalErrorVaList             		 8400 ( 8.20K bytes)

List the worst case of stack usage chain that affects the C stack redzone calculation

The worst case of stack usage chains that are used to calculate the stack redzones can vary greatly on different platforms. Sparc, a RISC platform, uses a minimum 112 bytes of frame allocation in a frame even if no local variables are declared (in some special case, code optimizer can make this 0). Whereas, many CISC platforms would only use less stack space in this case. Therefore, stack usage calculated based on Sparc code tend to be larger than CISC platforms.

The worst stack usage chain that contains the stack size of each function and the accumulated stack size of the call path is not necessarily one of the recursive paths. It can be a stack trace of calling a recursive function and terminating at an OS or C library function, a stack trace of calling a recursive function and terminating at a CVM function that ends itself, or a stack trace of calling a self-recursive function. The static stack analysis checks all the call paths and comes out the worst stack usage of each recursive function call cycle. All the worst C stack usage call chains provided in this documentation terminate at a library function strncpy.

The static stack analysis looks into the worst case of the stack usage chain of each recursive function cycle and identifies several functions that use more stack frame space than other functions occurring in the stack usage chain. The functions that consume a large chunk of stack space are optimized by replacing the static allocation of locals with a dynamically allocated and shared buffer to reduce the stack usage of the frame allocation. Other optimizations summaried by the static stack analysis include removing a recursion or a potentially infinite recursion out of the recursive functions to reduce the stack space usage.

A list of the worst stack usage chains that trace function call paths that consume the stack most in each recursive function is displayed below.

The first number is the accumulated stack usage in bytes to execute functions from bottom up to the point that excludes the stack size of the current function specified in the same line. The second number is the stack frame size of the function following the second colon.


The Worst C Stack Usage Chain in Interpreter Loop

Some worst cases of stack consumption occurring in the interpreter loop that have a call path from CVMgcUnsafeExecuteJavaMethod to a C library function such as strncpy are given below.

> stacktrace CVMgcUnsafeExecuteJavaMethod strncpy
 8848   : 328   : CVMgcUnsafeExecuteJavaMethod
 8520   : 112   : CVMjniInvokeNative
 8408   : 3072  : CVM_worst_case_psuedo_method
 5336   : 128   : CVMjniToReflectedMethod
 5208   : 112   : CVMreflectMethodBlockToNewJavaMethod
 5096   : 224   : CVMreflectNewJavaLangReflectMethod
 4872   : 376   : CVMnewStringUTF
 4496   : 144   : CVMnewString
 4352   : 136   : CVMgcAllocNewInstance
 4216   : 128   : CVMjniCallStaticVoidMethod
 4088   : 184   : jni_impl:CVMjniInvoke
 3904   : 136   : CVMjniExceptionDescribe
 3768   : 112   : CVMjniGetMethodID
 3656   : 136   : jni_impl:CVMjniGetXMethodID
 3520   : 112   : CVMclassInit
 3408   : 128   : classinitialize:CVMprivateClassInit
 3280   : 128   : CVMjniCallVoidMethod
 3152   : 184   : jni_impl:CVMjniInvoke
 2968   : 136   : CVMjniExceptionDescribe
 2832   : 112   : CVMjniGetMethodID
 2720   : 136   : jni_impl:CVMjniGetXMethodID
 2584   : 128   : CVMtypeidNewMethodIDFromNameAndSig
 2456   : 240   : typeid:referenceMethodSignature
 2216   : 144   : typeid:referenceFieldSignature
 2072   : 120   : typeid:referenceClassName
 1952   : 144   : typeid:lookupClass
 1808   : 120   : typeid:findFreeScalarEntry
 1688   : 136   : typeid:findFreeTableEntry
 1552   : 120   : typeid:unlockThrowOutOfMemoryError
 1432   : 112   : CVMsysMutexUnlock
 1320   : 376   : CVMconsolePrintf
 944    : 304   : CVMformatStringVaList
 640    : 168   : CVMtypeidMethodTypeToCString
 472    : 112   : CVMtypeidFieldTypeToCString
 360    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 232    : 120   : typeid:conditionalPutstring
 112    : 112   : CVMCstrncpyStub
 0      : ?(0)  : strncpy

> stacktrace CVMgcUnsafeExecuteJavaMethod .umul
 8744   : 328   : CVMgcUnsafeExecuteJavaMethod
 8416   : 112   : CVMjniInvokeNative
 8304   : 3072  : CVM_worst_case_psuedo_method
 5232   : 128   : CVMjniToReflectedMethod
 5104   : 112   : CVMreflectMethodBlockToNewJavaMethod
 4992   : 224   : CVMreflectNewJavaLangReflectMethod
 4768   : 376   : CVMnewStringUTF
 4392   : 144   : CVMnewString
 4248   : 136   : CVMgcAllocNewInstance
 4112   : 128   : CVMjniCallStaticVoidMethod
 3984   : 184   : jni_impl:CVMjniInvoke
 3800   : 136   : CVMjniExceptionDescribe
 3664   : 112   : CVMjniGetMethodID
 3552   : 136   : jni_impl:CVMjniGetXMethodID
 3416   : 112   : CVMclassInit
 3304   : 128   : classinitialize:CVMprivateClassInit
 3176   : 128   : CVMjniCallVoidMethod
 3048   : 184   : jni_impl:CVMjniInvoke
 2864   : 136   : CVMjniExceptionDescribe
 2728   : 112   : CVMjniGetMethodID
 2616   : 136   : jni_impl:CVMjniGetXMethodID
 2480   : 128   : CVMtypeidNewMethodIDFromNameAndSig
 2352   : 240   : typeid:referenceMethodSignature
 2112   : 144   : typeid:referenceFieldSignature
 1968   : 120   : typeid:referenceClassName
 1848   : 144   : typeid:lookupClass
 1704   : 120   : typeid:findFreeScalarEntry
 1584   : 136   : typeid:findFreeTableEntry
 1448   : 120   : typeid:unlockThrowOutOfMemoryError
 1328   : 112   : CVMsysMutexUnlock
 1216   : 376   : CVMconsolePrintf
 840    : 304   : CVMformatStringVaList
 536    : 168   : CVMtypeidMethodTypeToCString
 368    : 128   : CVMtypeidGetSignatureIterator
 240    : 120   : CVMtypeidGetTerseSignatureIterator
 120    : 120   : typeid:indexSegmentedTable
 0      : ?(0)  : .umul

> stacktrace CVMgcUnsafeExecuteJavaMethod strlen
 8728   : 328   : CVMgcUnsafeExecuteJavaMethod
 8400   : 112   : CVMjniInvokeNative
 8288   : 3072  : CVM_worst_case_psuedo_method
 5216   : 128   : CVMjniToReflectedMethod
 5088   : 112   : CVMreflectMethodBlockToNewJavaMethod
 4976   : 224   : CVMreflectNewJavaLangReflectMethod
 4752   : 376   : CVMnewStringUTF
 4376   : 144   : CVMnewString
 4232   : 136   : CVMgcAllocNewInstance
 4096   : 128   : CVMjniCallStaticVoidMethod
 3968   : 184   : jni_impl:CVMjniInvoke
 3784   : 136   : CVMjniExceptionDescribe
 3648   : 112   : CVMjniGetMethodID
 3536   : 136   : jni_impl:CVMjniGetXMethodID
 3400   : 112   : CVMclassInit
 3288   : 128   : classinitialize:CVMprivateClassInit
 3160   : 128   : CVMjniCallVoidMethod
 3032   : 184   : jni_impl:CVMjniInvoke
 2848   : 136   : CVMjniExceptionDescribe
 2712   : 112   : CVMjniGetMethodID
 2600   : 136   : jni_impl:CVMjniGetXMethodID
 2464   : 128   : CVMtypeidNewMethodIDFromNameAndSig
 2336   : 240   : typeid:referenceMethodSignature
 2096   : 144   : typeid:referenceFieldSignature
 1952   : 120   : typeid:referenceClassName
 1832   : 144   : typeid:lookupClass
 1688   : 120   : typeid:findFreeScalarEntry
 1568   : 136   : typeid:findFreeTableEntry
 1432   : 120   : typeid:unlockThrowOutOfMemoryError
 1312   : 112   : CVMsysMutexUnlock
 1200   : 376   : CVMconsolePrintf
 824    : 304   : CVMformatStringVaList
 520    : 168   : CVMtypeidMethodTypeToCString
 352    : 112   : CVMtypeidFieldTypeToCString
 240    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 112    : 112   : CVMCstrlenStub
 0      : ?(0)  : strlen

> stacktrace CVMgcUnsafeExecuteJavaMethod free
 8320   : 328   : CVMgcUnsafeExecuteJavaMethod
 7992   : 112   : CVMjniInvokeNative
 7880   : 3072  : CVM_worst_case_psuedo_method
 4808   : 128   : CVMjniToReflectedMethod
 4680   : 112   : CVMreflectMethodBlockToNewJavaMethod
 4568   : 224   : CVMreflectNewJavaLangReflectMethod
 4344   : 376   : CVMnewStringUTF
 3968   : 144   : CVMnewString
 3824   : 136   : CVMgcAllocNewInstance
 3688   : 128   : CVMjniCallStaticVoidMethod
 3560   : 184   : jni_impl:CVMjniInvoke
 3376   : 136   : CVMjniExceptionDescribe
 3240   : 112   : CVMjniGetMethodID
 3128   : 136   : jni_impl:CVMjniGetXMethodID
 2992   : 112   : CVMclassInit
 2880   : 128   : classinitialize:CVMprivateClassInit
 2752   : 128   : CVMjniCallVoidMethod
 2624   : 184   : jni_impl:CVMjniInvoke
 2440   : 136   : CVMjniExceptionDescribe
 2304   : 112   : CVMjniGetMethodID
 2192   : 136   : jni_impl:CVMjniGetXMethodID
 2056   : 128   : CVMtypeidNewMethodIDFromNameAndSig
 1928   : 240   : typeid:referenceMethodSignature
 1688   : 144   : typeid:referenceFieldSignature
 1544   : 120   : typeid:referenceClassName
 1424   : 144   : typeid:lookupClass
 1280   : 120   : typeid:findFreeScalarEntry
 1160   : 136   : typeid:findFreeTableEntry
 1024   : 120   : typeid:unlockThrowOutOfMemoryError
 904    : 112   : CVMsysMutexUnlock
 792    : 376   : CVMconsolePrintf
 416    : 304   : CVMformatStringVaList
 112    : 112   : CVMCfreeStub
 0      : ?(0)  : free

> stacktrace CVMgcUnsafeExecuteJavaMethod sprintf
 8208   : 328   : CVMgcUnsafeExecuteJavaMethod
 7880   : 112   : CVMjniInvokeNative
 7768   : 3072  : CVM_worst_case_psuedo_method
 4696   : 128   : CVMjniToReflectedMethod
 4568   : 112   : CVMreflectMethodBlockToNewJavaMethod
 4456   : 224   : CVMreflectNewJavaLangReflectMethod
 4232   : 376   : CVMnewStringUTF
 3856   : 144   : CVMnewString
 3712   : 136   : CVMgcAllocNewInstance
 3576   : 128   : CVMjniCallStaticVoidMethod
 3448   : 184   : jni_impl:CVMjniInvoke
 3264   : 136   : CVMjniExceptionDescribe
 3128   : 112   : CVMjniGetMethodID
 3016   : 136   : jni_impl:CVMjniGetXMethodID
 2880   : 112   : CVMclassInit
 2768   : 128   : classinitialize:CVMprivateClassInit
 2640   : 128   : CVMjniCallVoidMethod
 2512   : 184   : jni_impl:CVMjniInvoke
 2328   : 136   : CVMjniExceptionDescribe
 2192   : 112   : CVMjniGetMethodID
 2080   : 136   : jni_impl:CVMjniGetXMethodID
 1944   : 128   : CVMtypeidNewMethodIDFromNameAndSig
 1816   : 240   : typeid:referenceMethodSignature
 1576   : 144   : typeid:referenceFieldSignature
 1432   : 120   : typeid:referenceClassName
 1312   : 144   : typeid:lookupClass
 1168   : 120   : typeid:findFreeScalarEntry
 1048   : 136   : typeid:findFreeTableEntry
 912    : 120   : typeid:unlockThrowOutOfMemoryError
 792    : 112   : CVMsysMutexUnlock
 680    : 376   : CVMconsolePrintf
 304    : 304   : CVMformatStringVaList
 0      : ?(0)  : sprintf

> stacktrace CVMgcUnsafeExecuteJavaMethod fflush
 7904   : 328   : CVMgcUnsafeExecuteJavaMethod
 7576   : 112   : CVMjniInvokeNative
 7464   : 3072  : CVM_worst_case_psuedo_method
 4392   : 128   : CVMjniToReflectedMethod
 4264   : 112   : CVMreflectMethodBlockToNewJavaMethod
 4152   : 224   : CVMreflectNewJavaLangReflectMethod
 3928   : 376   : CVMnewStringUTF
 3552   : 144   : CVMnewString
 3408   : 136   : CVMgcAllocNewInstance
 3272   : 128   : CVMjniCallStaticVoidMethod
 3144   : 184   : jni_impl:CVMjniInvoke
 2960   : 136   : CVMjniExceptionDescribe
 2824   : 112   : CVMjniGetMethodID
 2712   : 136   : jni_impl:CVMjniGetXMethodID
 2576   : 112   : CVMclassInit
 2464   : 128   : classinitialize:CVMprivateClassInit
 2336   : 128   : CVMjniCallVoidMethod
 2208   : 184   : jni_impl:CVMjniInvoke
 2024   : 136   : CVMjniExceptionDescribe
 1888   : 112   : CVMjniGetMethodID
 1776   : 136   : jni_impl:CVMjniGetXMethodID
 1640   : 128   : CVMtypeidNewMethodIDFromNameAndSig
 1512   : 240   : typeid:referenceMethodSignature
 1272   : 144   : typeid:referenceFieldSignature
 1128   : 120   : typeid:referenceClassName
 1008   : 144   : typeid:lookupClass
 864    : 120   : typeid:findFreeScalarEntry
 744    : 136   : typeid:findFreeTableEntry
 608    : 120   : typeid:unlockThrowOutOfMemoryError
 488    : 112   : CVMsysMutexUnlock
 376    : 376   : CVMconsolePrintf
 0      : ?(0)  : fflush

> stacktrace CVMgcUnsafeExecuteJavaMethod .rem
 7424   : 328   : CVMgcUnsafeExecuteJavaMethod
 7096   : 112   : CVMjniInvokeNative
 6984   : 3072  : CVM_worst_case_psuedo_method
 3912   : 128   : CVMjniToReflectedMethod
 3784   : 112   : CVMreflectMethodBlockToNewJavaMethod
 3672   : 224   : CVMreflectNewJavaLangReflectMethod
 3448   : 376   : CVMnewStringUTF
 3072   : 144   : CVMnewString
 2928   : 136   : CVMgcAllocNewInstance
 2792   : 128   : CVMjniCallStaticVoidMethod
 2664   : 184   : jni_impl:CVMjniInvoke
 2480   : 136   : CVMjniExceptionDescribe
 2344   : 112   : CVMjniGetMethodID
 2232   : 136   : jni_impl:CVMjniGetXMethodID
 2096   : 112   : CVMclassInit
 1984   : 128   : classinitialize:CVMprivateClassInit
 1856   : 128   : CVMjniCallVoidMethod
 1728   : 184   : jni_impl:CVMjniInvoke
 1544   : 136   : CVMjniExceptionDescribe
 1408   : 128   : CVMjniGetObjectClass
 1280   : 120   : CVMjniNewLocalRef
 1160   : 144   : CVMjniCreateLocalRef
 1016   : 112   : CVMjniFatalError
 904    : 120   : CVMdumpStack
 784    : 128   : stacks:CVMdumpFrames
 656    : 392   : CVMdumpFrame
 264    : 128   : CVMpc2string
 136    : 136   : interpreter:CVMadddec
 0      : ?(0)  : .rem

The Worst C Stack Usage Chain in CVMimplementsInterface Routine

Some worst cases of stack consumption occurring in the routine that compares each subclass class block in the class hierarchy to the interface class block have a call path from CVMimplementsInterface to a C library function such as strncpy.

> stacktrace CVMimplementsInterface strncpy
 1800   : 120   : CVMimplementsInterface
 1680   : 112   : CVMCstackCheckSize
 1568   : 136   : CVMcsRendezvous
 1432   : 112   : CVMsysMutexLock
 1320   : 376   : CVMconsolePrintf
 944    : 304   : CVMformatStringVaList
 640    : 168   : CVMtypeidMethodTypeToCString
 472    : 112   : CVMtypeidFieldTypeToCString
 360    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 232    : 120   : typeid:conditionalPutstring
 112    : 112   : CVMCstrncpyStub
 0      : ?(0)  : strncpy

> stacktrace CVMimplementsInterface .umul
 1696   : 120   : CVMimplementsInterface
 1576   : 112   : CVMCstackCheckSize
 1464   : 136   : CVMcsRendezvous
 1328   : 112   : CVMsysMutexLock
 1216   : 376   : CVMconsolePrintf
 840    : 304   : CVMformatStringVaList
 536    : 168   : CVMtypeidMethodTypeToCString
 368    : 128   : CVMtypeidGetSignatureIterator
 240    : 120   : CVMtypeidGetTerseSignatureIterator
 120    : 120   : typeid:indexSegmentedTable
 0      : ?(0)  : .umul

> stacktrace CVMimplementsInterface strlen
 1680   : 120   : CVMimplementsInterface
 1560   : 112   : CVMCstackCheckSize
 1448   : 136   : CVMcsRendezvous
 1312   : 112   : CVMsysMutexLock
 1200   : 376   : CVMconsolePrintf
 824    : 304   : CVMformatStringVaList
 520    : 168   : CVMtypeidMethodTypeToCString
 352    : 112   : CVMtypeidFieldTypeToCString
 240    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 112    : 112   : CVMCstrlenStub
 0      : ?(0)  : strlen

> stacktrace CVMimplementsInterface free
 1272   : 120   : CVMimplementsInterface
 1152   : 112   : CVMCstackCheckSize
 1040   : 136   : CVMcsRendezvous
 904    : 112   : CVMsysMutexLock
 792    : 376   : CVMconsolePrintf
 416    : 304   : CVMformatStringVaList
 112    : 112   : CVMCfreeStub
 0      : ?(0)  : free

> stacktrace CVMimplementsInterface sprintf
 1160   : 120   : CVMimplementsInterface
 1040   : 112   : CVMCstackCheckSize
 928    : 136   : CVMcsRendezvous
 792    : 112   : CVMsysMutexLock
 680    : 376   : CVMconsolePrintf
 304    : 304   : CVMformatStringVaList
 0      : ?(0)  : sprintf

> stacktrace CVMimplementsInterface pthread_cond_wait
 936    : 120   : CVMimplementsInterface
 816    : 112   : CVMCstackCheckSize
 704    : 136   : CVMcsRendezvous
 568    : 128   : CVMsysMutexWait
 440    : 128   : CVMreentrantMutexWait
 312    : 144   : CVMcondvarWait
 168    : 168   : POSIXcondvarWait
 0      : ?(0)  : pthread_cond_wait

The Worst C Stack Usage Chain in Class Loader at Class Lookup

Some worst cases of stack consumption occurs in class loader that have a call path from CVMclassLookupFromClassLoader to a C library function such as strncpy are given below.

> stacktrace classlookup:CVMclassLookupFromClassLoader strncpy
 5968   : 152   : classlookup:CVMclassLookupFromClassLoader
 5816   : 136   : CVMclassLoadClass
 5680   : 136   : classload:CVMclassLoadSystemClass
 5544   : 144   : classload:CVMclassLoadFromFile
 5400   : 672   : CVMclassCreateInternalClass
 4728   : 168   : classcreate:CVMreadConstantPool
 4560   : 376   : CVMinternUTF
 4184   : 136   : CVMgcAllocNewInstance
 4048   : 136   : CVMgcimplAllocObject
 3912   : 120   : CVMgcStopTheWorldAndGC
 3792   : 128   : gc_common:CVMgcStopTheWorldAndGCSafe
 3664   : 144   : CVMgcimplDoGC
 3520   : 112   : gen_semispace:CVMgenSemispaceCollect
 3408   : 144   : gen_semispace:CVMgenSemispaceCollectFull
 3264   : 112   : CVMgcProcessSpecialWithLivenessInfo
 3152   : 136   : CVMweakrefProcessNonStrong
 3016   : 128   : weakrefs:CVMweakrefHandlePendingQueue
 2888   : 120   : weakrefs:CVMweakrefIterateQueue
 2768   : 136   : weakrefs:CVMweakrefDiscoveredQueueCallback
 2632   : 128   : gen_semispace:CVMgenSemispaceScanTransitively
 2504   : 112   : gen_semispace:CVMgenSemispaceFollowRootsFull
 2392   : 136   : gen_semispace:CVMgenSemispaceFollowRootsWithBlackener
 2256   : 120   : gen_semispace:CVMgenSemispaceScanPromotedPointers
 2136   : 168   : gen_semispace:scanObjectsInRangeFull
 1968   : 152   : gen_semispace:CVMgenSemispaceBlackenObjectFull
 1816   : 112   : gen_semispace:CVMgenSemispaceFilteredGrayObject
 1704   : 120   : gen_semispace:CVMgenSemispaceGrayObject
 1584   : 136   : gen_semispace:CVMgenSemispaceForwardOrPromoteObject
 1448   : 128   : gen_semispace:CVMgenSemispacePromoteInto
 1320   : 376   : CVMconsolePrintf
 944    : 304   : CVMformatStringVaList
 640    : 168   : CVMtypeidMethodTypeToCString
 472    : 112   : CVMtypeidFieldTypeToCString
 360    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 232    : 120   : typeid:conditionalPutstring
 112    : 112   : CVMCstrncpyStub
 0      : ?(0)  : strncpy

> stacktrace classlookup:CVMclassLookupFromClassLoader .umul
 5864   : 152   : classlookup:CVMclassLookupFromClassLoader
 5712   : 136   : CVMclassLoadClass
 5576   : 136   : classload:CVMclassLoadSystemClass
 5440   : 144   : classload:CVMclassLoadFromFile
 5296   : 672   : CVMclassCreateInternalClass
 4624   : 168   : classcreate:CVMreadConstantPool
 4456   : 376   : CVMinternUTF
 4080   : 136   : CVMgcAllocNewInstance
 3944   : 136   : CVMgcimplAllocObject
 3808   : 120   : CVMgcStopTheWorldAndGC
 3688   : 128   : gc_common:CVMgcStopTheWorldAndGCSafe
 3560   : 144   : CVMgcimplDoGC
 3416   : 112   : gen_semispace:CVMgenSemispaceCollect
 3304   : 144   : gen_semispace:CVMgenSemispaceCollectFull
 3160   : 112   : CVMgcProcessSpecialWithLivenessInfo
 3048   : 136   : CVMweakrefProcessNonStrong
 2912   : 128   : weakrefs:CVMweakrefHandlePendingQueue
 2784   : 120   : weakrefs:CVMweakrefIterateQueue
 2664   : 136   : weakrefs:CVMweakrefDiscoveredQueueCallback
 2528   : 128   : gen_semispace:CVMgenSemispaceScanTransitively
 2400   : 112   : gen_semispace:CVMgenSemispaceFollowRootsFull
 2288   : 136   : gen_semispace:CVMgenSemispaceFollowRootsWithBlackener
 2152   : 120   : gen_semispace:CVMgenSemispaceScanPromotedPointers
 2032   : 168   : gen_semispace:scanObjectsInRangeFull
 1864   : 152   : gen_semispace:CVMgenSemispaceBlackenObjectFull
 1712   : 112   : gen_semispace:CVMgenSemispaceFilteredGrayObject
 1600   : 120   : gen_semispace:CVMgenSemispaceGrayObject
 1480   : 136   : gen_semispace:CVMgenSemispaceForwardOrPromoteObject
 1344   : 128   : gen_semispace:CVMgenSemispacePromoteInto
 1216   : 376   : CVMconsolePrintf
 840    : 304   : CVMformatStringVaList
 536    : 168   : CVMtypeidMethodTypeToCString
 368    : 128   : CVMtypeidGetSignatureIterator
 240    : 120   : CVMtypeidGetTerseSignatureIterator
 120    : 120   : typeid:indexSegmentedTable
 0      : ?(0)  : .umul

> stacktrace classlookup:CVMclassLookupFromClassLoader strlen
 5848   : 152   : classlookup:CVMclassLookupFromClassLoader
 5696   : 136   : CVMclassLoadClass
 5560   : 136   : classload:CVMclassLoadSystemClass
 5424   : 144   : classload:CVMclassLoadFromFile
 5280   : 672   : CVMclassCreateInternalClass
 4608   : 168   : classcreate:CVMreadConstantPool
 4440   : 376   : CVMinternUTF
 4064   : 136   : CVMgcAllocNewInstance
 3928   : 136   : CVMgcimplAllocObject
 3792   : 120   : CVMgcStopTheWorldAndGC
 3672   : 128   : gc_common:CVMgcStopTheWorldAndGCSafe
 3544   : 144   : CVMgcimplDoGC
 3400   : 112   : gen_semispace:CVMgenSemispaceCollect
 3288   : 144   : gen_semispace:CVMgenSemispaceCollectFull
 3144   : 112   : CVMgcProcessSpecialWithLivenessInfo
 3032   : 136   : CVMweakrefProcessNonStrong
 2896   : 128   : weakrefs:CVMweakrefHandlePendingQueue
 2768   : 120   : weakrefs:CVMweakrefIterateQueue
 2648   : 136   : weakrefs:CVMweakrefDiscoveredQueueCallback
 2512   : 128   : gen_semispace:CVMgenSemispaceScanTransitively
 2384   : 112   : gen_semispace:CVMgenSemispaceFollowRootsFull
 2272   : 136   : gen_semispace:CVMgenSemispaceFollowRootsWithBlackener
 2136   : 120   : gen_semispace:CVMgenSemispaceScanPromotedPointers
 2016   : 168   : gen_semispace:scanObjectsInRangeFull
 1848   : 152   : gen_semispace:CVMgenSemispaceBlackenObjectFull
 1696   : 112   : gen_semispace:CVMgenSemispaceFilteredGrayObject
 1584   : 120   : gen_semispace:CVMgenSemispaceGrayObject
 1464   : 136   : gen_semispace:CVMgenSemispaceForwardOrPromoteObject
 1328   : 128   : gen_semispace:CVMgenSemispacePromoteInto
 1200   : 376   : CVMconsolePrintf
 824    : 304   : CVMformatStringVaList
 520    : 168   : CVMtypeidMethodTypeToCString
 352    : 112   : CVMtypeidFieldTypeToCString
 240    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 112    : 112   : CVMCstrlenStub
 0      : ?(0)  : strlen

> stacktrace classlookup:CVMclassLookupFromClassLoader adler32
 5568   : 152   : classlookup:CVMclassLookupFromClassLoader
 5416   : 136   : CVMclassLoadClass
 5280   : 136   : classload:CVMclassLoadSystemClass
 5144   : 136   : classload:CVMclassLoadFromZipFile
 5008   : 128   : CVMziputilReadEntry
 4880   : 4280  : CVMzutilInflateFully
 600    : 120   : CVMzlibInflate
 480    : 192   : CVMzlibInflate_blocks
 288    : 160   : CVMzlibInflate_codes
 128    : 128   : CVMzlibInflate_flush
 0      : ?(0)  : adler32

> stacktrace classlookup:CVMclassLookupFromClassLoader  pthread_getspecific
 5560   : 152   : classlookup:CVMclassLookupFromClassLoader
 5408   : 136   : CVMclassLoadClass
 5272   : 136   : classload:CVMclassLoadSystemClass
 5136   : 144   : classload:CVMclassLoadFromFile
 4992   : 672   : CVMclassCreateInternalClass
 4320   : 168   : classcreate:CVMreadConstantPool
 4152   : 376   : CVMinternUTF
 3776   : 136   : CVMgcAllocNewInstance
 3640   : 136   : CVMgcimplAllocObject
 3504   : 120   : CVMgcStopTheWorldAndGC
 3384   : 128   : gc_common:CVMgcStopTheWorldAndGCSafe
 3256   : 144   : CVMgcimplDoGC
 3112   : 112   : gen_semispace:CVMgenSemispaceCollect
 3000   : 144   : gen_semispace:CVMgenSemispaceCollectFull
 2856   : 112   : CVMgcProcessSpecialWithLivenessInfo
 2744   : 136   : CVMweakrefProcessNonStrong
 2608   : 128   : weakrefs:CVMweakrefHandlePendingQueue
 2480   : 120   : weakrefs:CVMweakrefIterateQueue
 2360   : 136   : weakrefs:CVMweakrefDiscoveredQueueCallback
 2224   : 128   : gen_semispace:CVMgenSemispaceScanTransitively
 2096   : 112   : gen_semispace:CVMgenSemispaceFollowRootsFull
 1984   : 136   : gen_semispace:CVMgenSemispaceFollowRootsWithBlackener
 1848   : 120   : gen_semispace:CVMgenSemispaceScanPromotedPointers
 1728   : 168   : gen_semispace:scanObjectsInRangeFull
 1560   : 152   : gen_semispace:CVMgenSemispaceBlackenObjectFull
 1408   : 112   : gen_semispace:CVMgenSemispaceFilteredGrayObject
 1296   : 120   : gen_semispace:CVMgenSemispaceGrayObject
 1176   : 136   : gen_semispace:CVMgenSemispaceForwardOrPromoteObject
 1040   : 128   : gen_semispace:CVMgenSemispacePromoteInto
 912    : 376   : CVMconsolePrintf
 536    : 304   : CVMformatStringVaList
 232    : 120   : CVMgetEE
 112    : 112   : POSIXthreadGetSelf
 0      : ?(0)  : pthread_getspecific

> stacktrace classlookup:CVMclassLookupFromClassLoader zcfree
 5528   : 152   : classlookup:CVMclassLookupFromClassLoader
 5376   : 136   : CVMclassLoadClass
 5240   : 136   : classload:CVMclassLoadSystemClass
 5104   : 136   : classload:CVMclassLoadFromZipFile
 4968   : 128   : CVMziputilReadEntry
 4840   : 4280  : CVMzutilInflateFully
 560    : 112   : CVMzlibInflateInit2_
 448    : 112   : CVMzlibInflateEnd
 336    : 112   : CVMzlibInflate_blocks_free
 224    : 112   : CVMzlibInflate_blocks_reset
 112    : 112   : CVMzlibInflate_codes_free
 0      : ?(0)  : zcfree

> stacktrace classlookup:CVMclassLookupFromClassLoader free
 5440   : 152   : classlookup:CVMclassLookupFromClassLoader
 5288   : 136   : CVMclassLoadClass
 5152   : 136   : classload:CVMclassLoadSystemClass
 5016   : 144   : classload:CVMclassLoadFromFile
 4872   : 672   : CVMclassCreateInternalClass
 4200   : 168   : classcreate:CVMreadConstantPool
 4032   : 376   : CVMinternUTF
 3656   : 136   : CVMgcAllocNewInstance
 3520   : 136   : CVMgcimplAllocObject
 3384   : 120   : CVMgcStopTheWorldAndGC
 3264   : 128   : gc_common:CVMgcStopTheWorldAndGCSafe
 3136   : 144   : CVMgcimplDoGC
 2992   : 112   : gen_semispace:CVMgenSemispaceCollect
 2880   : 144   : gen_semispace:CVMgenSemispaceCollectFull
 2736   : 112   : CVMgcProcessSpecialWithLivenessInfo
 2624   : 136   : CVMweakrefProcessNonStrong
 2488   : 128   : weakrefs:CVMweakrefHandlePendingQueue
 2360   : 120   : weakrefs:CVMweakrefIterateQueue
 2240   : 136   : weakrefs:CVMweakrefDiscoveredQueueCallback
 2104   : 128   : gen_semispace:CVMgenSemispaceScanTransitively
 1976   : 112   : gen_semispace:CVMgenSemispaceFollowRootsFull
 1864   : 136   : gen_semispace:CVMgenSemispaceFollowRootsWithBlackener
 1728   : 120   : gen_semispace:CVMgenSemispaceScanPromotedPointers
 1608   : 168   : gen_semispace:scanObjectsInRangeFull
 1440   : 152   : gen_semispace:CVMgenSemispaceBlackenObjectFull
 1288   : 112   : gen_semispace:CVMgenSemispaceFilteredGrayObject
 1176   : 120   : gen_semispace:CVMgenSemispaceGrayObject
 1056   : 136   : gen_semispace:CVMgenSemispaceForwardOrPromoteObject
 920    : 128   : gen_semispace:CVMgenSemispacePromoteInto
 792    : 376   : CVMconsolePrintf
 416    : 304   : CVMformatStringVaList
 112    : 112   : CVMCfreeStub
 0      : ?(0)  : free

> stacktrace classlookup:CVMclassLookupFromClassLoader strchr
 5440   : 152   : classlookup:CVMclassLookupFromClassLoader
 5288   : 136   : CVMclassLoadClass
 5152   : 136   : classload:CVMclassLoadSystemClass
 5016   : 144   : classload:CVMclassLoadFromFile
 4872   : 672   : CVMclassCreateInternalClass
 4200   : 168   : classcreate:CVMreadConstantPool
 4032   : 376   : CVMinternUTF
 3656   : 136   : CVMgcAllocNewInstance
 3520   : 136   : CVMgcimplAllocObject
 3384   : 120   : CVMgcStopTheWorldAndGC
 3264   : 128   : gc_common:CVMgcStopTheWorldAndGCSafe
 3136   : 144   : CVMgcimplDoGC
 2992   : 112   : gen_semispace:CVMgenSemispaceCollect
 2880   : 144   : gen_semispace:CVMgenSemispaceCollectFull
 2736   : 112   : CVMgcProcessSpecialWithLivenessInfo
 2624   : 136   : CVMweakrefProcessNonStrong
 2488   : 128   : weakrefs:CVMweakrefHandlePendingQueue
 2360   : 120   : weakrefs:CVMweakrefIterateQueue
 2240   : 136   : weakrefs:CVMweakrefDiscoveredQueueCallback
 2104   : 128   : gen_semispace:CVMgenSemispaceScanTransitively
 1976   : 112   : gen_semispace:CVMgenSemispaceFollowRootsFull
 1864   : 136   : gen_semispace:CVMgenSemispaceFollowRootsWithBlackener
 1728   : 120   : gen_semispace:CVMgenSemispaceScanPromotedPointers
 1608   : 168   : gen_semispace:scanObjectsInRangeFull
 1440   : 152   : gen_semispace:CVMgenSemispaceBlackenObjectFull
 1288   : 112   : gen_semispace:CVMgenSemispaceFilteredGrayObject
 1176   : 120   : gen_semispace:CVMgenSemispaceGrayObject
 1056   : 136   : gen_semispace:CVMgenSemispaceForwardOrPromoteObject
 920    : 128   : gen_semispace:CVMgenSemispacePromoteInto
 792    : 376   : CVMconsolePrintf
 416    : 304   : CVMformatStringVaList
 112    : 112   : CVMCstrchrStub
 0      : ?(0)  : strchr

The Worst C Stack Usage Chain in Class Link

Some worst cases of stack consumption occurring in class linking that have a call path from CVMclassLink to a C library function such as strncpy are given below.

> stacktrace CVMclassLink strncpy
 4512   : 128   : CVMclassLink
 4384   : 376   : CVMclassVerify
 4008   : 144   : VerifyClass
 3864   : 160   : verifycode:verify_method
 3704   : 184   : verifycode:run_dataflow
 3520   : 200   : verifycode:merge_into_successors
 3320   : 264   : verifycode:merge_into_one_successor
 3056   : 216   : verifycode:merge_registers
 2840   : 112   : verifycode:isAssignableTo
 2728   : 144   : verifycode:merge_fullinfo_types
 2584   : 128   : CVMjniGetSuperclass
 2456   : 120   : CVMjniNewLocalRef
 2336   : 144   : CVMjniCreateLocalRef
 2192   : 112   : CVMjniFatalError
 2080   : 120   : CVMdumpStack
 1960   : 128   : stacks:CVMdumpFrames
 1832   : 392   : CVMdumpFrame
 1440   : 120   : stacks:CVMdumpData
 1320   : 376   : CVMconsolePrintf
 944    : 304   : CVMformatStringVaList
 640    : 168   : CVMtypeidMethodTypeToCString
 472    : 112   : CVMtypeidFieldTypeToCString
 360    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 232    : 120   : typeid:conditionalPutstring
 112    : 112   : CVMCstrncpyStub
 0      : ?(0)  : strncpy

> stacktrace CVMclassLink .umul
 4408   : 128   : CVMclassLink
 4280   : 376   : CVMclassVerify
 3904   : 144   : VerifyClass
 3760   : 160   : verifycode:verify_method
 3600   : 184   : verifycode:run_dataflow
 3416   : 200   : verifycode:merge_into_successors
 3216   : 264   : verifycode:merge_into_one_successor
 2952   : 216   : verifycode:merge_registers
 2736   : 112   : verifycode:isAssignableTo
 2624   : 144   : verifycode:merge_fullinfo_types
 2480   : 128   : CVMjniGetSuperclass
 2352   : 120   : CVMjniNewLocalRef
 2232   : 144   : CVMjniCreateLocalRef
 2088   : 112   : CVMjniFatalError
 1976   : 120   : CVMdumpStack
 1856   : 128   : stacks:CVMdumpFrames
 1728   : 392   : CVMdumpFrame
 1336   : 120   : stacks:CVMdumpData
 1216   : 376   : CVMconsolePrintf
 840    : 304   : CVMformatStringVaList
 536    : 168   : CVMtypeidMethodTypeToCString
 368    : 128   : CVMtypeidGetSignatureIterator
 240    : 120   : CVMtypeidGetTerseSignatureIterator
 120    : 120   : typeid:indexSegmentedTable
 0      : ?(0)  : .umul

> stacktrace CVMclassLink strlen
 4392   : 128   : CVMclassLink
 4264   : 376   : CVMclassVerify
 3888   : 144   : VerifyClass
 3744   : 160   : verifycode:verify_method
 3584   : 184   : verifycode:run_dataflow
 3400   : 200   : verifycode:merge_into_successors
 3200   : 264   : verifycode:merge_into_one_successor
 2936   : 216   : verifycode:merge_registers
 2720   : 112   : verifycode:isAssignableTo
 2608   : 144   : verifycode:merge_fullinfo_types
 2464   : 128   : CVMjniGetSuperclass
 2336   : 120   : CVMjniNewLocalRef
 2216   : 144   : CVMjniCreateLocalRef
 2072   : 112   : CVMjniFatalError
 1960   : 120   : CVMdumpStack
 1840   : 128   : stacks:CVMdumpFrames
 1712   : 392   : CVMdumpFrame
 1320   : 120   : stacks:CVMdumpData
 1200   : 376   : CVMconsolePrintf
 824    : 304   : CVMformatStringVaList
 520    : 168   : CVMtypeidMethodTypeToCString
 352    : 112   : CVMtypeidFieldTypeToCString
 240    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 112    : 112   : CVMCstrlenStub
 0      : ?(0)  : strlen

> stacktrace CVMclassLink free
 3984   : 128   : CVMclassLink
 3856   : 376   : CVMclassVerify
 3480   : 144   : VerifyClass
 3336   : 160   : verifycode:verify_method
 3176   : 184   : verifycode:run_dataflow
 2992   : 200   : verifycode:merge_into_successors
 2792   : 264   : verifycode:merge_into_one_successor
 2528   : 216   : verifycode:merge_registers
 2312   : 112   : verifycode:isAssignableTo
 2200   : 144   : verifycode:merge_fullinfo_types
 2056   : 128   : CVMjniGetSuperclass
 1928   : 120   : CVMjniNewLocalRef
 1808   : 144   : CVMjniCreateLocalRef
 1664   : 112   : CVMjniFatalError
 1552   : 120   : CVMdumpStack
 1432   : 128   : stacks:CVMdumpFrames
 1304   : 392   : CVMdumpFrame
 912    : 120   : stacks:CVMdumpData
 792    : 376   : CVMconsolePrintf
 416    : 304   : CVMformatStringVaList
 112    : 112   : CVMCfreeStub
 0      : ?(0)  : free

> stacktrace CVMclassLink  sprintf
 3872   : 128   : CVMclassLink
 3744   : 376   : CVMclassVerify
 3368   : 144   : VerifyClass
 3224   : 160   : verifycode:verify_method
 3064   : 184   : verifycode:run_dataflow
 2880   : 200   : verifycode:merge_into_successors
 2680   : 264   : verifycode:merge_into_one_successor
 2416   : 216   : verifycode:merge_registers
 2200   : 112   : verifycode:isAssignableTo
 2088   : 144   : verifycode:merge_fullinfo_types
 1944   : 128   : CVMjniGetSuperclass
 1816   : 120   : CVMjniNewLocalRef
 1696   : 144   : CVMjniCreateLocalRef
 1552   : 112   : CVMjniFatalError
 1440   : 120   : CVMdumpStack
 1320   : 128   : stacks:CVMdumpFrames
 1192   : 392   : CVMdumpFrame
 800    : 120   : stacks:CVMdumpData
 680    : 376   : CVMconsolePrintf
 304    : 304   : CVMformatStringVaList
 0      : ?(0)  : sprintf

> stacktrace CVMclassLink fflush
 3568   : 128   : CVMclassLink
 3440   : 376   : CVMclassVerify
 3064   : 144   : VerifyClass
 2920   : 160   : verifycode:verify_method
 2760   : 184   : verifycode:run_dataflow
 2576   : 200   : verifycode:merge_into_successors
 2376   : 264   : verifycode:merge_into_one_successor
 2112   : 216   : verifycode:merge_registers
 1896   : 112   : verifycode:isAssignableTo
 1784   : 144   : verifycode:merge_fullinfo_types
 1640   : 128   : CVMjniGetSuperclass
 1512   : 120   : CVMjniNewLocalRef
 1392   : 144   : CVMjniCreateLocalRef
 1248   : 112   : CVMjniFatalError
 1136   : 120   : CVMdumpStack
 1016   : 128   : stacks:CVMdumpFrames
 888    : 392   : CVMdumpFrame
 496    : 120   : stacks:CVMdumpData
 376    : 376   : CVMconsolePrintf
 0      : ?(0)  : fflush

> stacktrace CVMclassLink pthread_cond_wait
 3504   : 128   : CVMclassLink
 3376   : 376   : CVMclassVerify
 3000   : 144   : VerifyClass
 2856   : 160   : verifycode:verify_method
 2696   : 184   : verifycode:run_dataflow
 2512   : 200   : verifycode:merge_into_successors
 2312   : 264   : verifycode:merge_into_one_successor
 2048   : 216   : verifycode:merge_registers
 1832   : 112   : verifycode:isAssignableTo
 1720   : 144   : verifycode:merge_fullinfo_types
 1576   : 112   : verifycode:CVMCstackDummy2object_fullinfo_to_classclass
 1464   : 136   : verifycode:object_fullinfo_to_classclass
 1328   : 120   : CVMjniNewGlobalRef
 1208   : 112   : CVMID_getGlobalRoot
 1096   : 120   : globalroots:CVMIDprivate_getGlobalRoot
 976    : 136   : globalroots:CVMIDprivate_getGlobalRootNoLock
 840    : 136   : CVMexpandStack
 704    : 136   : CVMcsRendezvous
 568    : 128   : CVMsysMutexWait
 440    : 128   : CVMreentrantMutexWait
 312    : 144   : CVMcondvarWait
 168    : 168   : POSIXcondvarWait
 0      : ?(0)  : pthread_cond_wait

> stacktrace CVMclassLink pthread_mutex_unlock
 3448   : 128   : CVMclassLink
 3320   : 376   : CVMclassVerify
 2944   : 144   : VerifyClass
 2800   : 160   : verifycode:verify_method
 2640   : 184   : verifycode:run_dataflow
 2456   : 200   : verifycode:merge_into_successors
 2256   : 264   : verifycode:merge_into_one_successor
 1992   : 216   : verifycode:merge_registers
 1776   : 112   : verifycode:isAssignableTo
 1664   : 144   : verifycode:merge_fullinfo_types
 1520   : 112   : verifycode:CVMCstackDummy2object_fullinfo_to_classclass
 1408   : 136   : verifycode:object_fullinfo_to_classclass
 1272   : 120   : CVMjniNewGlobalRef
 1152   : 112   : CVMID_getGlobalRoot
 1040   : 120   : globalroots:CVMIDprivate_getGlobalRoot
 920    : 136   : globalroots:CVMIDprivate_getGlobalRootNoLock
 784    : 136   : CVMexpandStack
 648    : 136   : CVMcsRendezvous
 512    : 128   : CVMsysMutexWait
 384    : 128   : CVMreentrantMutexWait
 256    : 144   : CVMcondvarWait
 112    : 112   : POSIXmutexUnlock
 0      : ?(0)  : pthread_mutex_unlock

The Worst C Stack Usage Chain in Formatting a String from the PC for a Console Print Out

Some worst cases of stack consumption occurring in the console print out routine that have a call path from CVMCstackDummy2CVMformatStringVaList to a C library function such as strncpy are given below.

> stacktrace utils:CVMCstackDummy2CVMformatStringVaList strncpy
 1792   : 112   : utils:CVMCstackDummy2CVMformatStringVaList
 1680   : 112   : CVMCstackCheckSize
 1568   : 136   : CVMcsRendezvous
 1432   : 112   : CVMsysMutexLock
 1320   : 376   : CVMconsolePrintf
 944    : 304   : CVMformatStringVaList
 640    : 168   : CVMtypeidMethodTypeToCString
 472    : 112   : CVMtypeidFieldTypeToCString
 360    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 232    : 120   : typeid:conditionalPutstring
 112    : 112   : CVMCstrncpyStub
 0      : ?(0)  : strncpy

> stacktrace utils:CVMCstackDummy2CVMformatStringVaList .umul
 1688   : 112   : utils:CVMCstackDummy2CVMformatStringVaList
 1576   : 112   : CVMCstackCheckSize
 1464   : 136   : CVMcsRendezvous
 1328   : 112   : CVMsysMutexLock
 1216   : 376   : CVMconsolePrintf
 840    : 304   : CVMformatStringVaList
 536    : 168   : CVMtypeidMethodTypeToCString
 368    : 128   : CVMtypeidGetSignatureIterator
 240    : 120   : CVMtypeidGetTerseSignatureIterator
 120    : 120   : typeid:indexSegmentedTable
 0      : ?(0)  : .umul

> stacktrace utils:CVMCstackDummy2CVMformatStringVaList strlen
 1672   : 112   : utils:CVMCstackDummy2CVMformatStringVaList
 1560   : 112   : CVMCstackCheckSize
 1448   : 136   : CVMcsRendezvous
 1312   : 112   : CVMsysMutexLock
 1200   : 376   : CVMconsolePrintf
 824    : 304   : CVMformatStringVaList
 520    : 168   : CVMtypeidMethodTypeToCString
 352    : 112   : CVMtypeidFieldTypeToCString
 240    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 112    : 112   : CVMCstrlenStub
 0      : ?(0)  : strlen

> stacktrace utils:CVMCstackDummy2CVMformatStringVaList pthread_getspecific
 1384   : 112   : utils:CVMCstackDummy2CVMformatStringVaList
 1272   : 112   : CVMCstackCheckSize
 1160   : 136   : CVMcsRendezvous
 1024   : 112   : CVMsysMutexLock
 912    : 376   : CVMconsolePrintf
 536    : 304   : CVMformatStringVaList
 232    : 120   : CVMgetEE
 112    : 112   : POSIXthreadGetSelf
 0      : ?(0)  : pthread_getspecific

> stacktrace utils:CVMCstackDummy2CVMformatStringVaList free
 1264   : 112   : utils:CVMCstackDummy2CVMformatStringVaList
 1152   : 112   : CVMCstackCheckSize
 1040   : 136   : CVMcsRendezvous
 904    : 112   : CVMsysMutexLock
 792    : 376   : CVMconsolePrintf
 416    : 304   : CVMformatStringVaList
 112    : 112   : CVMCfreeStub
 0      : ?(0)  : free

> stacktrace utils:CVMCstackDummy2CVMformatStringVaList sprintf
 1152   : 112   : utils:CVMCstackDummy2CVMformatStringVaList
 1040   : 112   : CVMCstackCheckSize
 928    : 136   : CVMcsRendezvous
 792    : 112   : CVMsysMutexLock
 680    : 376   : CVMconsolePrintf
 304    : 304   : CVMformatStringVaList
 0      : ?(0)  : sprintf

The Worst C stack Usage Chain in Formatting a String of Object from a Class and Hash value

Some worst cases of stack consumption occurring in the console print out routine which displays a string of object from its class block or a hashed value have a call path from CVMCstackDummy2CVMconsolePrintf to a C library function such as strncpy.

> stacktrace utils:CVMCstackDummy2CVMconsolePrintf strncpy
 1800   : 120   : utils:CVMCstackDummy2CVMconsolePrintf
 1680   : 112   : CVMCstackCheckSize
 1568   : 136   : CVMcsRendezvous
 1432   : 112   : CVMsysMutexLock
 1320   : 376   : CVMconsolePrintf
 944    : 304   : CVMformatStringVaList
 640    : 168   : CVMtypeidMethodTypeToCString
 472    : 112   : CVMtypeidFieldTypeToCString
 360    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 232    : 120   : typeid:conditionalPutstring
 112    : 112   : CVMCstrncpyStub
 0      : ?(0)  : strncpy

> stacktrace utils:CVMCstackDummy2CVMconsolePrintf .umul
 1696   : 120   : utils:CVMCstackDummy2CVMconsolePrintf
 1576   : 112   : CVMCstackCheckSize
 1464   : 136   : CVMcsRendezvous
 1328   : 112   : CVMsysMutexLock
 1216   : 376   : CVMconsolePrintf
 840    : 304   : CVMformatStringVaList
 536    : 168   : CVMtypeidMethodTypeToCString
 368    : 128   : CVMtypeidGetSignatureIterator
 240    : 120   : CVMtypeidGetTerseSignatureIterator
 120    : 120   : typeid:indexSegmentedTable
 0      : ?(0)  : .umul

> stacktrace utils:CVMCstackDummy2CVMconsolePrintf strlen
 1680   : 120   : utils:CVMCstackDummy2CVMconsolePrintf
 1560   : 112   : CVMCstackCheckSize
 1448   : 136   : CVMcsRendezvous
 1312   : 112   : CVMsysMutexLock
 1200   : 376   : CVMconsolePrintf
 824    : 304   : CVMformatStringVaList
 520    : 168   : CVMtypeidMethodTypeToCString
 352    : 112   : CVMtypeidFieldTypeToCString
 240    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 112    : 112   : CVMCstrlenStub
 0      : ?(0)  : strlen

> stacktrace utils:CVMCstackDummy2CVMconsolePrintf  pthread_getspecific
 1392   : 120   : utils:CVMCstackDummy2CVMconsolePrintf
 1272   : 112   : CVMCstackCheckSize
 1160   : 136   : CVMcsRendezvous
 1024   : 112   : CVMsysMutexLock
 912    : 376   : CVMconsolePrintf
 536    : 304   : CVMformatStringVaList
 232    : 120   : CVMgetEE
 112    : 112   : POSIXthreadGetSelf
 0      : ?(0)  : pthread_getspecific

> stacktrace utils:CVMCstackDummy2CVMconsolePrintf free
 1272   : 120   : utils:CVMCstackDummy2CVMconsolePrintf
 1152   : 112   : CVMCstackCheckSize
 1040   : 136   : CVMcsRendezvous
 904    : 112   : CVMsysMutexLock
 792    : 376   : CVMconsolePrintf
 416    : 304   : CVMformatStringVaList
 112    : 112   : CVMCfreeStub
 0      : ?(0)  : free

> stacktrace utils:CVMCstackDummy2CVMconsolePrintf sprintf
 1160   : 120   : utils:CVMCstackDummy2CVMconsolePrintf
 1040   : 112   : CVMCstackCheckSize
 928    : 136   : CVMcsRendezvous
 792    : 112   : CVMsysMutexLock
 680    : 376   : CVMconsolePrintf
 304    : 304   : CVMformatStringVaList
 0      : ?(0)  : sprintf

> stacktrace utils:CVMCstackDummy2CVMconsolePrintf  pthread_cond_wait
 936    : 120   : utils:CVMCstackDummy2CVMconsolePrintf
 816    : 112   : CVMCstackCheckSize
 704    : 136   : CVMcsRendezvous
 568    : 128   : CVMsysMutexWait
 440    : 128   : CVMreentrantMutexWait
 312    : 144   : CVMcondvarWait
 168    : 168   : POSIXcondvarWait
 0      : ?(0)  : pthread_cond_wait

> stacktrace utils:CVMCstackDummy2CVMobjectGetHashSafe strncpy
 2056   : 112   : utils:CVMCstackDummy2CVMobjectGetHashSafe
 1944   : 120   : CVMobjectGetHashSafe
 1824   : 120   : objsync:CVMobjectComputeHash
 1704   : 136   : objsync:CVMobjectSetHashCode
 1568   : 136   : CVMcsRendezvous
 1432   : 112   : CVMsysMutexLock
 1320   : 376   : CVMconsolePrintf
 944    : 304   : CVMformatStringVaList
 640    : 168   : CVMtypeidMethodTypeToCString
 472    : 112   : CVMtypeidFieldTypeToCString
 360    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 232    : 120   : typeid:conditionalPutstring
 112    : 112   : CVMCstrncpyStub
 0      : ?(0)  : strncpy

> stacktrace utils:CVMCstackDummy2CVMobjectGetHashSafe .umul
 1952   : 112   : utils:CVMCstackDummy2CVMobjectGetHashSafe
 1840   : 120   : CVMobjectGetHashSafe
 1720   : 120   : objsync:CVMobjectComputeHash
 1600   : 136   : objsync:CVMobjectSetHashCode
 1464   : 136   : CVMcsRendezvous
 1328   : 112   : CVMsysMutexLock
 1216   : 376   : CVMconsolePrintf
 840    : 304   : CVMformatStringVaList
 536    : 168   : CVMtypeidMethodTypeToCString
 368    : 128   : CVMtypeidGetSignatureIterator
 240    : 120   : CVMtypeidGetTerseSignatureIterator
 120    : 120   : typeid:indexSegmentedTable
 0      : ?(0)  : .umul

> stacktrace utils:CVMCstackDummy2CVMobjectGetHashSafe strlen
 1936   : 112   : utils:CVMCstackDummy2CVMobjectGetHashSafe
 1824   : 120   : CVMobjectGetHashSafe
 1704   : 120   : objsync:CVMobjectComputeHash
 1584   : 136   : objsync:CVMobjectSetHashCode
 1448   : 136   : CVMcsRendezvous
 1312   : 112   : CVMsysMutexLock
 1200   : 376   : CVMconsolePrintf
 824    : 304   : CVMformatStringVaList
 520    : 168   : CVMtypeidMethodTypeToCString
 352    : 112   : CVMtypeidFieldTypeToCString
 240    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 112    : 112   : CVMCstrlenStub
 0      : ?(0)  : strlen

> stacktrace utils:CVMCstackDummy2CVMobjectGetHashSafe pthread_getspecific
 1648   : 112   : utils:CVMCstackDummy2CVMobjectGetHashSafe
 1536   : 120   : CVMobjectGetHashSafe
 1416   : 120   : objsync:CVMobjectComputeHash
 1296   : 136   : objsync:CVMobjectSetHashCode
 1160   : 136   : CVMcsRendezvous
 1024   : 112   : CVMsysMutexLock
 912    : 376   : CVMconsolePrintf
 536    : 304   : CVMformatStringVaList
 232    : 120   : CVMgetEE
 112    : 112   : POSIXthreadGetSelf
 0      : ?(0)  : pthread_getspecific

> stacktrace utils:CVMCstackDummy2CVMobjectGetHashSafe free
 1528   : 112   : utils:CVMCstackDummy2CVMobjectGetHashSafe
 1416   : 120   : CVMobjectGetHashSafe
 1296   : 120   : objsync:CVMobjectComputeHash
 1176   : 136   : objsync:CVMobjectSetHashCode
 1040   : 136   : CVMcsRendezvous
 904    : 112   : CVMsysMutexLock
 792    : 376   : CVMconsolePrintf
 416    : 304   : CVMformatStringVaList
 112    : 112   : CVMCfreeStub
 0      : ?(0)  : free

> stacktrace utils:CVMCstackDummy2CVMobjectGetHashSafe sprintf
 1416   : 112   : utils:CVMCstackDummy2CVMobjectGetHashSafe
 1304   : 120   : CVMobjectGetHashSafe
 1184   : 120   : objsync:CVMobjectComputeHash
 1064   : 136   : objsync:CVMobjectSetHashCode
 928    : 136   : CVMcsRendezvous
 792    : 112   : CVMsysMutexLock
 680    : 376   : CVMconsolePrintf
 304    : 304   : CVMformatStringVaList
 0      : ?(0)  : sprintf

> stacktrace utils:CVMCstackDummy2CVMobjectGetHashSafe pthread_cond_wait
 1192   : 112   : utils:CVMCstackDummy2CVMobjectGetHashSafe
 1080   : 120   : CVMobjectGetHashSafe
 960    : 120   : objsync:CVMobjectComputeHash
 840    : 136   : objsync:CVMobjectSetHashCode
 704    : 136   : CVMcsRendezvous
 568    : 128   : CVMsysMutexWait
 440    : 128   : CVMreentrantMutexWait
 312    : 144   : CVMcondvarWait
 168    : 168   : POSIXcondvarWait
 0      : ?(0)  : pthread_cond_wait

The Worst C Stack Usage Chain in Class Verifier

Some worst cases of stack consumption occurring in class verifier that merges types of two array objects have a call path from CVMCstackDummy2merge_fullinfo_types to a C library function such as strncpy.

> stacktrace verifycode:CVMCstackDummy2merge_fullinfo_types strncpy
 2848   : 120   : verifycode:CVMCstackDummy2merge_fullinfo_types
 2728   : 144   : verifycode:merge_fullinfo_types
 2584   : 128   : CVMjniGetSuperclass
 2456   : 120   : CVMjniNewLocalRef
 2336   : 144   : CVMjniCreateLocalRef
 2192   : 112   : CVMjniFatalError
 2080   : 120   : CVMdumpStack
 1960   : 128   : stacks:CVMdumpFrames
 1832   : 392   : CVMdumpFrame
 1440   : 120   : stacks:CVMdumpData
 1320   : 376   : CVMconsolePrintf
 944    : 304   : CVMformatStringVaList
 640    : 168   : CVMtypeidMethodTypeToCString
 472    : 112   : CVMtypeidFieldTypeToCString
 360    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 232    : 120   : typeid:conditionalPutstring
 112    : 112   : CVMCstrncpyStub
 0      : ?(0)  : strncpy

> stacktrace verifycode:CVMCstackDummy2merge_fullinfo_types .umul
 2744   : 120   : verifycode:CVMCstackDummy2merge_fullinfo_types
 2624   : 144   : verifycode:merge_fullinfo_types
 2480   : 128   : CVMjniGetSuperclass
 2352   : 120   : CVMjniNewLocalRef
 2232   : 144   : CVMjniCreateLocalRef
 2088   : 112   : CVMjniFatalError
 1976   : 120   : CVMdumpStack
 1856   : 128   : stacks:CVMdumpFrames
 1728   : 392   : CVMdumpFrame
 1336   : 120   : stacks:CVMdumpData
 1216   : 376   : CVMconsolePrintf
 840    : 304   : CVMformatStringVaList
 536    : 168   : CVMtypeidMethodTypeToCString
 368    : 128   : CVMtypeidGetSignatureIterator
 240    : 120   : CVMtypeidGetTerseSignatureIterator
 120    : 120   : typeid:indexSegmentedTable
 0      : ?(0)  : .umul

> stacktrace verifycode:CVMCstackDummy2merge_fullinfo_types strlen
 2728   : 120   : verifycode:CVMCstackDummy2merge_fullinfo_types
 2608   : 144   : verifycode:merge_fullinfo_types
 2464   : 128   : CVMjniGetSuperclass
 2336   : 120   : CVMjniNewLocalRef
 2216   : 144   : CVMjniCreateLocalRef
 2072   : 112   : CVMjniFatalError
 1960   : 120   : CVMdumpStack
 1840   : 128   : stacks:CVMdumpFrames
 1712   : 392   : CVMdumpFrame
 1320   : 120   : stacks:CVMdumpData
 1200   : 376   : CVMconsolePrintf
 824    : 304   : CVMformatStringVaList
 520    : 168   : CVMtypeidMethodTypeToCString
 352    : 112   : CVMtypeidFieldTypeToCString
 240    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 112    : 112   : CVMCstrlenStub
 0      : ?(0)  : strlen

> stacktrace verifycode:CVMCstackDummy2merge_fullinfo_types pthread_getspecific
 2440   : 120   : verifycode:CVMCstackDummy2merge_fullinfo_types
 2320   : 144   : verifycode:merge_fullinfo_types
 2176   : 128   : CVMjniGetSuperclass
 2048   : 120   : CVMjniNewLocalRef
 1928   : 144   : CVMjniCreateLocalRef
 1784   : 112   : CVMjniFatalError
 1672   : 120   : CVMdumpStack
 1552   : 128   : stacks:CVMdumpFrames
 1424   : 392   : CVMdumpFrame
 1032   : 120   : stacks:CVMdumpData
 912    : 376   : CVMconsolePrintf
 536    : 304   : CVMformatStringVaList
 232    : 120   : CVMgetEE
 112    : 112   : POSIXthreadGetSelf
 0      : ?(0)  : pthread_getspecific

> stacktrace verifycode:CVMCstackDummy2merge_fullinfo_types  free
 2320   : 120   : verifycode:CVMCstackDummy2merge_fullinfo_types
 2200   : 144   : verifycode:merge_fullinfo_types
 2056   : 128   : CVMjniGetSuperclass
 1928   : 120   : CVMjniNewLocalRef
 1808   : 144   : CVMjniCreateLocalRef
 1664   : 112   : CVMjniFatalError
 1552   : 120   : CVMdumpStack
 1432   : 128   : stacks:CVMdumpFrames
 1304   : 392   : CVMdumpFrame
 912    : 120   : stacks:CVMdumpData
 792    : 376   : CVMconsolePrintf
 416    : 304   : CVMformatStringVaList
 112    : 112   : CVMCfreeStub
 0      : ?(0)  : free

> stacktrace verifycode:CVMCstackDummy2merge_fullinfo_types sprintf
 2208   : 120   : verifycode:CVMCstackDummy2merge_fullinfo_types
 2088   : 144   : verifycode:merge_fullinfo_types
 1944   : 128   : CVMjniGetSuperclass
 1816   : 120   : CVMjniNewLocalRef
 1696   : 144   : CVMjniCreateLocalRef
 1552   : 112   : CVMjniFatalError
 1440   : 120   : CVMdumpStack
 1320   : 128   : stacks:CVMdumpFrames
 1192   : 392   : CVMdumpFrame
 800    : 120   : stacks:CVMdumpData
 680    : 376   : CVMconsolePrintf
 304    : 304   : CVMformatStringVaList
 0      : ?(0)  : sprintf

> stacktrace verifycode:CVMCstackDummy2merge_fullinfo_types  fflush
 1904   : 120   : verifycode:CVMCstackDummy2merge_fullinfo_types
 1784   : 144   : verifycode:merge_fullinfo_types
 1640   : 128   : CVMjniGetSuperclass
 1512   : 120   : CVMjniNewLocalRef
 1392   : 144   : CVMjniCreateLocalRef
 1248   : 112   : CVMjniFatalError
 1136   : 120   : CVMdumpStack
 1016   : 128   : stacks:CVMdumpFrames
 888    : 392   : CVMdumpFrame
 496    : 120   : stacks:CVMdumpData
 376    : 376   : CVMconsolePrintf
 0      : ?(0)  : fflush

> stacktrace verifycode:CVMCstackDummy2merge_fullinfo_types pthread_cond_
wait
 1840   : 120   : verifycode:CVMCstackDummy2merge_fullinfo_types
 1720   : 144   : verifycode:merge_fullinfo_types
 1576   : 112   : verifycode:CVMCstackDummy2object_fullinfo_to_classclass
 1464   : 136   : verifycode:object_fullinfo_to_classclass
 1328   : 120   : CVMjniNewGlobalRef
 1208   : 112   : CVMID_getGlobalRoot
 1096   : 120   : globalroots:CVMIDprivate_getGlobalRoot
 976    : 136   : globalroots:CVMIDprivate_getGlobalRootNoLock
 840    : 136   : CVMexpandStack
 704    : 136   : CVMcsRendezvous
 568    : 128   : CVMsysMutexWait
 440    : 128   : CVMreentrantMutexWait
 312    : 144   : CVMcondvarWait
 168    : 168   : POSIXcondvarWait
 0      : ?(0)  : pthread_cond_wait

The Worst C Stack Usage Chain in Signaling an Exception Routine

Some worst cases of stack consumption occurring in function that signals a thrown exception have a call path from CVMsignalErrorVaList to a C library function such as strncpy.

> stacktrace CVMsignalErrorVaList strncpy
 5448   : 120   : CVMsignalErrorVaList
 5328   : 144   : interpreter:CVMgcSafeSignalError
 5184   : 112   : CVMfillInStackTrace
 5072   : 200   : jvm:CVMgcUnsafeFillInStackTrace
 4872   : 376   : CVMnewStringUTF
 4496   : 144   : CVMnewString
 4352   : 136   : CVMgcAllocNewInstance
 4216   : 128   : CVMjniCallStaticVoidMethod
 4088   : 184   : jni_impl:CVMjniInvoke
 3904   : 136   : CVMjniExceptionDescribe
 3768   : 112   : CVMjniGetMethodID
 3656   : 136   : jni_impl:CVMjniGetXMethodID
 3520   : 112   : CVMclassInit
 3408   : 128   : classinitialize:CVMprivateClassInit
 3280   : 128   : CVMjniCallVoidMethod
 3152   : 184   : jni_impl:CVMjniInvoke
 2968   : 136   : CVMjniExceptionDescribe
 2832   : 112   : CVMjniGetMethodID
 2720   : 136   : jni_impl:CVMjniGetXMethodID
 2584   : 128   : CVMtypeidNewMethodIDFromNameAndSig
 2456   : 240   : typeid:referenceMethodSignature
 2216   : 144   : typeid:referenceFieldSignature
 2072   : 120   : typeid:referenceClassName
 1952   : 144   : typeid:lookupClass
 1808   : 120   : typeid:findFreeScalarEntry
 1688   : 136   : typeid:findFreeTableEntry
 1552   : 120   : typeid:unlockThrowOutOfMemoryError
 1432   : 112   : CVMsysMutexUnlock
 1320   : 376   : CVMconsolePrintf
 944    : 304   : CVMformatStringVaList
 640    : 168   : CVMtypeidMethodTypeToCString
 472    : 112   : CVMtypeidFieldTypeToCString
 360    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 232    : 120   : typeid:conditionalPutstring
 112    : 112   : CVMCstrncpyStub
 0      : ?(0)  : strncpy

> stacktrace CVMsignalErrorVaList .umul
 5344   : 120   : CVMsignalErrorVaList
 5224   : 144   : interpreter:CVMgcSafeSignalError
 5080   : 112   : CVMfillInStackTrace
 4968   : 200   : jvm:CVMgcUnsafeFillInStackTrace
 4768   : 376   : CVMnewStringUTF
 4392   : 144   : CVMnewString
 4248   : 136   : CVMgcAllocNewInstance
 4112   : 128   : CVMjniCallStaticVoidMethod
 3984   : 184   : jni_impl:CVMjniInvoke
 3800   : 136   : CVMjniExceptionDescribe
 3664   : 112   : CVMjniGetMethodID
 3552   : 136   : jni_impl:CVMjniGetXMethodID
 3416   : 112   : CVMclassInit
 3304   : 128   : classinitialize:CVMprivateClassInit
 3176   : 128   : CVMjniCallVoidMethod
 3048   : 184   : jni_impl:CVMjniInvoke
 2864   : 136   : CVMjniExceptionDescribe
 2728   : 112   : CVMjniGetMethodID
 2616   : 136   : jni_impl:CVMjniGetXMethodID
 2480   : 128   : CVMtypeidNewMethodIDFromNameAndSig
 2352   : 240   : typeid:referenceMethodSignature
 2112   : 144   : typeid:referenceFieldSignature
 1968   : 120   : typeid:referenceClassName
 1848   : 144   : typeid:lookupClass
 1704   : 120   : typeid:findFreeScalarEntry
 1584   : 136   : typeid:findFreeTableEntry
 1448   : 120   : typeid:unlockThrowOutOfMemoryError
 1328   : 112   : CVMsysMutexUnlock
 1216   : 376   : CVMconsolePrintf
 840    : 304   : CVMformatStringVaList
 536    : 168   : CVMtypeidMethodTypeToCString
 368    : 128   : CVMtypeidGetSignatureIterator
 240    : 120   : CVMtypeidGetTerseSignatureIterator
 120    : 120   : typeid:indexSegmentedTable
 0      : ?(0)  : .umul

> stacktrace CVMsignalErrorVaList strlen
 5328   : 120   : CVMsignalErrorVaList
 5208   : 144   : interpreter:CVMgcSafeSignalError
 5064   : 112   : CVMfillInStackTrace
 4952   : 200   : jvm:CVMgcUnsafeFillInStackTrace
 4752   : 376   : CVMnewStringUTF
 4376   : 144   : CVMnewString
 4232   : 136   : CVMgcAllocNewInstance
 4096   : 128   : CVMjniCallStaticVoidMethod
 3968   : 184   : jni_impl:CVMjniInvoke
 3784   : 136   : CVMjniExceptionDescribe
 3648   : 112   : CVMjniGetMethodID
 3536   : 136   : jni_impl:CVMjniGetXMethodID
 3400   : 112   : CVMclassInit
 3288   : 128   : classinitialize:CVMprivateClassInit
 3160   : 128   : CVMjniCallVoidMethod
 3032   : 184   : jni_impl:CVMjniInvoke
 2848   : 136   : CVMjniExceptionDescribe
 2712   : 112   : CVMjniGetMethodID
 2600   : 136   : jni_impl:CVMjniGetXMethodID
 2464   : 128   : CVMtypeidNewMethodIDFromNameAndSig
 2336   : 240   : typeid:referenceMethodSignature
 2096   : 144   : typeid:referenceFieldSignature
 1952   : 120   : typeid:referenceClassName
 1832   : 144   : typeid:lookupClass
 1688   : 120   : typeid:findFreeScalarEntry
 1568   : 136   : typeid:findFreeTableEntry
 1432   : 120   : typeid:unlockThrowOutOfMemoryError
 1312   : 112   : CVMsysMutexUnlock
 1200   : 376   : CVMconsolePrintf
 824    : 304   : CVMformatStringVaList
 520    : 168   : CVMtypeidMethodTypeToCString
 352    : 112   : CVMtypeidFieldTypeToCString
 240    : 128   : typeid:CVMtypeidPrivateFieldTypeToCString
 112    : 112   : CVMCstrlenStub
 0      : ?(0)  : strlen

> stacktrace CVMsignalErrorVaList pthread_getspecific
 5040   : 120   : CVMsignalErrorVaList
 4920   : 144   : interpreter:CVMgcSafeSignalError
 4776   : 112   : CVMfillInStackTrace
 4664   : 200   : jvm:CVMgcUnsafeFillInStackTrace
 4464   : 376   : CVMnewStringUTF
 4088   : 144   : CVMnewString
 3944   : 136   : CVMgcAllocNewInstance
 3808   : 128   : CVMjniCallStaticVoidMethod
 3680   : 184   : jni_impl:CVMjniInvoke
 3496   : 136   : CVMjniExceptionDescribe
 3360   : 112   : CVMjniGetMethodID
 3248   : 136   : jni_impl:CVMjniGetXMethodID
 3112   : 112   : CVMclassInit
 3000   : 128   : classinitialize:CVMprivateClassInit
 2872   : 128   : CVMjniCallVoidMethod
 2744   : 184   : jni_impl:CVMjniInvoke
 2560   : 136   : CVMjniExceptionDescribe
 2424   : 112   : CVMjniGetMethodID
 2312   : 136   : jni_impl:CVMjniGetXMethodID
 2176   : 128   : CVMtypeidNewMethodIDFromNameAndSig
 2048   : 240   : typeid:referenceMethodSignature
 1808   : 144   : typeid:referenceFieldSignature
 1664   : 120   : typeid:referenceClassName
 1544   : 144   : typeid:lookupClass
 1400   : 120   : typeid:findFreeScalarEntry
 1280   : 136   : typeid:findFreeTableEntry
 1144   : 120   : typeid:unlockThrowOutOfMemoryError
 1024   : 112   : CVMsysMutexUnlock
 912    : 376   : CVMconsolePrintf
 536    : 304   : CVMformatStringVaList
 232    : 120   : CVMgetEE
 112    : 112   : POSIXthreadGetSelf
 0      : ?(0)  : pthread_getspecific

> stacktrace CVMsignalErrorVaList free
 4920   : 120   : CVMsignalErrorVaList
 4800   : 144   : interpreter:CVMgcSafeSignalError
 4656   : 112   : CVMfillInStackTrace
 4544   : 200   : jvm:CVMgcUnsafeFillInStackTrace
 4344   : 376   : CVMnewStringUTF
 3968   : 144   : CVMnewString
 3824   : 136   : CVMgcAllocNewInstance
 3688   : 128   : CVMjniCallStaticVoidMethod
 3560   : 184   : jni_impl:CVMjniInvoke
 3376   : 136   : CVMjniExceptionDescribe
 3240   : 112   : CVMjniGetMethodID
 3128   : 136   : jni_impl:CVMjniGetXMethodID
 2992   : 112   : CVMclassInit
 2880   : 128   : classinitialize:CVMprivateClassInit
 2752   : 128   : CVMjniCallVoidMethod
 2624   : 184   : jni_impl:CVMjniInvoke
 2440   : 136   : CVMjniExceptionDescribe
 2304   : 112   : CVMjniGetMethodID
 2192   : 136   : jni_impl:CVMjniGetXMethodID
 2056   : 128   : CVMtypeidNewMethodIDFromNameAndSig
 1928   : 240   : typeid:referenceMethodSignature
 1688   : 144   : typeid:referenceFieldSignature
 1544   : 120   : typeid:referenceClassName
 1424   : 144   : typeid:lookupClass
 1280   : 120   : typeid:findFreeScalarEntry
 1160   : 136   : typeid:findFreeTableEntry
 1024   : 120   : typeid:unlockThrowOutOfMemoryError
 904    : 112   : CVMsysMutexUnlock
 792    : 376   : CVMconsolePrintf
 416    : 304   : CVMformatStringVaList
 112    : 112   : CVMCfreeStub
 0      : ?(0)  : free

> stacktrace CVMsignalErrorVaList sprintf
 4808   : 120   : CVMsignalErrorVaList
 4688   : 144   : interpreter:CVMgcSafeSignalError
 4544   : 112   : CVMfillInStackTrace
 4432   : 200   : jvm:CVMgcUnsafeFillInStackTrace
 4232   : 376   : CVMnewStringUTF
 3856   : 144   : CVMnewString
 3712   : 136   : CVMgcAllocNewInstance
 3576   : 128   : CVMjniCallStaticVoidMethod
 3448   : 184   : jni_impl:CVMjniInvoke
 3264   : 136   : CVMjniExceptionDescribe
 3128   : 112   : CVMjniGetMethodID
 3016   : 136   : jni_impl:CVMjniGetXMethodID
 2880   : 112   : CVMclassInit
 2768   : 128   : classinitialize:CVMprivateClassInit
 2640   : 128   : CVMjniCallVoidMethod
 2512   : 184   : jni_impl:CVMjniInvoke
 2328   : 136   : CVMjniExceptionDescribe
 2192   : 112   : CVMjniGetMethodID
 2080   : 136   : jni_impl:CVMjniGetXMethodID
 1944   : 128   : CVMtypeidNewMethodIDFromNameAndSig
 1816   : 240   : typeid:referenceMethodSignature
 1576   : 144   : typeid:referenceFieldSignature
 1432   : 120   : typeid:referenceClassName
 1312   : 144   : typeid:lookupClass
 1168   : 120   : typeid:findFreeScalarEntry
 1048   : 136   : typeid:findFreeTableEntry
 912    : 120   : typeid:unlockThrowOutOfMemoryError
 792    : 112   : CVMsysMutexUnlock
 680    : 376   : CVMconsolePrintf
 304    : 304   : CVMformatStringVaList
 0      : ?(0)  : sprintf

> stacktrace CVMsignalErrorVaList fflush
 4504   : 120   : CVMsignalErrorVaList
 4384   : 144   : interpreter:CVMgcSafeSignalError
 4240   : 112   : CVMfillInStackTrace
 4128   : 200   : jvm:CVMgcUnsafeFillInStackTrace
 3928   : 376   : CVMnewStringUTF
 3552   : 144   : CVMnewString
 3408   : 136   : CVMgcAllocNewInstance
 3272   : 128   : CVMjniCallStaticVoidMethod
 3144   : 184   : jni_impl:CVMjniInvoke
 2960   : 136   : CVMjniExceptionDescribe
 2824   : 112   : CVMjniGetMethodID
 2712   : 136   : jni_impl:CVMjniGetXMethodID
 2576   : 112   : CVMclassInit
 2464   : 128   : classinitialize:CVMprivateClassInit
 2336   : 128   : CVMjniCallVoidMethod
 2208   : 184   : jni_impl:CVMjniInvoke
 2024   : 136   : CVMjniExceptionDescribe
 1888   : 112   : CVMjniGetMethodID
 1776   : 136   : jni_impl:CVMjniGetXMethodID
 1640   : 128   : CVMtypeidNewMethodIDFromNameAndSig
 1512   : 240   : typeid:referenceMethodSignature
 1272   : 144   : typeid:referenceFieldSignature
 1128   : 120   : typeid:referenceClassName
 1008   : 144   : typeid:lookupClass
 864    : 120   : typeid:findFreeScalarEntry
 744    : 136   : typeid:findFreeTableEntry
 608    : 120   : typeid:unlockThrowOutOfMemoryError
 488    : 112   : CVMsysMutexUnlock
 376    : 376   : CVMconsolePrintf
 0      : ?(0)  : fflush


Contents | Prev | Next
Copyright © 2000 Sun Microsystems, Inc. All Rights Reserved.

Please send comments to: jcp-cdc-comments@eng.sun.com
Sun