Strange behavior of Unsafe.

huanghwh huanghwh at 163.com
Sun Apr 3 08:54:21 UTC 2016


Hi,
The simple TestUnsafe.java could can crash jvm under openjdk8-8.77.3 RELEASE version.
But the debug or fast-debug can pass it.

Has anyone see this problem before?

Cheers,
Huang Wen Hui

% cat hs_err_pid3911.log
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGSEGV (0xb) at pc=0x00000008020e986d, pid=3911, tid=100110
#
# JRE version: OpenJDK Runtime Environment (8.0_77-b03) (build 1.8.0_77-b03)
# Java VM: OpenJDK 64-Bit Server VM (25.77-b03 mixed mode bsd-amd64 compressed oops)
# Problematic frame:
# V  [libjvm.so+0x8e986d]  JVM_handle_bsd_signal+0x124a5d
#
# Core dump written. Default location: /opt/workspace/Test/target/classes/java.core
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#

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

Current thread (0x000000080302a800):  JavaThread "main" [_thread_in_vm, id=100110, stack(0x00007fffdfefe000,0x00007fffdfffe000)]

siginfo: si_signo: 11 (SIGSEGV), si_code: 1 (SEGV_MAPERR), si_addr: 0x0000000000000000

Registers:
RAX=0x000000080258a038, RBX=0x000000095a47c910, RCX=0x0000000960200000, RDX=0x0000000000000000
RSP=0x00007fffdfffd8d0, RBP=0x00007fffdfffd900, RSI=0x00007fffdfffd9b0, RDI=0x000000080302a9e0
R8 =0x00000008030124a0, R9 =0x000000080302a800, R10=0x0000000803857868, R11=0x000000080203e830
R12=0x000000080302a800, R13=0x00000008025b4ab0, R14=0x0000000960200000, R15=0x0000000000000000
RIP=0x00000008020e986d, EFLAGS=0x0000000000000005, ERR=0x0000000000000004
  TRAPNO=0x000000000000000c

Top of Stack: (sp=0x00007fffdfffd8d0)
0x00007fffdfffd8d0:   00000008020e97a0 000000095a47c910
0x00007fffdfffd8e0:   0000000812fff000 000000095a47c910
0x00007fffdfffd8f0:   00007fffdfffd9b0 000000080302a800
0x00007fffdfffd900:   00007fffdfffd978 0000000803857894
0x00007fffdfffd910:   00007fffdfffd9b0 000000080302a800
0x00007fffdfffd920:   00007fffdfffd978 0000000803857627
0x00007fffdfffd930:   00000008038575e2 00007fffdfffd938
0x00007fffdfffd940:   000000095a47c910 00007fffdfffd9b0
0x00007fffdfffd950:   000000095a4abfc8 0000000000000000
0x00007fffdfffd960:   000000095a47c910 0000000000000000
0x00007fffdfffd970:   00007fffdfffd998 00007fffdfffda20
0x00007fffdfffd980:   0000000803849470 0000000000000000
0x00007fffdfffd990:   0000000803851396 0000000960200000
0x00007fffdfffd9a0:   00007fffdfffda58 0000000000000000
0x00007fffdfffd9b0:   00000008bc1889b8 0000000000000000
0x00007fffdfffd9c0:   00000008bc1da728 00000008bc1da728
0x00007fffdfffd9d0:   00000008bc1da6f0 00000008bc1a46b8
0x00007fffdfffd9e0:   00007fffdfffd9e0 000000095a8004cd
0x00007fffdfffd9f0:   00007fffdfffda58 000000095a8005b0
0x00007fffdfffda00:   0000000000000000 000000095a800538
0x00007fffdfffda10:   00007fffdfffd998 00007fffdfffda58
0x00007fffdfffda20:   00007fffdfffdac0 00000008038424e7
0x00007fffdfffda30:   0000000000000000 0000000960200000
0x00007fffdfffda40:   0000000000000000 00000008bc1889b8
0x00007fffdfffda50:   00000008bc1d9c50 00000008bc1d8b80
0x00007fffdfffda60:   0000000000001fa0 000000080302a800
0x00007fffdfffda70:   000000080302a800 000000095a800538
0x00007fffdfffda80:   00007fffdfffde90 0000000000000001
0x00007fffdfffda90:   00007fffdfffdb60 00007fffdfffde98
0x00007fffdfffdaa0:   000000080000000a 000000095a800538
0x00007fffdfffdab0:   0000000803852a20 00007fffdfffdcf0
0x00007fffdfffdac0:   00007fffdfffdc30 0000000801dab086

Instructions: (pc=0x00000008020e986d)
0x00000008020e984d:   0b 41 f7 44 24 30 00 00 00 30 74 08 4c 89 e7 e8
0x00000008020e985d:   af e1 fd ff 41 c7 84 24 58 02 00 00 06 00 00 00
0x00000008020e986d:   49 8b 07 46 8b 34 30 49 8b 5c 24 48 4c 8b 7b 08
0x00000008020e987d:   48 8b 43 10 48 83 38 00 74 19 48 8b 73 28 4c 89

