ブログトップ 記事一覧 ログイン 無料ブログ開設

水まんじゅう

 

2016-05-24

JJUG CCC 2016 Springに参加してきた。

ということで、秋に行かなかったので1年ぶりのJJUG CCCでした。

JJUG CCCは1年に2回やっててすごい華やかなので、そこでやってる人ばかりが注目されがちだけれども、
実際は毎月やっているナイトセミナーの準備のほうも同じように大変だし、
受付の時間を考えると業務の時間を毎回調整して早めに上がれるようにして運営してくださっているということですごい労力をかけてくださっています。
たぶん、普段は、気にも留めることはないと思うのですが、
いつも同じ人たちががんばってくれていて、彼らが本当に意味でJJUGをここまで大きくしてくれたんだと思います。

と、 JJUG運営の戦略と戦術 というスライドを見てそこらへんがぜんぜん考慮されてなく非常に悲しい気がした。

日常業務は日があたることはないけれども、ものすごく重要なわけで。

ナイトセミナーで受付とかやってくれてる人も完全にボランティアでやっているので、たまには日を当ててほしい。

2016-04-22

Java 8u92から増えた -XX:+CrashOnOutOfMemoryErrorと-XX:+ExitOnOutOfMemoryErrorを試してみた

※91だと思ってたら増えたのは92からでした。
Windowsで。OOM発生時にJVMを確実に落とすオプションらしい。

-XX:+CrashOnOutOfMemoryError


>java -XX:+CrashOnOutOfMemoryError Main
Aborting due to java.lang.OutOfMemoryError: Java heap space
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (debug.cpp:308), pid=6760, tid=0x00000000000026a4
#  fatal error: OutOfMemory encountered: Java heap space
#
# JRE version: Java(TM) SE Runtime Environment (8.0_92-b14) (build 1.8.0_92-b14)

# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.92-b14 mixed mode windows-amd64
 compressed oops)
# Failed to write core dump. Minidumps are not enabled by default on client vers
ions of Windows
#
# An error report file with more information is saved as:
# *\hs_err_pid6760.log
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#

hs_err_*.logファイルが出力される。

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (debug.cpp:308), pid=6760, tid=0x00000000000026a4
#  fatal error: OutOfMemory encountered: Java heap space
#
# JRE version: Java(TM) SE Runtime Environment (8.0_92-b14) (build 1.8.0_92-b14)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.92-b14 mixed mode windows-amd64 compressed oops)
# 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
#

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

Current thread (0x000000000249e000):  JavaThread "main" [_thread_in_vm, id=9892, stack(0x0000000002590000,0x0000000002690000)]

