Java Access Bridge在releaseJavaObject()上导致JVM崩溃

本文关键字:JVM 崩溃 Access Bridge releaseJavaObject Java | 更新日期: 2023-09-27 18:07:50

我正在使用Java Access Bridge从Oracle接口提取数据,并且偶尔会出现以下崩溃(我假设当我调用releaseJavaObject()时-当我删除这些代码行时,问题就消失了。

这是崩溃日志:

# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d9104dd, pid=7784, tid=5868
#
# JRE version: 6.0_14-b08
# Java VM: Java HotSpot(TM) Client VM (14.0-b16 mixed mode, sharing windows-x86 )
# Problematic frame:
# V  [jvm.dll+0x1104dd]
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#
---------------  T H R E A D  ---------------
Current thread (0x04036000):  JavaThread "Thread-5" [_thread_in_vm, id=5868, stack(0x046e0000,0x04730000)]
siginfo: ExceptionCode=0xc0000005, reading address 0x00000001
Registers:
EAX=0x00000001, EBX=0x23ec7730, ECX=0x00000000, EDX=0x00227c98
ESP=0x0472f504, EBP=0x0472f510, ESI=0x007a0128, EDI=0x04026b8c
EIP=0x6d9104dd, EFLAGS=0x00010202
Top of Stack: (sp=0x0472f504)
0x0472f504:   04026b8c 00227c98 04036000 0472f524
0x0472f514:   6d9105a9 23ec7730 23ec7730 04026f54
0x0472f524:   0472f54c 6d8f1dca 04026b8c 04036000
0x0472f534:   04036110 2bfbf9a0 04036000 00000000
0x0472f544:   0472f534 0472f56c 0472f578 6d0717bd
0x0472f554:   04036110 0472f588 04036000 23ec7b88
0x0472f564:   2bfbf9a0 0472f55c 0472f798 6d0bded0
0x0472f574:   00000000 0472f598 01ef6fc3 04036110 
Instructions: (pc=0x6d9104dd)
0x6d9104cd:   00 00 5e 89 18 5b 5d c2 04 00 8b 86 90 00 00 00
0x6d9104dd:   8b 08 5f 89 8e 90 00 00 00 5e 89 18 5b 5d c2 04 

Stack: [0x046e0000,0x04730000],  sp=0x0472f504,  free space=317k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [jvm.dll+0x1104dd]
V  [jvm.dll+0x1105a9]
V  [jvm.dll+0xf1dca]
C  [awt.dll+0x717bd]
J  sun.awt.windows.WComponentPeer.getLocationOnScreen()Ljava/awt/Point;
J  java.awt.Component.getLocationOnScreen_NoTreeLock()Ljava/awt/Point;
J  java.awt.Component.getLocationOnScreen()Ljava/awt/Point;
j  oracle.ewt.lwAWT.LWDataSourceList$Child.getLocationOnScreen()Ljava/awt/Point;+4
J  com.sun.java.accessibility.AccessBridge.getAccessibleBoundsOnScreenFromContext(Ljavax/accessibility/AccessibleContext;)Ljava/awt/Rectangle;
j  com.sun.java.accessibility.AccessBridge.getAccessibleXcoordFromContext(Ljavax/accessibility/AccessibleContext;)I+6
v  ~StubRoutines::call_stub
V  [jvm.dll+0xecabc]
V  [jvm.dll+0x173d61]
V  [jvm.dll+0xecb3d]
V  [jvm.dll+0xf594f]
V  [jvm.dll+0xf7777]
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
J  sun.awt.windows.WComponentPeer.getLocationOnScreen()Ljava/awt/Point;
J  java.awt.Component.getLocationOnScreen_NoTreeLock()Ljava/awt/Point;
J  java.awt.Component.getLocationOnScreen()Ljava/awt/Point;
j  oracle.ewt.lwAWT.LWDataSourceList$Child.getLocationOnScreen()Ljava/awt/Point;+4
J  com.sun.java.accessibility.AccessBridge.getAccessibleBoundsOnScreenFromContext(Ljavax/accessibility/AccessibleContext;)Ljava/awt/Rectangle;
j  com.sun.java.accessibility.AccessBridge.getAccessibleXcoordFromContext(Ljavax/accessibility/AccessibleContext;)I+6
v  ~StubRoutines::call_stub
j  com.sun.java.accessibility.AccessBridge.run()V+0
j  java.lang.Thread.run()V+11
v  ~StubRoutines::call_stub
---------------  P R O C E S S  ---------------
Java Threads: ( => current thread )
  0x04052400 JavaThread "Image Fetcher 0" daemon [_thread_blocked, id=7976, stack(0x04e60000,0x04eb0000)]
  0x0716ac00 JavaThread "Image Fetcher 0" daemon [_thread_blocked, id=5484, stack(0x07770000,0x077c0000)]
  0x0716a000 JavaThread "Flush Queue" [_thread_blocked, id=4588, stack(0x055d0000,0x05620000)]
  0x04053000 JavaThread "Thread-11" [_thread_in_native, id=6544, stack(0x054f0000,0x05540000)]
  0x04052800 JavaThread "CursorIdler" [_thread_blocked, id=3328, stack(0x054a0000,0x054f0000)]
  0x0404f800 JavaThread "TaskScheduler timer" [_thread_blocked, id=1180, stack(0x05300000,0x05350000)]
  0x04051c00 JavaThread "Busy indicator" daemon [_thread_blocked, id=5072, stack(0x05280000,0x052d0000)]
  0x04051000 JavaThread "HeartBeat" [_thread_blocked, id=3960, stack(0x05230000,0x05280000)]
  0x04050c00 JavaThread "Forms-StreamMessageWriter" [_thread_blocked, id=6008, stack(0x04fc0000,0x05010000)]
  0x04050400 JavaThread "Forms-StreamMessageReader" [_thread_in_native, id=2480, stack(0x04f70000,0x04fc0000)]
  0x0404f400 JavaThread "Keep-Alive-Timer" daemon [_thread_blocked, id=7112, stack(0x059c0000,0x05a10000)]
  0x0404bc00 JavaThread "thread applet-oracle.forms.engine.Main-1" [_thread_blocked, id=4376, stack(0x049b0000,0x04a00000)]
  0x0404e000 JavaThread "AWT-EventQueue-2" [_thread_blocked, id=8020, stack(0x04dc0000,0x04e10000)]
  0x0404dc00 JavaThread "Applet 1 LiveConnect Worker Thread" [_thread_blocked, id=7500, stack(0x04730000,0x04780000)]
  0x0404d400 JavaThread "Browser Side Object Cleanup Thread" [_thread_blocked, id=1888, stack(0x04d70000,0x04dc0000)]
  0x0404d000 JavaThread "Windows Tray Icon Thread" [_thread_in_native, id=4396, stack(0x04b10000,0x04b60000)]
  0x0404c800 JavaThread "CacheCleanUpThread" daemon [_thread_blocked, id=252, stack(0x04ac0000,0x04b10000)]
  0x0404c400 JavaThread "CacheMemoryCleanUpThread" daemon [_thread_blocked, id=7492, stack(0x04a00000,0x04a50000)]
  0x0404b400 JavaThread "Java Plug-In Heartbeat Thread" [_thread_blocked, id=5644, stack(0x04960000,0x049b0000)]
  0x04036c00 JavaThread "AWT-EventQueue-0" [_thread_blocked, id=7224, stack(0x04910000,0x04960000)]
=>0x04036000 JavaThread "Thread-5" [_thread_in_vm, id=5868, stack(0x046e0000,0x04730000)]
  0x04037800 JavaThread "EventQueueMonitor-ComponentEvtDispatch" [_thread_blocked, id=7964, stack(0x04690000,0x046e0000)]
  0x04023800 JavaThread "AWT-Windows" daemon [_thread_in_native, id=7752, stack(0x04640000,0x04690000)]
  0x04023000 JavaThread "AWT-Shutdown" [_thread_blocked, id=1388, stack(0x045f0000,0x04640000)]
  0x04022c00 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=5564, stack(0x045a0000,0x045f0000)]
  0x0086f800 JavaThread "Java Plug-In Pipe Worker Thread (Client-Side)" daemon [_thread_in_native, id=5864, stack(0x043f0000,0x04440000)]
  0x04013400 JavaThread "traceMsgQueueThread" daemon [_thread_blocked, id=3684, stack(0x03f20000,0x03f70000)]
  0x00827400 JavaThread "Timer-0" [_thread_blocked, id=4840, stack(0x03dc0000,0x03e10000)]
  0x00804c00 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=3712, stack(0x03d20000,0x03d70000)]
  0x00800800 JavaThread "CompilerThread0" daemon [_thread_blocked, id=6924, stack(0x03cd0000,0x03d20000)]
  0x007ff000 JavaThread "Attach Listener" daemon [_thread_blocked, id=8092, stack(0x03c80000,0x03cd0000)]
  0x007f4400 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=6432, stack(0x00970000,0x009c0000)]
  0x007b3c00 JavaThread "Finalizer" daemon [_thread_blocked, id=8136, stack(0x00920000,0x00970000)]
  0x007af400 JavaThread "Reference Handler" daemon [_thread_blocked, id=7184, stack(0x008d0000,0x00920000)]
  0x0022a000 JavaThread "main" [_thread_blocked, id=7496, stack(0x00350000,0x003a0000)]