Register to memory mapping:

RAX=0x000000080258a038: JVM_handle_bsd_signal+0x5c5228 in /usr/local/openjdk8/jre/lib/amd64/server/libjvm.so at 0x0000000801800000
RBX={method} {0x000000095a47c910} 'getInt' '(Ljava/lang/Object;J)I' in 'sun/misc/Unsafe'
RCX=0x0000000960200000 is an unknown value
RDX=0x0000000000000000 is an unknown value
RSP=0x00007fffdfffd8d0 is pointing into the stack for thread: 0x000000080302a800
RBP=0x00007fffdfffd900 is pointing into the stack for thread: 0x000000080302a800
RSI=0x00007fffdfffd9b0 is pointing into the stack for thread: 0x000000080302a800
RDI=0x000000080302a9e0 is an unknown value
R8 =0x00000008030124a0 is an unknown value
R9 =0x000000080302a800 is a thread
R10=0x0000000803857868 is at code_begin+808 in an Interpreter codelet
method entry point (kind = native)  [0x0000000803857540, 0x0000000803857e40]  2304 bytes
R11=0x000000080203e830: JVM_handle_bsd_signal+0x79a20 in /usr/local/openjdk8/jre/lib/amd64/server/libjvm.so at 0x0000000801800000
R12=0x000000080302a800 is a thread
R13=0x00000008025b4ab0: gHotSpotVMLongConstants+0x11f48 in /usr/local/openjdk8/jre/lib/amd64/server/libjvm.so at 0x0000000801800000
R14=0x0000000960200000 is an unknown value
R15=0x0000000000000000 is an unknown value


Stack: [0x00007fffdfefe000,0x00007fffdfffe000],  sp=0x00007fffdfffd8d0,  free space=1022k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x8e986d]  JVM_handle_bsd_signal+0x124a5d
j  sun.misc.Unsafe.getInt(Ljava/lang/Object;J)I+0
j  test.TestUnsafe.main([Ljava/lang/String;)V+61
v  ~StubRoutines::call_stub
V  [libjvm.so+0x5ab086]  AsyncGetCallTrace+0xcf776
V  [libjvm.so+0x5c7f70]  AsyncGetCallTrace+0xec660
V  [libjvm.so+0x5cc123]  AsyncGetCallTrace+0xf0813
C  [libjli.so+0x4a2b]  JLI_Launch+0x25bb
C  [libthr.so.3+0x8814]  operator->+0x864
C  0x0000000000000000

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  sun.misc.Unsafe.getInt(Ljava/lang/Object;J)I+0
j  test.TestUnsafe.main([Ljava/lang/String;)V+61
v  ~StubRoutines::call_stub

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

Java Threads: ( => current thread )
  0x000000095bb2c000 JavaThread "Service Thread" daemon [_thread_blocked, id=101177, stack(0x00007fffdeded000,0x00007fffdeeed000)]
  0x0000000803030800 JavaThread "C1 CompilerThread3" daemon [_thread_blocked, id=101175, stack(0x00007fffdeeee000,0x00007fffdefee000)]
  0x000000080302f800 JavaThread "C2 CompilerThread2" daemon [_thread_blocked, id=101174, stack(0x00007fffdefef000,0x00007fffdf0ef000)]
  0x000000080302f000 JavaThread "C2 CompilerThread1" daemon [_thread_blocked, id=101172, stack(0x00007fffdf0f0000,0x00007fffdf1f0000)]
  0x000000080302e000 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=101033, stack(0x00007fffdf1f1000,0x00007fffdf2f1000)]
  0x000000080302d800 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=101025, stack(0x00007fffdf2f2000,0x00007fffdf3f2000)]
  0x000000080302c800 JavaThread "Finalizer" daemon [_thread_blocked, id=101009, stack(0x00007fffdf3f3000,0x00007fffdf4f3000)]
  0x000000080302c000 JavaThread "Reference Handler" daemon [_thread_blocked, id=101008, stack(0x00007fffdf4f4000,0x00007fffdf5f4000)]
=>0x000000080302a800 JavaThread "main" [_thread_in_vm, id=100110, stack(0x00007fffdfefe000,0x00007fffdfffe000)]

