jvm打印的异常

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ILLEGAL_INSTRUCTION (0xc000001d) at pc=0x000007fee0425c01, pid=2104, tid=0x0000000000000eb8
#
# JRE version: Java(TM) SE Runtime Environment (8.0_144-b01) (build 1.8.0_144-b01)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.144-b01 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# C  [MSVCR120.dll+0x95c01]
#
# Failed to write core dump. Minidumps are not enabled by default on client versions of Windows
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#

---------------  T H R E A D  ---------------

Current thread (0x00000000021ad800):  JavaThread "main" [_thread_in_native, id=3768, stack(0x0000000002400000,0x0000000002500000)]

siginfo: ExceptionCode=0xc000001d

Registers:
RAX=0x0000000062063128, RBX=0x0000000061db0048, RCX=0x0000000000000000, RDX=0x0000000000000000
RSP=0x00000000024feaf0, RBP=0x00000000024fecc9, RSI=0x0000000059018000, RDI=0x0000000061db0040
R8 =0x00000000000041a0, R9 =0x0000000000000001, R10=0x0000000000000000, R11=0x0000000062063128
R12=0x0000000000000000, R13=0x00000000024fedf0, R14=0x00000000ffffffff, R15=0x000000000000003d
RIP=0x000007fee0425c01, EFLAGS=0x0000000000010202

Top of Stack: (sp=0x00000000024feaf0)
0x00000000024feaf0:   000000500007080a 0000000000000002
0x00000000024feb00:   0000000000003600 000007fedffaed80
0x00000000024feb10:   0000000000046ed9 000007fedd34a8c3
0x00000000024feb20:   0000000000000000 0000000000000000
0x00000000024feb30:   000000005d790088 000000005d790040
0x00000000024feb40:   000000390006e400 00000000024fedf0
0x00000000024feb50:   0000000000000039 000000005d790040
0x00000000024feb60:   0000000000000000 0000000000000000
0x00000000024feb70:   0000000000000000 0000000000000000
0x00000000024feb80:   0000000000000000 0000000000000000
0x00000000024feb90:   0000000000000000 0000000061db0040
0x00000000024feba0:   000000000000003d 0000000000000000
0x00000000024febb0:   0000000061db0040 000007fedd348203
0x00000000024febc0:   0000000061db0040 00000000ffffffff
0x00000000024febd0:   0000000061db0048 00000000024fecc9
0x00000000024febe0:   0000000061db0040 00000000024fecc9 

Instructions: (pc=0x000007fee0425c01)
0x000007fee0425be1:   0f 10 d0 f2 0f 10 44 24 10 f2 0f 10 4c 24 20 44
0x000007fee0425bf1:   8b 0d 15 26 02 00 e8 34 c7 00 00 e9 72 f8 ff ff
0x000007fee0425c01:   c5 fb 11 44 24 10 c5 fb 11 4c 24 20 48 8b 54 24
0x000007fee0425c11:   10 4c 8b 44 24 20 4c 8b 15 4a 26 02 00 4d 23 d0 


Register to memory mapping:

RAX=0x0000000062063128 is an unknown value
RBX=0x0000000061db0048 is an unknown value
RCX=0x0000000000000000 is an unknown value
RDX=0x0000000000000000 is an unknown value
RSP=0x00000000024feaf0 is pointing into the stack for thread: 0x00000000021ad800
RBP=0x00000000024fecc9 is pointing into the stack for thread: 0x00000000021ad800
RSI=0x0000000059018000 is an unknown value
RDI=0x0000000061db0040 is an unknown value
R8 =0x00000000000041a0 is an unknown value
R9 =0x0000000000000001 is an unknown value
R10=0x0000000000000000 is an unknown value
R11=0x0000000062063128 is an unknown value
R12=0x0000000000000000 is an unknown value
R13=0x00000000024fedf0 is pointing into the stack for thread: 0x00000000021ad800
R14=0x00000000ffffffff is an unallocated location in the heap
R15=0x000000000000003d is an unknown value