Other Threads:
  0x007adc00 VMThread [stack: 0x00880000,0x008d0000] [id=7120]
  0x00806000 WatcherThread [stack: 0x03d70000,0x03dc0000] [id=3704]
VM state:not at safepoint (normal execution)
VM Mutex/Monitor currently owned by a thread:  ([mutex/lock_event])
[0x00227c98] JNIGlobalHandle_lock - owner thread: 0x04036000
Heap
 def new generation   total 1792K, used 1493K [0x236e0000, 0x238d0000, 0x23bc0000)
  eden space 1600K,  92% used [0x236e0000, 0x23850b20, 0x23870000)
  from space 192K,   9% used [0x238a0000, 0x238a4af8, 0x238d0000)
  to   space 192K,   0% used [0x23870000, 0x23870000, 0x238a0000)
 tenured generation   total 22296K, used 18551K [0x23bc0000, 0x25186000, 0x276e0000)
   the space 22296K,  83% used [0x23bc0000, 0x24dddcc8, 0x24ddde00, 0x25186000)
 compacting perm gen  total 12288K, used 8352K [0x276e0000, 0x282e0000, 0x2b6e0000)
   the space 12288K,  67% used [0x276e0000, 0x27f081f8, 0x27f08200, 0x282e0000)
    ro space 8192K,  63% used [0x2b6e0000, 0x2bbf96b0, 0x2bbf9800, 0x2bee0000)
    rw space 12288K,  53% used [0x2bee0000, 0x2c554b80, 0x2c554c00, 0x2cae0000)