Other Threads:
  0x00000008030b6000 VMThread [stack: 0x00007fffdf5f5000,0x00007fffdf6f5000] [id=100992]
  0x00000008030b6800 WatcherThread [stack: 0x00007fffdecec000,0x00007fffdedec000] [id=101183]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap:
 PSYoungGen      total 75776K, used 1300K [0x00000008bc180000, 0x00000008c1600000, 0x0000000910a00000)
  eden space 65024K, 2% used [0x00000008bc180000,0x00000008bc2c51f8,0x00000008c0100000)
  from space 10752K, 0% used [0x00000008c0b80000,0x00000008c0b80000,0x00000008c1600000)
  to   space 10752K, 0% used [0x00000008c0100000,0x00000008c0100000,0x00000008c0b80000)
 ParOldGen       total 173568K, used 0K [0x0000000813000000, 0x000000081d980000, 0x00000008bc180000)
  object space 173568K, 0% used [0x0000000813000000,0x0000000813000000,0x000000081d980000)
 Metaspace       used 2464K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 261K, capacity 386K, committed 512K, reserved 1048576K

Card table byte_map: [0x0000000910a00000,0x00000009111ee000] byte_map_base: 0x000000090c968000

Marking Bits: (ParMarkBitMap*) 0x00000008025b4598
 Begin Bits: [0x0000000911737000, 0x000000091569f000)
 End Bits:   [0x000000091569f000, 0x0000000919607000)

Polling page: 0x0000000800627000

CodeCache: size=245760Kb used=1072Kb max_used=1073Kb free=244687Kb
 bounds [0x0000000803842000, 0x0000000803ab2000, 0x0000000812842000]
 total_blobs=237 nmethods=10 adapters=143
 compilation: enabled

Compilation events (10 events):
Event: 0.138 Thread 0x0000000803030800    6       3       java.lang.String::indexOf (70 bytes)
Event: 0.139 Thread 0x0000000803030800 nmethod 6 0x0000000803944e90 code [0x0000000803945020, 0x00000008039453c8]
Event: 0.139 Thread 0x0000000803030800    7       3       java.lang.Math::min (11 bytes)
Event: 0.139 Thread 0x0000000803030800 nmethod 7 0x0000000803944b10 code [0x0000000803944c80, 0x0000000803944e10]
Event: 0.139 Thread 0x0000000803030800    8       3       java.lang.String::length (6 bytes)
Event: 0.139 Thread 0x0000000803030800 nmethod 8 0x0000000803944750 code [0x00000008039448c0, 0x0000000803944a50]
Event: 0.139 Thread 0x0000000803030800    9       1       java.lang.Object::<init> (1 bytes)
Event: 0.140 Thread 0x0000000803030800 nmethod 9 0x000000080394ec50 code [0x000000080394eda0, 0x000000080394eed0]
Event: 0.147 Thread 0x0000000803030800   10       1       java.lang.ref.Reference::get (5 bytes)
Event: 0.147 Thread 0x0000000803030800 nmethod 10 0x000000080394e390 code [0x000000080394e4e0, 0x000000080394e610]

GC Heap History (0 events):
No events

Deoptimization events (0 events):
No events