Stack: [0x0000000002400000,0x0000000002500000],  sp=0x00000000024feaf0,  free space=1018k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
C  [MSVCR120.dll+0x95c01]
C  [libarcsoft_face.dll+0xa8203]
C  [libarcsoft_face.dll+0x3294]
C  [libarcsoft_face_engine.dll+0x4018]
C  [libarcsoft_face_engine_jni.dll+0x235b]
C  0x0000000002517994

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  com.arcsoft.face.FaceEngine.initFaceEngine(JIIIILcom/arcsoft/face/FaceEngine;)J+0
j  com.arcsoft.face.FaceEngine.init(Lcom/arcsoft/face/EngineConfiguration;)V+148
j  FaceEngineTest.faceEngineTest()V+107
j  FaceEngineTest.main([Ljava/lang/String;)V+7
v  ~StubRoutines::call_stub

---------------  P R O C E S S  ---------------

Java Threads: ( => current thread )
  0x000000005952e800 JavaThread "Java2D Disposer" daemon [_thread_blocked, id=1680, stack(0x0000000059310000,0x0000000059410000)]
  0x0000000058863800 JavaThread "Service Thread" daemon [_thread_blocked, id=5156, stack(0x00000000591b0000,0x00000000592b0000)]
  0x00000000587dc000 JavaThread "C1 CompilerThread2" daemon [_thread_blocked, id=5384, stack(0x00000000590a0000,0x00000000591a0000)]
  0x00000000587da800 JavaThread "C2 CompilerThread1" daemon [_thread_blocked, id=3536, stack(0x0000000058e50000,0x0000000058f50000)]
  0x000000005740f800 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=5672, stack(0x0000000058bf0000,0x0000000058cf0000)]
  0x00000000587c9800 JavaThread "Attach Listener" daemon [_thread_blocked, id=5064, stack(0x00000000585a0000,0x00000000586a0000)]
  0x00000000587d3800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=5508, stack(0x0000000058cf0000,0x0000000058df0000)]
  0x00000000573e9000 JavaThread "Finalizer" daemon [_thread_blocked, id=5268, stack(0x00000000586c0000,0x00000000587c0000)]
  0x00000000573a1800 JavaThread "Reference Handler" daemon [_thread_blocked, id=1028, stack(0x0000000058490000,0x0000000058590000)]
=>0x00000000021ad800 JavaThread "main" [_thread_in_native, id=3768, stack(0x0000000002400000,0x0000000002500000)]

Other Threads:
  0x000000005739a000 VMThread [stack: 0x00000000582c0000,0x00000000583c0000] [id=2660]
  0x00000000588b6000 WatcherThread [stack: 0x0000000059410000,0x0000000059510000] [id=5648]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap:
 PSYoungGen      total 38400K, used 17746K [0x00000000d5900000, 0x00000000d8380000, 0x0000000100000000)
  eden space 33280K, 39% used [0x00000000d5900000,0x00000000d65f79e0,0x00000000d7980000)
  from space 5120K, 87% used [0x00000000d7980000,0x00000000d7ddcfe0,0x00000000d7e80000)
  to   space 5120K, 0% used [0x00000000d7e80000,0x00000000d7e80000,0x00000000d8380000)
 ParOldGen       total 87552K, used 8K [0x0000000080a00000, 0x0000000085f80000, 0x00000000d5900000)
  object space 87552K, 0% used [0x0000000080a00000,0x0000000080a02000,0x0000000085f80000)
 Metaspace       used 5187K, capacity 5314K, committed 5632K, reserved 1056768K
  class space    used 593K, capacity 665K, committed 768K, reserved 1048576K

Card table byte_map: [0x00000000118c0000,0x0000000011cc0000] byte_map_base: 0x00000000114bb000

Marking Bits: (ParMarkBitMap*) 0x0000000065efd850
 Begin Bits: [0x0000000012660000, 0x0000000014638000)
 End Bits:   [0x0000000014638000, 0x0000000016610000)

Polling page: 0x0000000000110000