Stack: [0x0000000002590000,0x0000000002690000]
[error occurred during error reporting (printing stack bounds), id 0xc0000005]

Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)

Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
j  java.util.Arrays.copyOf([CI)[C+1
j  java.lang.AbstractStringBuilder.expandCapacity(I)V+43
J 29 C1 java.lang.AbstractStringBuilder.append(Ljava/lang/String;)Ljava/lang/AbstractStringBuilder; (50 bytes) @ 0x00000000027a2a84 [0x00000000027a27e0+0x2a4]
J 30 C1 java.lang.StringBuilder.append(Ljava/lang/String;)Ljava/lang/StringBuilder; (8 bytes) @ 0x00000000027a1cc4 [0x00000000027a1c40+0x84]
j  Main.main([Ljava/lang/String;)V+23
v  ~StubRoutines::call_stub

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

Java Threads: ( => current thread )
  0x0000000018a4a000 JavaThread "Service Thread" daemon [_thread_blocked, id=9992, stack(0x0000000019580000,0x0000000019680000)]
  0x00000000174bf800 JavaThread "C1 CompilerThread2" daemon [_thread_blocked, id=4724, stack(0x0000000019350000,0x0000000019450000)]
  0x00000000174ba000 JavaThread "C2 CompilerThread1" daemon [_thread_blocked, id=8940, stack(0x0000000019130000,0x0000000019230000)]
  0x00000000189c2000 JavaThread "C2 CompilerThread0" daemon [_thread_blocked, id=7940, stack(0x0000000018f80000,0x0000000019080000)]
  0x00000000189c1000 JavaThread "Attach Listener" daemon [_thread_blocked, id=10216, stack(0x0000000018e80000,0x0000000018f80000)]
  0x00000000189be000 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=8304, stack(0x0000000018590000,0x0000000018690000)]
  0x000000001749a800 JavaThread "Finalizer" daemon [_thread_blocked, id=3408, stack(0x00000000188b0000,0x00000000189b0000)]
  0x0000000017453000 JavaThread "Reference Handler" daemon [_thread_blocked, id=5716, stack(0x00000000186e0000,0x00000000187e0000)]
=>0x000000000249e000 JavaThread "main" [_thread_in_vm, id=9892, stack(0x0000000002590000,0x0000000002690000)]

Other Threads:
  0x000000001744b800 VMThread [stack: 0x0000000018460000,0x0000000018560000] [id=8624]
  0x0000000018a62800 WatcherThread [stack: 0x0000000019780000,0x0000000019880000] [id=10172]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap:
 PSYoungGen      total 669696K, used 0K [0x00000000d5a00000, 0x00000000fff80000, 0x0000000100000000)
  eden space 669184K, 0% used [0x00000000d5a00000,0x00000000d5a00000,0x00000000fe780000)
  from space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000)
  to   space 1024K, 0% used [0x00000000ffd80000,0x00000000ffd80000,0x00000000ffe80000)
 ParOldGen       total 1388544K, used 786891K [0x0000000080e00000, 0x00000000d5a00000, 0x00000000d5a00000)
  object space 1388544K, 56% used [0x0000000080e00000,0x00000000b0e72f00,0x00000000d5a00000)
 Metaspace       used 2570K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 286K, capacity 386K, committed 512K, reserved 1048576K

Card table byte_map: [0x0000000011a50000,0x0000000011e50000] byte_map_base: 0x0000000011649000

Marking Bits: (ParMarkBitMap*) 0x0000000051a964f0
 Begin Bits: [0x0000000012730000, 0x00000000146f8000)
 End Bits:   [0x00000000146f8000, 0x00000000166c0000)

Polling page: 0x0000000000430000

CodeCache: size=245760Kb used=1105Kb max_used=1107Kb free=244654Kb
 bounds [0x0000000002690000, 0x0000000002900000, 0x0000000011690000]
 total_blobs=264 nmethods=30 adapters=148
 compilation: enabled

Compilation events (10 events):
Event: 0.218 Thread 0x00000000174bf800   26  s    3       java.lang.StringBuffer::append (13 bytes)
Event: 0.219 Thread 0x00000000174bf800 nmethod 26 0x00000000027a3ad0 code [0x00000000027a3c60, 0x00000000027a4148]
Event: 0.219 Thread 0x00000000174bf800   27       3       java.lang.String::getChars (62 bytes)
Event: 0.219 Thread 0x00000000174bf800 nmethod 27 0x00000000027a32d0 code [0x00000000027a3480, 0x00000000027a38b8]
Event: 0.220 Thread 0x00000000174bf800   28       3       java.lang.String::indexOf (7 bytes)
Event: 0.220 Thread 0x00000000174bf800 nmethod 28 0x00000000027a2ed0 code [0x00000000027a3040, 0x00000000027a3248]
Event: 0.220 Thread 0x00000000174bf800   29       3       java.lang.AbstractStringBuilder::append (50 bytes)
Event: 0.220 Thread 0x00000000174bf800 nmethod 29 0x00000000027a2650 code [0x00000000027a27e0, 0x00000000027a2ce8]
Event: 0.226 Thread 0x00000000174bf800   30       3       java.lang.StringBuilder::append (8 bytes)
Event: 0.226 Thread 0x00000000174bf800 nmethod 30 0x00000000027a1ad0 code [0x00000000027a1c40, 0x00000000027a1dc8]

GC Heap History (10 events):
Event: 1.552 GC heap before
{Heap before GC invocations=10 (full 2):
 PSYoungGen      total 266752K, used 0K [0x00000000d5a00000, 0x00000000f1c80000, 0x0000000100000000)
  eden space 265728K, 0% used [0x00000000d5a00000,0x00000000d5a00000,0x00000000e5d80000)
  from space 1024K, 0% used [0x00000000e5d80000,0x00000000e5d80000,0x00000000e5e80000)
  to   space 1024K, 0% used [0x00000000f1b80000,0x00000000f1b80000,0x00000000f1c80000)
 ParOldGen       total 1388544K, used 786903K [0x0000000080e00000, 0x00000000d5a00000, 0x00000000d5a00000)
  object space 1388544K, 56% used [0x0000000080e00000,0x00000000b0e75eb0,0x00000000d5a00000)
 Metaspace       used 2570K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 286K, capacity 386K, committed 512K, reserved 1048576K
Event: 1.558 GC heap after
Heap after GC invocations=10 (full 2):
 PSYoungGen      total 460288K, used 0K [0x00000000d5a00000, 0x00000000f3000000, 0x0000000100000000)
  eden space 459264K, 0% used [0x00000000d5a00000,0x00000000d5a00000,0x00000000f1a80000)
  from space 1024K, 0% used [0x00000000f1b80000,0x00000000f1b80000,0x00000000f1c80000)
  to   space 1024K, 0% used [0x00000000f1a80000,0x00000000f1a80000,0x00000000f1b80000)
 ParOldGen       total 1388544K, used 786903K [0x0000000080e00000, 0x00000000d5a00000, 0x00000000d5a00000)
  object space 1388544K, 56% used [0x0000000080e00000,0x00000000b0e75eb0,0x00000000d5a00000)
 Metaspace       used 2570K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 286K, capacity 386K, committed 512K, reserved 1048576K
}
Event: 1.558 GC heap before
{Heap before GC invocations=11 (full 2):
 PSYoungGen      total 460288K, used 0K [0x00000000d5a00000, 0x00000000f3000000, 0x0000000100000000)
  eden space 459264K, 0% used [0x00000000d5a00000,0x00000000d5a00000,0x00000000f1a80000)
  from space 1024K, 0% used [0x00000000f1b80000,0x00000000f1b80000,0x00000000f1c80000)
  to   space 1024K, 0% used [0x00000000f1a80000,0x00000000f1a80000,0x00000000f1b80000)
 ParOldGen       total 1388544K, used 786903K [0x0000000080e00000, 0x00000000d5a00000, 0x00000000d5a00000)
  object space 1388544K, 56% used [0x0000000080e00000,0x00000000b0e75eb0,0x00000000d5a00000)
 Metaspace       used 2570K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 286K, capacity 386K, committed 512K, reserved 1048576K
Event: 1.564 GC heap after
Heap after GC invocations=11 (full 2):
 PSYoungGen      total 460288K, used 0K [0x00000000d5a00000, 0x0000000100000000, 0x0000000100000000)
  eden space 459264K, 0% used [0x00000000d5a00000,0x00000000d5a00000,0x00000000f1a80000)
  from space 1024K, 0% used [0x00000000f1a80000,0x00000000f1a80000,0x00000000f1b80000)
  to   space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
 ParOldGen       total 1388544K, used 786903K [0x0000000080e00000, 0x00000000d5a00000, 0x00000000d5a00000)
  object space 1388544K, 56% used [0x0000000080e00000,0x00000000b0e75eb0,0x00000000d5a00000)
 Metaspace       used 2570K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 286K, capacity 386K, committed 512K, reserved 1048576K
}
Event: 1.564 GC heap before
{Heap before GC invocations=12 (full 3):
 PSYoungGen      total 460288K, used 0K [0x00000000d5a00000, 0x0000000100000000, 0x0000000100000000)
  eden space 459264K, 0% used [0x00000000d5a00000,0x00000000d5a00000,0x00000000f1a80000)
  from space 1024K, 0% used [0x00000000f1a80000,0x00000000f1a80000,0x00000000f1b80000)
  to   space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
 ParOldGen       total 1388544K, used 786903K [0x0000000080e00000, 0x00000000d5a00000, 0x00000000d5a00000)
  object space 1388544K, 56% used [0x0000000080e00000,0x00000000b0e75eb0,0x00000000d5a00000)
 Metaspace       used 2570K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 286K, capacity 386K, committed 512K, reserved 1048576K
Event: 1.618 GC heap after
Heap after GC invocations=12 (full 3):
 PSYoungGen      total 460288K, used 0K [0x00000000d5a00000, 0x0000000100000000, 0x0000000100000000)
  eden space 459264K, 0% used [0x00000000d5a00000,0x00000000d5a00000,0x00000000f1a80000)
  from space 1024K, 0% used [0x00000000f1a80000,0x00000000f1a80000,0x00000000f1b80000)
  to   space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
 ParOldGen       total 914432K, used 786903K [0x0000000080e00000, 0x00000000b8b00000, 0x00000000d5a00000)
  object space 914432K, 86% used [0x0000000080e00000,0x00000000b0e75e80,0x00000000b8b00000)
 Metaspace       used 2570K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 286K, capacity 386K, committed 512K, reserved 1048576K
}
Event: 1.618 GC heap before
{Heap before GC invocations=13 (full 3):
 PSYoungGen      total 460288K, used 0K [0x00000000d5a00000, 0x0000000100000000, 0x0000000100000000)
  eden space 459264K, 0% used [0x00000000d5a00000,0x00000000d5a00000,0x00000000f1a80000)
  from space 1024K, 0% used [0x00000000f1a80000,0x00000000f1a80000,0x00000000f1b80000)
  to   space 1024K, 0% used [0x00000000fff00000,0x00000000fff00000,0x0000000100000000)
 ParOldGen       total 1388544K, used 786903K [0x0000000080e00000, 0x00000000d5a00000, 0x00000000d5a00000)
  object space 1388544K, 56% used [0x0000000080e00000,0x00000000b0e75e80,0x00000000d5a00000)
 Metaspace       used 2570K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 286K, capacity 386K, committed 512K, reserved 1048576K
Event: 1.621 GC heap after
Heap after GC invocations=13 (full 3):
 PSYoungGen      total 669696K, used 0K [0x00000000d5a00000, 0x00000000fff80000, 0x0000000100000000)
  eden space 669184K, 0% used [0x00000000d5a00000,0x00000000d5a00000,0x00000000fe780000)
  from space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000)
  to   space 1024K, 0% used [0x00000000ffd80000,0x00000000ffd80000,0x00000000ffe80000)
 ParOldGen       total 1388544K, used 786903K [0x0000000080e00000, 0x00000000d5a00000, 0x00000000d5a00000)
  object space 1388544K, 56% used [0x0000000080e00000,0x00000000b0e75e80,0x00000000d5a00000)
 Metaspace       used 2570K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 286K, capacity 386K, committed 512K, reserved 1048576K
}
Event: 1.621 GC heap before
{Heap before GC invocations=14 (full 4):
 PSYoungGen      total 669696K, used 0K [0x00000000d5a00000, 0x00000000fff80000, 0x0000000100000000)
  eden space 669184K, 0% used [0x00000000d5a00000,0x00000000d5a00000,0x00000000fe780000)
  from space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000)
  to   space 1024K, 0% used [0x00000000ffd80000,0x00000000ffd80000,0x00000000ffe80000)
 ParOldGen       total 1388544K, used 786903K [0x0000000080e00000, 0x00000000d5a00000, 0x00000000d5a00000)
  object space 1388544K, 56% used [0x0000000080e00000,0x00000000b0e75e80,0x00000000d5a00000)
 Metaspace       used 2570K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 286K, capacity 386K, committed 512K, reserved 1048576K