Internal exceptions (2 events):
Event: 0.057 Thread 0x000000080302a800 Exception <a 'java/lang/NoSuchMethodError': Method sun.misc.Unsafe.defineClass(Ljava/lang/String;[BII)Ljava/lang/Class; name or signature does not match> (0x00000008bc187cc0) thrown at [/usr/ports/java/openjdk8/work/openjdk/hotspot/src/share/vm/prims/jni.
Event: 0.057 Thread 0x000000080302a800 Exception <a 'java/lang/NoSuchMethodError': Method sun.misc.Unsafe.prefetchRead(Ljava/lang/Object;J)V name or signature does not match> (0x00000008bc187fa8) thrown at [/usr/ports/java/openjdk8/work/openjdk/hotspot/src/share/vm/prims/jni.cpp, line 3987]

Events (10 events):
Event: 0.151 loading class sun/reflect/UnsafeQualifiedStaticObjectFieldAccessorImpl
Event: 0.151 loading class sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl
Event: 0.151 loading class sun/reflect/UnsafeQualifiedStaticFieldAccessorImpl done
Event: 0.151 loading class sun/reflect/UnsafeQualifiedStaticObjectFieldAccessorImpl done
Event: 0.151 loading class java/util/HashMap$EntrySet
Event: 0.151 loading class java/util/HashMap$EntrySet done
Event: 0.152 loading class java/util/HashMap$EntryIterator
Event: 0.152 loading class java/util/HashMap$HashIterator
Event: 0.152 loading class java/util/HashMap$HashIterator done
Event: 0.152 loading class java/util/HashMap$EntryIterator done


Dynamic libraries:
0x0000000000400000     /usr/local/openjdk8/bin/java
0x0000000800821000     /usr/local/openjdk8/bin/../lib/amd64/jli/libjli.so
0x0000000800a2e000     /lib/libz.so.6
0x0000000800c45000     /lib/libthr.so.3
0x0000000800e6b000     /lib/libc.so.7
0x0000000801800000     /usr/local/openjdk8/jre/lib/amd64/server/libjvm.so
0x00000008025d9000     /lib/libm.so.5
0x0000000802803000     /usr/lib/libc++.so.1
0x0000000802ac2000     /lib/libcxxrt.so.1
0x0000000802ce0000     /lib/libgcc_s.so.1
0x0000000803200000     /usr/local/openjdk8/jre/lib/amd64/libverify.so
0x000000080340f000     /usr/local/openjdk8/jre/lib/amd64/libjava.so
0x000000080363a000     /usr/local/openjdk8/jre/lib/amd64/libzip.so
0x0000000800600000     /libexec/ld-elf.so.1

VM Arguments:
java_command: test/TestUnsafe
java_class_path (initial): .
Launcher Type: SUN_STANDARD

Environment Variables:
JAVA_HOME=/usr/local/openjdk8
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/games:/usr/local/sbin:/usr/local/bin:/home/hwh/bin
SHELL=/bin/csh
DISPLAY=unix:0.0
HOSTTYPE=FreeBSD
OSTYPE=FreeBSD
MACHTYPE=x86_64

Signal Handlers:
SIGSEGV: [libjvm.so+0x91e3d0], sa_mask[0]=11111111111111111111111111111110, sa_flags=SA_RESTART|SA_SIGINFO
SIGBUS: [libjvm.so+0x91e3d0], sa_mask[0]=11111111111111111111111111111110, sa_flags=SA_RESTART|SA_SIGINFO
SIGFPE: [libjvm.so+0x7c1fe0], sa_mask[0]=11111111111111111111111111111110, sa_flags=SA_RESTART|SA_SIGINFO
SIGPIPE: [libjvm.so+0x7c1fe0], sa_mask[0]=11111111111111111111111111111110, sa_flags=SA_RESTART|SA_SIGINFO
SIGXFSZ: [libjvm.so+0x7c1fe0], sa_mask[0]=11111111111111111111111111111110, sa_flags=SA_RESTART|SA_SIGINFO
SIGILL: [libjvm.so+0x7c1fe0], sa_mask[0]=11111111111111111111111111111110, sa_flags=SA_RESTART|SA_SIGINFO
SIGUSR1: SIG_DFL, sa_mask[0]=11111111011111110111111111111111, sa_flags=none
SIGUSR2: [libjvm.so+0x7c2b50], sa_mask[0]=00000000000000000000000000000000, sa_flags=SA_RESTART|SA_SIGINFO
SIGHUP: [libjvm.so+0x7c0530], sa_mask[0]=11111111111111111111111111111110, sa_flags=SA_RESTART|SA_SIGINFO
SIGINT: [libjvm.so+0x7c0530], sa_mask[0]=11111111111111111111111111111110, sa_flags=SA_RESTART|SA_SIGINFO
SIGTERM: [libjvm.so+0x7c0530], sa_mask[0]=11111111111111111111111111111110, sa_flags=SA_RESTART|SA_SIGINFO
SIGQUIT: [libjvm.so+0x7c0530], sa_mask[0]=11111111111111111111111111111110, sa_flags=SA_RESTART|SA_SIGINFO


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

OS:BSD
uname:FreeBSD 11.0-CURRENT FreeBSD 11.0-CURRENT #104 r297311M: Sun Mar 27 18:16:04 CST 2016     root at mbp.gddsn.org.cn:/usr/obj/usr/src/sys/MACBOOK amd64
rlimit: STACK 524288k, CORE infinity, NPROC 19458, NOFILE 467388, AS infinity
load average:0.37 0.46 0.56

CPU:total 8 (4 cores per cpu, 2 threads per core) family 6 model 70 stepping 1, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, avx, avx2, aes, clmul, erms, lzcnt, ht, tsc, tscinvbit, bmi1, bmi2

Memory: 4k page, physical 16618520k(13655112k free), swap 0k(0k free)

vm_info: OpenJDK 64-Bit Server VM (25.77-b03) for bsd-amd64 JRE (1.8.0_77-b03), built on Mar 28 2016 11:28:09 by "root" with gcc 4.2.1 Compatible FreeBSD Clang 3.8.0 (tags/RELEASE_380/final 262564)

time: Sun Apr  3 16:10:21 2016
elapsed time: 0 seconds (0d 0h 0m 0s)



public class TestUnsafe {
  public static void main(String[] args) throws Exception {
    java.lang.reflect.Field f = sun.misc.Unsafe.class
        .getDeclaredField("theUnsafe");
    f.setAccessible(true);
    sun.misc.Unsafe unsafe = (sun.misc.Unsafe) f.get(null);

    long l = unsafe.allocateMemory(900L * 1024 * 1024);
    System.err.println(l);
    for(int i=0;i<10;i++) {
      System.err.printf("%08X\n", unsafe.getInt(null, l+i));
    }
  }
}


More information about the freebsd-java mailing list