Dynamic libraries:
0x00400000 - 0x00424000     C:'Program Files'Java'jre6'bin'java.exe
0x77c60000 - 0x77d9c000     C:'windows'SYSTEM32'ntdll.dll
0x76ee0000 - 0x76fb4000     C:'windows'system32'kernel32.dll
0x760b0000 - 0x760fa000     C:'windows'system32'KERNELBASE.dll
0x77df0000 - 0x77e90000     C:'windows'system32'ADVAPI32.dll
0x76390000 - 0x7643c000     C:'windows'system32'msvcrt.dll
0x768f0000 - 0x76909000     C:'windows'SYSTEM32'sechost.dll
0x76c90000 - 0x76d31000     C:'windows'system32'RPCRT4.dll
0x75d30000 - 0x75d7c000     C:'windows'system32'apphelp.dll
0x61e20000 - 0x61ead000     C:'windows'AppPatch'AcLayers.DLL
0x75d10000 - 0x75d2b000     C:'windows'system32'SspiCli.dll
0x76820000 - 0x768e9000     C:'windows'system32'USER32.dll
0x76630000 - 0x7667e000     C:'windows'system32'GDI32.dll
0x77dc0000 - 0x77dca000     C:'windows'system32'LPK.dll
0x76bb0000 - 0x76c4d000     C:'windows'system32'USP10.dll
0x76fc0000 - 0x77c0a000     C:'windows'system32'SHELL32.dll
0x76100000 - 0x76157000     C:'windows'system32'SHLWAPI.dll
0x76980000 - 0x76adc000     C:'windows'system32'ole32.dll
0x76160000 - 0x761ef000     C:'windows'system32'OLEAUT32.dll
0x75410000 - 0x75427000     C:'windows'system32'USERENV.dll
0x75e00000 - 0x75e0b000     C:'windows'system32'profapi.dll
0x72f20000 - 0x72f71000     C:'windows'system32'WINSPOOL.DRV
0x6fd50000 - 0x6fd62000     C:'windows'system32'MPR.dll
0x77da0000 - 0x77dbf000     C:'windows'system32'IMM32.DLL
0x76ae0000 - 0x76bac000     C:'windows'system32'MSCTF.dll
0x7c340000 - 0x7c396000     C:'Program Files'Java'jre6'bin'msvcr71.dll
0x6d800000 - 0x6da8b000     C:'Program Files'Java'jre6'bin'client'jvm.dll
0x743d0000 - 0x74402000     C:'windows'system32'WINMM.dll
0x6d7b0000 - 0x6d7bc000     C:'Program Files'Java'jre6'bin'verify.dll
0x6d330000 - 0x6d34f000     C:'Program Files'Java'jre6'bin'java.dll
0x6d290000 - 0x6d298000     C:'Program Files'Java'jre6'bin'hpi.dll
0x77de0000 - 0x77de5000     C:'windows'system32'PSAPI.DLL
0x6d7f0000 - 0x6d7ff000     C:'Program Files'Java'jre6'bin'zip.dll
0x6d430000 - 0x6d436000     C:'Program Files'Java'jre6'bin'jp2native.dll
0x6d1d0000 - 0x6d1e3000     C:'Program Files'Java'jre6'bin'deploy.dll
0x75f90000 - 0x760ad000     C:'windows'system32'CRYPT32.dll
0x75e70000 - 0x75e7c000     C:'windows'system32'MSASN1.dll
0x76dc0000 - 0x76eda000     C:'windows'system32'WININET.dll
0x77dd0000 - 0x77dd3000     C:'windows'system32'Normaliz.dll
0x76440000 - 0x765f8000     C:'windows'system32'iertutil.dll
0x76710000 - 0x76820000     C:'windows'system32'urlmon.dll
0x6d6b0000 - 0x6d6f3000     C:'Program Files'Java'jre6'bin'regutils.dll
0x753a0000 - 0x753a9000     C:'windows'system32'VERSION.dll
0x6fd80000 - 0x6ffc0000     C:'windows'system32'msi.dll
0x6d610000 - 0x6d623000     C:'Program Files'Java'jre6'bin'net.dll
0x76c50000 - 0x76c85000     C:'windows'system32'WS2_32.dll
0x76970000 - 0x76976000     C:'windows'system32'NSI.dll
0x75870000 - 0x758ac000     C:'windows'system32'mswsock.dll
0x75860000 - 0x75866000     C:'windows'System32'wship6.dll
0x6d630000 - 0x6d639000     C:'Program Files'Java'jre6'bin'nio.dll
0x6d000000 - 0x6d14a000     C:'Program Files'Java'jre6'bin'awt.dll
0x74d00000 - 0x74e9e000     C:'windows'WinSxS'x86_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.17514_none_41e6975e2bd6f2b2'comctl32.dll
0x74a40000 - 0x74a53000     C:'windows'system32'DWMAPI.DLL
0x74cc0000 - 0x74d00000     C:'windows'system32'uxtheme.dll
0x75d80000 - 0x75d8c000     C:'windows'system32'CRYPTBASE.dll
0x63420000 - 0x63451000     C:'Program Files'Java'jre6'bin'JavaAccessBridge.dll
0x6d360000 - 0x6d366000     C:'Program Files'Java'jre6'bin'jawt.dll
0x70b90000 - 0x70b9d000     C:'Program Files'Java'jre6'bin'JAWTAccessBridge.dll
0x6d230000 - 0x6d284000     C:'Program Files'Java'jre6'bin'fontmanager.dll
0x759e0000 - 0x759e8000     C:'windows'system32'Secur32.dll
0x75710000 - 0x75754000     C:'windows'system32'dnsapi.DLL
0x73ff0000 - 0x7400c000     C:'windows'system32'iphlpapi.DLL
0x73fd0000 - 0x73fd7000     C:'windows'system32'WINNSI.DLL
0x752f0000 - 0x752f5000     C:'windows'System32'wshtcpip.dll
0x72b70000 - 0x72b94000     C:'Program Files'Common Files'Microsoft Shared'Windows Live'WLIDNSP.DLL
0x72490000 - 0x72496000     C:'windows'system32'rasadhlp.dll
0x73ea0000 - 0x73ed8000     C:'windows'System32'fwpuclnt.dll
0x67d00000 - 0x67d3a000     C:'Program Files'UltraMon'RTSUltraMonHook.dll
0x67d40000 - 0x67d91000     C:'Program Files'UltraMon'UltraMonResButtons.dll
0x74b30000 - 0x74cc0000     C:'windows'WinSxS'x86_microsoft.windows.gdiplus_6595b64144ccf1df_1.1.7601.17514_none_72d18a4386696c80'gdiplus.dll
0x74680000 - 0x7477b000     C:'windows'system32'WindowsCodecs.dll
0x75920000 - 0x75936000     C:'windows'system32'CRYPTSP.dll
0x75630000 - 0x7566b000     C:'windows'system32'rsaenh.dll
0x74220000 - 0x74230000     C:'windows'system32'NLAapi.dll
0x72bc0000 - 0x72bd0000     C:'windows'system32'napinsp.dll
0x72ba0000 - 0x72bb2000     C:'windows'system32'pnrpnsp.dll
0x72b60000 - 0x72b68000     C:'windows'System32'winrnr.dll
VM Arguments:
jvm_args: -D__jvm_launched=612118666339 -Xbootclasspath/a:C:''PROGRA~1''Java''jre6''lib''deploy.jar;C:''PROGRA~1''Java''jre6''lib''javaws.jar;C:''PROGRA~1''Java''jre6''lib''plugin.jar -Dsun.plugin2.jvm.args=-D__jvm_launched=612118666339 "-Xbootclasspath/a:C:''''PROGRA~1''''Java''''jre6''''lib''''deploy.jar;C:''''PROGRA~1''''Java''''jre6''''lib''''javaws.jar;C:''''PROGRA~1''''Java''''jre6''''lib''''plugin.jar" "-Djava.class.path=C:''''PROGRA~1''''Java''''jre6''''classes" --- -- 
java_command: sun.plugin2.main.client.PluginMain write_pipe_name=jpi2_pid7848_pipe3,read_pipe_name=jpi2_pid7848_pipe2
Launcher Type: SUN_STANDARD
Environment Variables:
PATH=C:'Program Files'Common Files'Microsoft Shared'Windows Live;C:'windows'system32;C:'windows;C:'windows'System32'Wbem;C:'windows'System32'WindowsPowerShell'v1.0';C:'Program Files'Intel'WiFi'bin';C:'Program Files'Common Files'Intel'WirelessCommon';C:'Program Files'Toshiba'Bluetooth Toshiba Stack'sys';C:'Program Files'QuickTime'QTSystem';C:'Program Files'Ericsson'Solidus eCare'Applications'Bin;C:'Program Files'Common Files'EricssonShare;C:'Program Files'Common Files'EricssonShare'NextCCShare;C:'Program Files'Ericsson'Solidus eCare'ScriptManager'Bin;C:'Program Files'Ericsson'Solidus eCare'ScriptManager'Bin'ThirdParty;C:'Program Files'Bitvise Tunnelier;C:'Program Files'Internet Explorer;
USERNAME=HomeTest
OS=Windows_NT
PROCESSOR_IDENTIFIER=x86 Family 6 Model 37 Stepping 5, GenuineIntel