CodeCache: size=245760Kb used=1802Kb max_used=1802Kb free=243957Kb
 bounds [0x0000000002500000, 0x0000000002770000, 0x0000000011500000]
 total_blobs=591 nmethods=291 adapters=214
 compilation: enabled

Compilation events (10 events):
Event: 0.517 Thread 0x00000000587dc000  287       3       java.util.concurrent.ConcurrentHashMap::addCount (292 bytes)
Event: 0.518 Thread 0x00000000587dc000 nmethod 287 0x00000000026bc950 code [0x00000000026bcb60, 0x00000000026bd668]
Event: 0.518 Thread 0x00000000587dc000  288       1       java.net.URL::getPath (5 bytes)
Event: 0.518 Thread 0x00000000587dc000 nmethod 288 0x00000000026bc690 code [0x00000000026bc7e0, 0x00000000026bc8f0]
Event: 0.518 Thread 0x00000000587dc000  290       3       java.lang.CharacterDataLatin1::toUpperCase (53 bytes)
Event: 0.518 Thread 0x00000000587dc000 nmethod 290 0x00000000026c1f10 code [0x00000000026c2080, 0x00000000026c2350]
Event: 0.518 Thread 0x00000000587dc000  291   !   3       sun.misc.URLClassPath$JarLoader::getResource (85 bytes)
Event: 0.519 Thread 0x00000000587dc000 nmethod 291 0x00000000026c0990 code [0x00000000026c0be0, 0x00000000026c17e8]
Event: 0.519 Thread 0x00000000587dc000  289       1       java.net.URL::getAuthority (5 bytes)
Event: 0.519 Thread 0x00000000587dc000 nmethod 289 0x00000000026bc350 code [0x00000000026bc4a0, 0x00000000026bc5b0]

GC Heap History (2 events):
Event: 0.244 GC heap before
{Heap before GC invocations=1 (full 0):
 PSYoungGen      total 38400K, used 33280K [0x00000000d5900000, 0x00000000d8380000, 0x0000000100000000)
  eden space 33280K, 100% used [0x00000000d5900000,0x00000000d7980000,0x00000000d7980000)
  from space 5120K, 0% used [0x00000000d7e80000,0x00000000d7e80000,0x00000000d8380000)
  to   space 5120K, 0% used [0x00000000d7980000,0x00000000d7980000,0x00000000d7e80000)
 ParOldGen       total 87552K, used 0K [0x0000000080a00000, 0x0000000085f80000, 0x00000000d5900000)
  object space 87552K, 0% used [0x0000000080a00000,0x0000000080a00000,0x0000000085f80000)
 Metaspace       used 5104K, capacity 5208K, committed 5248K, reserved 1056768K
  class space    used 584K, capacity 627K, committed 640K, reserved 1048576K
Event: 0.246 GC heap after
Heap after GC invocations=1 (full 0):
 PSYoungGen      total 38400K, used 4467K [0x00000000d5900000, 0x00000000d8380000, 0x0000000100000000)
  eden space 33280K, 0% used [0x00000000d5900000,0x00000000d5900000,0x00000000d7980000)
  from space 5120K, 87% used [0x00000000d7980000,0x00000000d7ddcfe0,0x00000000d7e80000)
  to   space 5120K, 0% used [0x00000000d7e80000,0x00000000d7e80000,0x00000000d8380000)
 ParOldGen       total 87552K, used 8K [0x0000000080a00000, 0x0000000085f80000, 0x00000000d5900000)
  object space 87552K, 0% used [0x0000000080a00000,0x0000000080a02000,0x0000000085f80000)
 Metaspace       used 5104K, capacity 5208K, committed 5248K, reserved 1056768K
  class space    used 584K, capacity 627K, committed 640K, reserved 1048576K
}