Event: 1.756 GC heap after
Heap after GC invocations=14 (full 4):
 PSYoungGen      total 669696K, used 0K [0x00000000d5a00000, 0x00000000fff80000, 0x0000000100000000)
  eden space 669184K, 0% used [0x00000000d5a00000,0x00000000d5a00000,0x00000000fe780000)
  from space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000)
  to   space 1024K, 0% used [0x00000000ffd80000,0x00000000ffd80000,0x00000000ffe80000)
 ParOldGen       total 932352K, used 786891K [0x0000000080e00000, 0x00000000b9c80000, 0x00000000d5a00000)
  object space 932352K, 84% used [0x0000000080e00000,0x00000000b0e72f00,0x00000000b9c80000)
 Metaspace       used 2570K, capacity 4486K, committed 4864K, reserved 1056768K
  class space    used 286K, capacity 386K, committed 512K, reserved 1048576K
}

Deoptimization events (0 events):
No events

Internal exceptions (2 events):
Event: 0.098 Thread 0x000000000249e000 Exception <a 'java/lang/NoSuchMethodError': Method sun.misc.Unsafe.defineClass(Ljava/lang/String;[BII)Ljava/lang/Class; name or signature does not match> (0x00000000d5a07cc0) thrown at [D:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u92\6642\hotspot\sr&#56569;)コ
Event: 0.098 Thread 0x000000000249e000 Exception <a 'java/lang/NoSuchMethodError': Method sun.misc.Unsafe.prefetchRead(Ljava/lang/Object;J)V name or signature does not match> (0x00000000d5a07fa8) thrown at [D:\re\workspace\8-2-build-windows-amd64-cygwin\jdk8u92\6642\hotspot\src\share\vm\prims\j

Events (10 events):
Event: 0.252 Executing VM operation: ParallelGCFailedAllocation
Event: 0.257 Executing VM operation: ParallelGCFailedAllocation done
Event: 0.284 Executing VM operation: ParallelGCFailedAllocation
Event: 0.303 Executing VM operation: ParallelGCFailedAllocation done
Event: 0.885 Executing VM operation: ParallelGCFailedAllocation
Event: 0.999 Executing VM operation: ParallelGCFailedAllocation done
Event: 1.305 Executing VM operation: ParallelGCFailedAllocation
Event: 1.414 Executing VM operation: ParallelGCFailedAllocation done
Event: 1.552 Executing VM operation: ParallelGCFailedAllocation
Event: 1.757 Executing VM operation: ParallelGCFailedAllocation done


Dynamic libraries:
0x000000013fb10000 - 0x000000013fb47000 	C:\ProgramData\Oracle\Java\javapath\java.exe
0x0000000077590000 - 0x000000007773a000 	C:\Windows\SYSTEM32\ntdll.dll
0x0000000077370000 - 0x000000007748f000 	C:\Windows\system32\kernel32.dll
0x000007fefd360000 - 0x000007fefd3ca000 	C:\Windows\system32\KERNELBASE.dll
0x000007fefe220000 - 0x000007fefe2fb000 	C:\Windows\system32\ADVAPI32.dll
0x000007fefd7a0000 - 0x000007fefd83f000 	C:\Windows\system32\msvcrt.dll
0x000007fefd840000 - 0x000007fefd85f000 	C:\Windows\SYSTEM32\sechost.dll
0x000007fefdf50000 - 0x000007fefe07d000 	C:\Windows\system32\RPCRT4.dll
0x0000000077490000 - 0x000000007758a000 	C:\Windows\system32\USER32.dll
0x000007fefe080000 - 0x000007fefe0e7000 	C:\Windows\system32\GDI32.dll
0x000007fefdac0000 - 0x000007fefdace000 	C:\Windows\system32\LPK.dll
0x000007fefd6d0000 - 0x000007fefd79a000 	C:\Windows\system32\USP10.dll
0x000007fefbf00000 - 0x000007fefc0f4000 	C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.7601.18837_none_fa3b1e3d17594757\COMCTL32.dll
0x000007feff330000 - 0x000007feff3a1000 	C:\Windows\system32\SHLWAPI.dll
0x000007fefe0f0000 - 0x000007fefe11e000 	C:\Windows\system32\IMM32.DLL
0x000007fefdda0000 - 0x000007fefdea9000 	C:\Windows\system32\MSCTF.dll
0x000000006aeb0000 - 0x000000006af82000 	C:\Program Files\Java\jre1.8.0_92\bin\msvcr100.dll
0x0000000051280000 - 0x0000000051b16000 	C:\Program Files\Java\jre1.8.0_92\bin\server\jvm.dll
0x000007fef5ac0000 - 0x000007fef5ac9000 	C:\Windows\system32\WSOCK32.dll
0x000007fefda70000 - 0x000007fefdabd000 	C:\Windows\system32\WS2_32.dll
0x000007fefe590000 - 0x000007fefe598000 	C:\Windows\system32\NSI.dll
0x000007fefadf0000 - 0x000007fefae2b000 	C:\Windows\system32\WINMM.dll
0x000007fefc3f0000 - 0x000007fefc3fc000 	C:\Windows\system32\VERSION.dll
0x0000000077760000 - 0x0000000077767000 	C:\Windows\system32\PSAPI.DLL
0x0000000070770000 - 0x000000007077f000 	C:\Program Files\Java\jre1.8.0_92\bin\verify.dll
0x000000006ae80000 - 0x000000006aea9000 	C:\Program Files\Java\jre1.8.0_92\bin\java.dll
0x0000000070740000 - 0x0000000070756000 	C:\Program Files\Java\jre1.8.0_92\bin\zip.dll
0x000007fefe5a0000 - 0x000007feff32a000 	C:\Windows\system32\SHELL32.dll
0x000007fefd860000 - 0x000007fefda63000 	C:\Windows\system32\ole32.dll
0x000007fefd310000 - 0x000007fefd31f000 	C:\Windows\system32\profapi.dll

VM Arguments:
jvm_args: -XX:+CrashOnOutOfMemoryError 
java_command: Main
java_class_path (initial): .
Launcher Type: SUN_STANDARD

Environment Variables:
JAVA_HOME=C:\Program Files\Java\jdk1.8.0_92
PATH=*
USERNAME=*
OS=Windows_NT
PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 69 Stepping 1, GenuineIntel



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

OS: Windows 7 , 64 bit Build 7601 (6.1.7601.23392)

CPU:total 4 (2 cores per cpu, 2 threads per core) family 6 model 69 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 8327728k(3156380k free), swap 16653600k(9915304k free)

vm_info: Java HotSpot(TM) 64-Bit Server VM (25.92-b14) for windows-amd64 JRE (1.8.0_92-b14), built on Mar 31 2016 21:03:04 by "java_re" with MS VC++ 10.0 (VS2010)

time: Fri Apr 22 18:26:54 2016
elapsed time: 1 seconds (0d 0h 0m 1s)



-XX:+ExitOnOutOfMemoryError

>java -XX:+ExitOnOutOfMemoryError Main
Terminating due to java.lang.OutOfMemoryError: Java heap space

ファイルは何も出力されない。

まとめ

-XX:+CrashOnOutOfMemoryErrorのほうが出力される情報は多いけど、クラッシュレポートを送ってくれと表示されるのは微妙なので、-XX:+ExitOnOutOfMemoryErrorを使用したほうがよさそう。
その場合、-XX:+HeapDumpOnOutOfMemoryErrorをつけるのを忘れずに。

2016-04-16

アノテーション入門勉強会を開催してきた。

DoorKeeper
https://kumamotojava.doorkeeper.jp/events/42272

当日の資料
https://github.com/megascus/annotation-handson


ちょっと間が空いてしまった*1けれども、先日熊本にてアノテーション入門という名前で勉強会を開いてきた。

最近のJavaのフレームワークはたいていアノテーションが使用されているが、アノテーションが何やってるかよく判らないよねぇという声が聞こえたので。
とりあえず、目標地点としてDIを見据えて、アノテーションを使って何か作れるようにと、アノテーションがいかに何もしていないのかが判るように行ったつもりです。

とはいっても、DIについてはきしださんがこの勉強会を告知した後にDIを自分で実装してみるという記事を書いてくださったので、とりあえず、そちらの前提条件となる知識を網羅できるようにしました。
http://d.hatena.ne.jp/nowokay/20160406

DIまでやっていたら2時間じゃ終わらなかったと思うのでちょうどよかった。

リフレクションは難しい


勉強会で躓く人が多かったのはやはりリフレクションでした。
Javaのアノテーションはリフレクション経由でアクセスするためリフレクションに対する知識は必須となります。

JavaのコードをJava言語というか、JVMがどのように扱っているのかをダイレクトに扱う必要があるため、リフレクションを使用せずに書いたコードとリフレクションを使用して書いたコードは多くの場合乖離します。

古くから使われているライブラリでもよくこの罠を踏んでいる場合があって、たとえば、以下のコードはメソッドが取得できず、意図した通りには動きません。

public class Sample {

    public Method getMethod() throws Exception {
        Class<Bean> clazz = Bean.class;
        return clazz.getMethod("getSuperProperty");
    }
}

class SuperBean {
    String getSuperProperty();
}

class Bean extends SuperBean {
    String getSubClassProperty();
}

以下のように記載する必要があります。

public class Sample {

    public Method getMethod() throws Exception {
        Class<?> clazz = Bean.class;
        do {
  
            try {
                return clazz.getMethod("getSuperProperty");
            } catch (NoSuchMethodException ex) {
            }
        } while ((clazz = clazz.getSuperclass()) != null);
        throw new NoSuchMethodException("method not found.");
    }
}


Javaのコードを書くときはサブクラスでもスーパークラスメソッドを直接取得できますが、リフレクションでは一度スーパークラスを経由しないとメソッドを取得することが出来ません。

Java内部ではサブクラススーパークラスが分けて管理されているという証拠なのですが、まあ、なんというか、直感とはぶれますね。

とか、いろいろとあり難しい。

アノテーション自体はリフレクションだけ理解できればそのままなので、まあ、楽です。

*1地震のため

2016-03-20

spring bootハンズオンを開催してきた。

DoorKeeper
https://kumamotojava.doorkeeper.jp/events/39944

当日資料
https://github.com/megascus/spring-boot-handson-for-buginners

巷にあるspring bootのハンズオン資料が今までJavaでの開発をバリバリにやってきた人向けだったりして、
そもそもmavenって何よ?レベルの人だとちょっとツライということを聞いたので、それ以前の内容に重点を置いたハンズオンをやってきました。

spring bootを改めて初心者向けに教えようと思うと、
そもそもアノテーションって何よ?ってところが結構問題だなと思ったので、
どこかでアノテーションが何をしているか(むしろ何をしていないのか)についてが判るような何かを開催したいなぁというところ。

なお、資料の大筋は以下の本の影響を少なからず受けています。(twitterbootstrapを使用するところとかデザインとか)



とりあえず、この本で挫折した人も参加してくれて一通り実装を出来ていたみたいなので、その点は良かったなぁと思いました。