---------------  S Y S T E M  ---------------
OS: Windows 7 Build 7601 Service Pack 1
CPU:total 4 (8 cores per cpu, 2 threads per core) family 6 model 37 stepping 5, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, ht
Memory: 4k page, physical 2097151k(951176k free), swap 4194303k(3170808k free)
vm_info: Java HotSpot(TM) Client VM (14.0-b16) for windows-x86 JRE (1.6.0_14-b08), built on May 21 2009 08:03:56 by "java_re" with MS VC++ 7.1
time: Mon Sep 05 09:29:29 2011
elapsed time: 16 seconds

下面是触发它的代码:

public static AccessibleTreeItem GetAccessibleContextInfo(Int32 vmID, IntPtr ac, out AccessibleContextInfo acInfo, AccessibleTreeItem parentItem)
{
    unsafe
    {
        // Allocate global memory space for the size of AccessibleContextInfo and store the address in acPtr
        IntPtr acPtr = Marshal.AllocHGlobal(Marshal.SizeOf(new AccessibleContextInfo()));
        try
        {
            Marshal.StructureToPtr(new AccessibleContextInfo(), acPtr, true);
            if (WABAPI.getAccessibleContextInfo(vmID, ac, acPtr))
            {
                acInfo = (AccessibleContextInfo)Marshal.PtrToStructure(acPtr, typeof(AccessibleContextInfo));
                if (!ReferenceEquals(acInfo, null))
                {
                    IntPtr ati = Marshal.AllocHGlobal(Marshal.SizeOf(new AccessibleTextItemsInfo()));
                    WABAPI.getAccessibleTextItems(vmID, ac, ati, 0); //THIS IS WHERE WE DO IT
                    AccessibleTextItemsInfo atInfo = (AccessibleTextItemsInfo)Marshal.PtrToStructure(ati, typeof(AccessibleTextItemsInfo));
                    IntPtr ainfo = Marshal.AllocHGlobal(Marshal.SizeOf(new AccessibleTextInfo()));
                    WABAPI.getAccessibleTextInfo(vmID, ac, ainfo, 0, 0);
                    AccessibleTextInfo atextInfo = (AccessibleTextInfo)Marshal.PtrToStructure(ati, typeof(AccessibleTextInfo));
                    AccessibleTreeItem newItem = BuildAccessibleTree(acInfo, atInfo, parentItem, acPtr, atextInfo);
                    newItem.setAccessibleText(atInfo, atextInfo);
                    if (ati != IntPtr.Zero)
                    {
                        Marshal.FreeHGlobal(ati);
                    }
                    if (ainfo != IntPtr.Zero)
                    {
                        Marshal.FreeHGlobal(ainfo);
                    }
                    if (!ReferenceEquals(newItem, null))
                    {
                        for (int i = 0; i < acInfo.childrenCount; i++)
                        {
                            //Used roles = text, page tab, push button
                            if (acInfo.role_en_US != "unknown" && acInfo.states_en_US.Contains("visible")) // Note the optomization here, I found this get me to an acceptable speed
                            {
                                AccessibleContextInfo childAc = new AccessibleContextInfo();
                                IntPtr childContext = WABAPI.getAccessibleChildFromContext(vmID, ac, i);
                                GetAccessibleContextInfo(vmID, childContext, out childAc, newItem);
                                //WABAPI.releaseJavaObject(vmID, childContext);
                            }
                        }
                    }
                    return newItem;
                }
            }
            else
            {
                acInfo = new AccessibleContextInfo();
            }
        }
        finally
        {
            //WABAPI.releaseJavaObject(vmID, ac);
            if (acPtr != IntPtr.Zero)
                Marshal.FreeHGlobal(acPtr);
        }
    }
    return null;
}

当我取消注释具有WABAPI.releaseJavaObject(vmID, jobject)的行时,我得到了结果崩溃。有时。我已经检查了vmID和ac,以确保它们是有效值(即非0),但问题仍然发生。

我的程序在没有releaseJavaObject()线的情况下正常工作,但是RAM使用气球和整个系统将会停止。这当然是意料之中的,因为JAB文档建议需要释放所有对象,以免发生内存泄漏。

谁能告诉我为什么releaseJavaObject()崩溃?

我应该注意到,我上面使用的函数是从Oracle论坛复制粘贴的,我没有研究它是如何工作的。但这是使用不安全代码的唯一位置,我的应用程序和JAB之间的所有交互都发生在那个函数中。

Java Access Bridge在releaseJavaObject()上导致JVM崩溃

因为函数是递归调用的,所以它会在'finally'块中释放父对象的句柄,然后转到下一个子对象。没有父句柄,函数失败(没有任何错误捕获,d'oh),并且JVM因ac的无效值而崩溃。