Deoptimization events (3 events):
Event: 0.214 Thread 0x00000000021ad800 Uncommon trap: reason=unstable_if action=reinterpret pc=0x00000000026b0818 method=java.awt.image.BufferedImage.setRGB(IIII[III)V @ 16
Event: 0.261 Thread 0x00000000021ad800 Uncommon trap: reason=unstable_if action=reinterpret pc=0x00000000026a1870 method=java.awt.image.BufferedImage.getRGB(IIII[III)[I @ 163
Event: 0.261 Thread 0x00000000021ad800 Uncommon trap: reason=unstable_if action=reinterpret pc=0x00000000026af99c method=java.awt.image.ComponentColorModel.getDataElements(ILjava/lang/Object;)Ljava/lang/Object; @ 30

Internal exceptions (9 events):
Event: 0.019 Thread 0x00000000021ad800 Exception <a 'java/lang/NoSuchMethodError': Method sun.misc.Unsafe.defineClass(Ljava/lang/String;[BII)Ljava/lang/Class; name or signature does not match> (0x00000000d5907ca8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u144\9417\hotspot\
Event: 0.019 Thread 0x00000000021ad800 Exception <a 'java/lang/NoSuchMethodError': Method sun.misc.Unsafe.prefetchRead(Ljava/lang/Object;J)V name or signature does not match> (0x00000000d5907f90) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u144\9417\hotspot\src\share\vm\prims
Event: 0.078 Thread 0x00000000021ad800 Exception <a 'java/security/PrivilegedActionException'> (0x00000000d5a15ce0) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u144\9417\hotspot\src\share\vm\prims\jvm.cpp, line 1390]
Event: 0.078 Thread 0x00000000021ad800 Exception <a 'java/security/PrivilegedActionException'> (0x00000000d5a160d8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u144\9417\hotspot\src\share\vm\prims\jvm.cpp, line 1390]
Event: 0.078 Thread 0x00000000021ad800 Exception <a 'java/security/PrivilegedActionException'> (0x00000000d5a19f30) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u144\9417\hotspot\src\share\vm\prims\jvm.cpp, line 1390]
Event: 0.078 Thread 0x00000000021ad800 Exception <a 'java/security/PrivilegedActionException'> (0x00000000d5a1a328) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u144\9417\hotspot\src\share\vm\prims\jvm.cpp, line 1390]
Event: 0.082 Thread 0x00000000021ad800 Exception <a 'java/io/FileNotFoundException'> (0x00000000d5a228c8) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u144\9417\hotspot\src\share\vm\prims\jni.cpp, line 709]
Event: 0.106 Thread 0x00000000021ad800 Exception <a 'java/lang/NoSuchFieldError': method resolution failed> (0x00000000d5b95fa0) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u144\9417\hotspot\src\share\vm\prims\methodHandles.cpp, line 1146]
Event: 0.107 Thread 0x00000000021ad800 Exception <a 'java/lang/NoSuchFieldError': method resolution failed> (0x00000000d5ba3760) thrown at [C:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u144\9417\hotspot\src\share\vm\prims\methodHandles.cpp, line 1146]

Events (10 events):
Event: 0.517 loading class com/arcsoft/face/EngineConfiguration$Builder
Event: 0.517 loading class com/arcsoft/face/EngineConfiguration$Builder done
Event: 0.517 loading class com/arcsoft/face/FunctionConfiguration
Event: 0.517 loading class com/arcsoft/face/FunctionConfiguration done
Event: 0.518 loading class com/arcsoft/face/FunctionConfiguration$Builder
Event: 0.518 loading class com/arcsoft/face/FunctionConfiguration$Builder done
Event: 0.518 loading class com/arcsoft/face/enums/DetectMode
Event: 0.518 loading class com/arcsoft/face/enums/DetectMode done
Event: 0.518 loading class com/arcsoft/face/enums/DetectOrient
Event: 0.518 loading class com/arcsoft/face/enums/DetectOrient done


Dynamic libraries:
0x000000013ff40000 - 0x000000013ff77000     C:\ProgramData\Oracle\Java\javapath\java.exe
0x0000000077bf0000 - 0x0000000077d9b000     C:\Windows\SYSTEM32\ntdll.dll
0x00000000779d0000 - 0x0000000077aef000     C:\Windows\system32\kernel32.dll
0x000007fefdc40000 - 0x000007fefdcab000     C:\Windows\system32\KERNELBASE.dll
0x000007fefe630000 - 0x000007fefe70b000     C:\Windows\system32\ADVAPI32.dll
0x000007fefdf20000 - 0x000007fefdfbf000     C:\Windows\system32\msvcrt.dll
0x000007feffee0000 - 0x000007feffeff000     C:\Windows\SYSTEM32\sechost.dll
0x000007feffa70000 - 0x000007feffb9e000     C:\Windows\system32\RPCRT4.dll
0x0000000077af0000 - 0x0000000077bea000     C:\Windows\system32\USER32.dll
0x000007fefe0e0000 - 0x000007fefe147000     C:\Windows\system32\GDI32.dll
0x000007feffba0000 - 0x000007feffbae000     C:\Windows\system32\LPK.dll
0x000007fefdfc0000 - 0x000007fefe08a000     C:\Windows\system32\USP10.dll
0x000007fefb350000 - 0x000007fefb544000     C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7600.16385_none_fa645303170382f6\COMCTL32.dll
0x000007fefe710000 - 0x000007fefe781000     C:\Windows\system32\SHLWAPI.dll
0x000007fefecb0000 - 0x000007fefecde000     C:\Windows\system32\IMM32.DLL
0x000007feffdd0000 - 0x000007feffed9000     C:\Windows\system32\MSCTF.dll
0x0000000074da0000 - 0x0000000074e72000     D:\Program Files\Java\jre1.8.0_144\bin\msvcr100.dll
0x00000000656e0000 - 0x0000000065f7d000     D:\Program Files\Java\jre1.8.0_144\bin\server\jvm.dll
0x000007fee5910000 - 0x000007fee5919000     C:\Windows\system32\WSOCK32.dll
0x000007fefe090000 - 0x000007fefe0dd000     C:\Windows\system32\WS2_32.dll
0x000007feffbb0000 - 0x000007feffbb8000     C:\Windows\system32\NSI.dll
0x000007fef9710000 - 0x000007fef974b000     C:\Windows\system32\WINMM.dll
0x000007fefce30000 - 0x000007fefce3c000     C:\Windows\system32\VERSION.dll
0x0000000077db0000 - 0x0000000077db7000     C:\Windows\system32\PSAPI.DLL
0x0000000074d90000 - 0x0000000074d9f000     D:\Program Files\Java\jre1.8.0_144\bin\verify.dll
0x0000000074d60000 - 0x0000000074d89000     D:\Program Files\Java\jre1.8.0_144\bin\java.dll
0x0000000074d40000 - 0x0000000074d56000     D:\Program Files\Java\jre1.8.0_144\bin\zip.dll
0x000007fefece0000 - 0x000007feffa66000     C:\Windows\system32\SHELL32.dll
0x000007feffbc0000 - 0x000007feffdc1000     C:\Windows\system32\ole32.dll
0x000007fefdb50000 - 0x000007fefdb5f000     C:\Windows\system32\profapi.dll
0x0000000065540000 - 0x00000000656d8000     D:\Program Files\Java\jre1.8.0_144\bin\awt.dll
0x000007fefe150000 - 0x000007fefe227000     C:\Windows\system32\OLEAUT32.dll
0x0000000074d00000 - 0x0000000074d31000     D:\Program Files\Java\jre1.8.0_144\bin\jpeg.dll
0x000007fee5760000 - 0x000007fee576a000     D:\Program Files\Java\jre1.8.0_144\bin\libarcsoft_face_engine_jni.dll
0x000007fee0480000 - 0x000007fee0526000     D:\Program Files\Java\jdk1.8.0_144\jre\bin\MSVCP120.dll
0x000007fee0390000 - 0x000007fee047f000     D:\Program Files\Java\jdk1.8.0_144\jre\bin\MSVCR120.dll
0x000007fee0320000 - 0x000007fee0386000     D:\Program Files\Java\jdk1.8.0_144\bin\libarcsoft_face_engine.dll
0x000007fedd2a0000 - 0x000007fedffcf000     D:\Program Files\Java\jdk1.8.0_144\bin\libarcsoft_face.dll
0x000007fefe230000 - 0x000007fefe280000     C:\Windows\system32\WLDAP32.dll
0x000007fefacb0000 - 0x000007fefacd7000     C:\Windows\system32\IPHLPAPI.DLL
0x000007fefaca0000 - 0x000007fefacab000     C:\Windows\system32\WINNSI.DLL
0x000007fefa730000 - 0x000007fefa748000     C:\Windows\system32\dhcpcsvc.DLL
0x000007fefd380000 - 0x000007fefd3d4000     C:\Windows\System32\mswsock.dll
0x000007fefd200000 - 0x000007fefd25b000     C:\Windows\system32\DNSAPI.dll
0x000007fefab00000 - 0x000007fefab53000     C:\Windows\System32\fwpuclnt.dll
0x000007fefa480000 - 0x000007fefa488000     C:\Windows\system32\rasadhlp.dll
0x000007fefd370000 - 0x000007fefd377000     C:\Windows\System32\wship6.dll
0x000007fefc860000 - 0x000007fefc867000     C:\Windows\System32\wshtcpip.dll
0x000007fef95e0000 - 0x000007fef9705000     C:\Windows\system32\dbghelp.dll

VM Arguments:
java_command: hrTest.jar
java_class_path (initial): hrTest.jar
Launcher Type: SUN_STANDARD

Environment Variables:
JAVA_HOME=D:\Program Files\Java\jdk1.8.0_144
CLASSPATH=.;D:\Program Files\Java\jdk1.8.0_144\lib\dt.jar;D:\Program Files\Java\jdk1.8.0_144\lib\tools.jar;
PATH=C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\Tools\Binn\;C:\Program Files\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\;C:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;D:\Program Files\MySQL\MySQL Server 5.6\bin;D:\Program Files\Java\jdk1.8.0_144\bin;D:\Program Files\Java\jdk1.8.0_144\jre\bin;
USERNAME=Administrator
OS=Windows_NT
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 158 Stepping 9, GenuineIntel

---------------  S Y S T E M  ---------------

OS: Windows 7 , 64 bit Build 7600 (6.1.7600.16385)

CPU:total 4 (initial active 4) (4 cores per cpu, 1 threads per core) family 6 model 158 stepping 9, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, aes, clmul, erms, 3dnowpref, lzcnt, tsc, tscinvbit, bmi1, bmi2, adx

Memory: 4k page, physical 8346320k(4030416k free), swap 16690744k(11034788k free)

vm_info: Java HotSpot(TM) 64-Bit Server VM (25.144-b01) for windows-amd64 JRE (1.8.0_144-b01), built on Jul 21 2017 21:57:33 by "java_re" with MS VC++ 10.0 (VS2010)

time: Sat Dec 21 22:38:31 2019
elapsed time: 0 seconds (0d 0h 0m 0s)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
异常概述 •异常处理已经成为衡量一门语言是否成熟的标准之一,目前的主流编程语言如C++、C#、Ruby、 Python等,大都提供了异常处理机制。增加了异常处理机制后的程序有更好的容错性,更加健壮。 传统错误处理的缺陷 •传统错误处理机制,主要如下两个缺点:   –无法穷举所有异常情况:因为人类知识的限制,异常情况总比可以考虑到的情况多,总有“漏网之鱼”的异常情况,所以程序总是不够健壮。   –错误处理代码和业务实现代码混杂:这种错误处理和业务实现混杂的代码严重影响程序的可读性,会增加程序维护的难度。 使用try...catch捕获异常 •执行try块里的业务逻辑代码时出现异常,系统自动生成一个异常对象,该异常对象被提交给Java运 行时环境,这个过程被称为抛出(throw)异常。 •Java运行时环境收到异常对象时,会寻找能处理该异常对象的catch块,如果找到合适的catch块并 把该异常对象交给该catch块处理,那这个过程被称为捕获(catch)异常;如果Java运行时环境找 不到捕获异常的catch块,则运行时环境终止,Java程序也将退出。 异常的捕捉流程 Java的异常体系 访问异常信息 •如果程序需要在catch块中访问异常对象的相关信息,可以通过调用catch后异常形参的方法来获 得。当Java运行时决定调用某个catch块来处理该异常对象时,会将该异常对象赋给catch块后的异 常参数,程序就可以通过该参数来获得该异常的相关信息。 •所有异常对象都包含了如下几个常用方法:   –getMessage():返回该异常的详细描述字符串。   –printStackTrace():将该异常的跟踪栈信息输出到标准错误输出。   –printStackTrace(PrintStream s):将该异常的跟踪栈信息输出到指定输出流。   –getStackTrace():返回该异常的跟踪栈信息。 异常处理 复制代码 try { 需要检测的代码; } catch(异常类 变量) { 异常处理代码; } finally { 一定会执行的代码; } 复制代码 Finally代码块只有一种情况不会被执行。就是在之前执行了System.exit(0)。 Java 7提供的多异常捕捉 •在Java 7以前,每个catch块只能捕捉一个异常。从Java 7开始,一个catch块可以捕捉多个异常。 –catch(异常1 | 异常 2 | 异常3 ex) –{ –} •多个异常之间用竖线隔开。 •多异常捕捉时,异常变量之前有隐式final修饰。 本文原创作者:pipi-changing 本文原创出处:http://www.cnblogs.com/pipi-changing/ 使用finally回收资源 •程序在try块里打开了一些物理资源(例如数据库连接、网络连接和磁盘文件等),这些物理资源都 必须显式回收。 •为了保证一定能回收try块中打开的物理资源,异常处理机制提供了finally块。不管try块中的代码是 否出现异常,也不管哪一个catch块被执行,finally块总会被执行。 异常处理的嵌套 •异常处理流程代码可以放在任何能放可执行性代码的地方,因此完整的异常处理流程既可放在try块 里,也可放在catch块里,也可放在finally块里。 •异常处理嵌套的深度没有很明确的限制,但通常没有必要使用超过两层的嵌套异常处理,层次太深的 嵌套异常处理没有太大必要,而且导致程序可读性降低。 Java 7的自动关闭资源的try语句 –try( – // 此处声明的资源, 系统可以自动关闭它。 –) –{ – // –} •对于自动关闭资源的try语句, 可以没有catch和finally——try块可以孤独地存在。 •自动关闭资源的try语句,有两个注意点:   –只有放在try后面的圆括号里的资源才会被关闭。   –能被自动关闭的资源必须实现Closeable或AutoCloseable接口。 Checked异常与Runtime异常 •Java的异常被分为两大类:Checked异常和Runtime异常(运行时异常)。所有 RuntimeException类及其子类的实例被称为Runtime异常;不是RuntimeException类及其子类 的异常实例则被称为Checked异常。 Checked异常的处理 •当前方法明确知道如何处理该异常,程序应该使用try...catch块来捕获该异常,然后在对应的catch 块中修改该异常。 •当前方法不知道如何处理这种异常,应该在定义该方法时声明抛出该异常。 Runtime异常的处理 •Runtime异常则更加灵活,Runtime异常无需显式声明抛出。 •如果程序需要捕捉Runtime异常,也可以使用try...catch块来捕捉Runtime异常。 使用throws声明抛出异常 •throws声明抛出异常的思路是:当前方法不知道应该如何这种类型的异常,该异常应该由上一级调 用者处理,如果main方法也不知道应该如何处理这种类型的异常,也可以使用throws声明抛出异 常,该异常将交给JVM处理。JVM异常的处理方法是:打印异常跟踪栈信息,并中止程序运行,这 就是前面程序在遇到异常后自动结束的原因。 •throws声明抛出只能在方法签名中使用,throws可以声明抛出多个异常类,多个异常类之间以逗 号隔开。throws声明抛出的语法格式如下   –throws ExceptionClass1 , ExceptionClass2... 抛出异常 •如果需要在程序中自行抛出异常,应使用throw语句,throw语句可以单独使用,throw语句抛出 的不是异常类,而是一个异常实例,而且每次只能抛出一个异常实例。throw语句的语法格式如下:   –throw ExceptionInstance; •如果throw语句抛出的异常是Checked异常,则该throw语句要么处于try块里,显式捕获该异常 ,要么放在一个带throws声明抛出的方法中,即把该异常交给该方法的调用者处理。 Java 7增强的throw语句 –try –{ – new FileInputStream(“a.txt”); –} –Catch(Exception ex) –{ – ex.printStackTrace(); – throw ex; //① –} •从JDK 7开始,Java编译器可以只能地识别①号代码处抛出的异常只是FileNotFoundException异常。 自定义异常类 •程序很少会自行抛出系统异常,因为异常的类名通常包含了该异常的有用信息。所以在选择抛出什么 异常时,应该选择合适的异常类,从而可以明确地描述该异常情况。在这种情形下,应用程序常常需要 抛出自定义异常。 •用户自定义异常都应该继承Exception基类,如果希望自定义Runtime异常,则应该继承 RuntimeException基类。定义异常类时通常需要提供两种构造器:一个是无参数的构造器;另一个 是带一个字符串参数的构造器,这个字符串将作为该异常对象的详细说明(也就是异常对象的 getMessage方法的返回值)。 异常链 •当业务逻辑层访问持久层出现SQLException异常时,程序不应该把底层的SQLException异常传 到用户界面,原因有如下两个:   –对于正常用户而言,他们不想看到底层SQLException,SQLException对他们使用该系统没 有任何帮助。   –对于恶意用户而言,将SQLException暴露出来是一种不安全的。 Java的异常跟踪栈 •异常对象的printStackTrace方法用于打印异常的跟踪栈信息,根据printStackTrace方法的输出 结果,我们可以找到异常的源头,并跟踪到异常一路触发的过程。 •面向对象的应用程序运行时,经常会发生一系列方法调用,从而形成“方法调用栈”,异常的传播则与 相反:只要异常没有被完全捕获(包括异常没有被捕获,或异常被处理后重新抛出了新异常),异常从 发生异常的方法逐渐向外传播,首先传给该方法的调用者,该方法调用者再次传给其调用者……直至最 后传到 main方法,如果main方法依然没有处理该异常JVM会中止该程序,并打印异常的跟踪栈信 息。 异常处理规则 •不要过度使用异常 •不要使用过于庞大的try块 •避免使用Catch All语句 •不要忽略捕获到异常 。。。。。。。。。。。。。
在 Java 中,当程序运行时发生异常JVM 会自动打印异常堆栈信息。异常堆栈信息包括异常类型、异常发生的位置、调用栈信息等,可以帮助我们快速定位问题并进行调试。 下面是一个简单的 Java 程序,其中会抛出一个 NullPointerException 异常: ```java public class ExceptionDemo { public static void main(String[] args) { String str = null; System.out.println(str.length()); } } ``` 当我们运行这个程序时,会得到如下的异常堆栈信息: ``` Exception in thread "main" java.lang.NullPointerException at ExceptionDemo.main(ExceptionDemo.java:4) ``` 可以看到,这里抛出了一个 NullPointerException 异常,并且异常发生在程序的第 4 行。通过这个异常堆栈信息,我们就可以快速定位问题所在。 关于即时编译优化和异常堆栈丢失的问题,它们之间的关系可以简单描述为:即时编译优化可能会导致异常堆栈信息丢失。这是因为,为了提高程序的执行效率,JVM 可能会对代码进行一些优化,包括方法内联、循环展开、消除冗余操作等。这些优化可能会使得程序的执行过程变得复杂,从而导致异常堆栈信息丢失。 为了解决这个问题,我们可以通过关闭即时编译优化来保留完整的异常堆栈信息。在 Java 中,可以通过设置系统属性 `-XX:-OmitStackTraceInFastThrow` 来关闭即时编译优化。这样,即使程序发生异常,也能够保留完整的异常堆栈信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值