|
Home > Archive > WebSphere Application Server > April 2006 > JVM of Websphere crashes
You are viewing an archived Text-only version of the thread.
To view this thread in it's original format and/or if you want to reply to
this thread please [click here]
| Author |
JVM of Websphere crashes
|
|
|
| Hi everybody,
i have a serious problem which I want to ask you, maybe you have a solution.
When I want to start an Java Test Case, the JVM of Websphere crashs down (J2RE 1.4.2 IBM Windows 32 build cn142-20050609).
Do you have got an idea?????
Increasing Heapsize does not solve the problem out.
There is no specific message other than a dumb file, which looks so:
NULL ------------------------------------------------------------------------
0SECTION TITLE subcomponent dump routine
NULL ===============================
1TISIGINFO signal 11 received
1TIDATETIME Date: 2006/04/27 at 12:30:18
1TIFILENAME Javacore filename: R:\ppinto_mws_pj01\rep\mws_deployment\ja
vacore.20060427.123018.3236.txt
NULL ------------------------------------------------------------------------
0SECTION XHPI subcomponent dump routine
NULL ==============================
1XHEXCPCODE Exception code: C0000005 Access Violation
1XHEXCPADDRESS Fault address: 7C93426D 01:0003326D
1XHEXCPMODULE Fault module: C:\WINNT\system32\ntdll.dll
NULL
1XHREGISTERS Registers:
2XHREGISTER EAX:00000002
2XHREGISTER EBX:000001B8
2XHREGISTER ECX:00260FC8
2XHREGISTER EDX:00000009
2XHREGISTER ESI:002601C0
2XHREGISTER EDI:00260200
2XHREGISTER CS:EIP:001B:7C93426D
2XHREGISTER SS:ESP:0023:0006DF7C EBP:0006E19C
2XHREGISTER DS:0023 ES:0023 FS:003B GS:0000
NULL
1XHFLAGS Flags:00010246
NULL
NULL ------------------------------------------------------------------------
0SECTION CI subcomponent dump routine
NULL ============================
1CIJAVAVERSION J2RE 1.4.2 IBM Windows 32 build cn142-20050609
1CIRUNNINGAS Running as a standalone JVM
1CICMDLINE C:\Apps\wsad_6.0.0.1\runtimes\base_v6\java\jre\bin\javaw.exe -classpath....
NULL
1CIJVMMI JVM Monitoring Interface (JVMMI)
NULL ------------------------
2CIJVMMIOFF No events are enabled.
NULL
NULL ------------------------------------------------------------------------
0SECTION DC subcomponent dump routine
NULL ============================
1DCHEADEREYE Header eye catcher DCST
1DCHEADERLEN Header length 24
1DCHEADERVER Header version 1
1DCHEADERMOD Header modification 0
1DCINTERFACE DC Interface at 0x1015EE7C with 15 entries
2DCINTERFACE 1 - dcCString2JavaString 0x1006E970
2DCINTERFACE 2 - dcInt642CString 0x1006EB30
2DCINTERFACE 3 - dcJavaString2NewCString 0x1006ED50
2DCINTERFACE 4 - dcJavaString2CString 0x1006EC70
2DCINTERFACE 5 - dcJavaString2NewPlatformString 0x1006EEA0
2DCINTERFACE 6 - dcJavaString2UTF 0x1006F240
2DCINTERFACE 7 - dcPlatformString2JavaString 0x1006EFC0
2DCINTERFACE 8 - dcUnicode2UTF 0x1006F170
2DCINTERFACE 9 - dcUnicode2UTFLength 0x1006F0E0
2DCINTERFACE 10 - dcUTF2JavaString 0x1006F610
2DCINTERFACE 11 - dcUTFClassName2JavaString 0x1006F910
2DCINTERFACE 12 - dcJavaString2ClassName 0x1006F310
2DCINTERFACE 13 - dcUTF2UnicodeNext 0x1006FB90
2DCINTERFACE 14 - dcVerifyUTF8 0x1006FC80
2DCINTERFACE 15 - dcDumpRoutine 0x10070310
1DCARRAYINFO Array info at 0x101139A8 with 16 entries
2DCARRAYINFO 1 - index 0 signature 0 name N/A factor 0
2DCARRAYINFO 2 - index 0 signature 0 name N/A factor 0
2DCARRAYINFO 3 - index 2 signature L name class[] factor 4
2DCARRAYINFO 4 - index 0 signature 0 name N/A factor 0
2DCARRAYINFO 5 - index 4 signature Z name bool[] factor 1
2DCARRAYINFO 6 - index 5 signature C name char[] factor 2
2DCARRAYINFO 7 - index 6 signature F name float[] factor 4
2DCARRAYINFO 8 - index 7 signature D name double[] factor 8
2DCARRAYINFO 9 - index 8 signature B name byte[] factor 1
2DCARRAYINFO 10 - index 9 signature S name short[] factor 2
2DCARRAYINFO 11 - index 10 signature I name int[] factor 4
2DCARRAYINFO 12 - index 11 signature J name long[] factor 8
2DCARRAYINFO 13 - index 0 signature 0 name uint[] factor 0
2DCARRAYINFO 14 - index 0 signature 0 name uint1[] factor 0
2DCARRAYINFO 15 - index 0 signature 0 name uint2[] factor 0
2DCARRAYINFO 16 - index 0 signature 0 name uint3[] factor 0
NULL ------------------------------------------------------------------------
0SECTION DG subcomponent dump routine
NULL ============================
1DGTRCENABLED Trace enabled: Yes
2DGTRCTYPE Trace: Internal
2DGTRCBUFFERS Buffer specification: 8k
2DGTRCBUFALLOC Buffers allocated: 0
2DGTRCBUFUSED Buffers in use: 0
1DGJDUMPBUFF Javadump buffer size (allocated): 2621440
NULL ------------------------------------------------------------------------
0SECTION ST subcomponent dump routine
NULL ============================
1STGCMODES Resettable GC: No
1STGCMODES Concurrent GC: No
1STCURHBASE Current Heap Base: 0x101801FC
1STCURHLIM Current Heap Limit: 0x1057FBFC
1STMWHBASE Middleware Heap Base: 0x101801FC
1STMWHLIM Middleware Heap Limit: 0x1057FBFC
1STGCHELPERS Number of GC Helper Threads: 0
1STJVMOPTS -Xconcurrentlevel: 0
1STJVMOPTS -Xconcurrentbackground: 0
1STGCCTR GC Counter: 1
1STAFCTR AF Counter: 1
1STHEAPFREE Bytes of Heap Space Free: 14fd80
1STHEAPALLOC Bytes of Heap Space Allocated: 3ffa00
1STSMBASE SM Base: 0x0
1STSMEND SM End: 0x0
1STPAMSTART PAM Start: 0x0
1STPAMEND PAM End: 0x0
1STCOMACTION Compact Action: 0
NULL ------------------------------------------------------------------------
0SECTION XE subcomponent dump routine
NULL ============================
1XETHRESHOLD MMI threshold for Java methods is set to 2000
1XEJITINIT JIT is initialized
1XEJVMPIOFF JVMPI is not activated
1XEJNITHRESH MMI threshold for JNI methods is set to 0
1XETRCHIS Trace history length is set to 4
1XEJITDUMP JIT dump routine is not yet implemented.
NULL ------------------------------------------------------------------------
0SECTION LK subcomponent dump routine
NULL ============================
NULL
1LKPOOLINFO Monitor pool info:
2LKPOOLINIT Initial monitor count: 32
2LKPOOLEXPNUM Minimum number of free monitors before expansion: 5
2LKPOOLEXPBY Pool will next be expanded by: 16
2LKPOOLTOTAL Current total number of monitors: 32
2LKPOOLFREE Current number of free monitors: 28
NULL
1LKMONPOOLDUMP Monitor Pool Dump (flat & inflated object-monitors):
2LKMONINUSE sys_mon_t:0x002B7C58 infl_mon_t: 0x0026E034:
3LKMONOBJECT java.lang.ref.Reference$Lock@10200598/102005A0: <unowned>
3LKNOTIFYQ Waiting to be notified:
3LKWAITNOTIFY "Reference Handler" (0x1DFF6F0)
2LKMONINUSE sys_mon_t:0x002B7CE8 infl_mon_t: 0x0026E08C:
3LKMONOBJECT java.lang.ref.ReferenceQueue$Lock@102002D0/102002D8: <unowned>
3LKNOTIFYQ Waiting to be notified:
3LKWAITNOTIFY "Finalizer" (0x1E36620)
NULL
1LKREGMONDUMP JVM System Monitor Dump (registered monitors):
2LKREGMON JITC PIC Lock (0x01F5AEC0): <unowned>
2LKREGMON JITC CHA lock (0x01F34F38): <unowned>
2LKREGMON JITC MB UPDATE lock (0x05890070): <unowned>
2LKREGMON JITC Global_Compile lock (0x05890020): <unowned>
2LKREGMON Free Class Loader Cache Entry lock (0x0026FD50): <unowned>
2LKREGMON IO lock (0x0026FD08): <unowned>
2LKREGMON Evacuation Region lock (0x0026FC78): <unowned>
2LKREGMON Heap Promotion lock (0x0026FC30): <unowned>
2LKREGMON Sleep lock (0x0026FBE8): <unowned>
2LKREGMON Method trace lock (0x0026FBA0): <unowned>
2LKREGMON Heap lock (0x0026FA80): owner "main" (0x2AE790), entry count 1
2LKREGMON Monitor Cache lock (0x0026F9F0): owner "main" (0x2AE790), entry count 1
2LKREGMON JNI Pinning lock (0x0026FAC8): <unowned>
2LKREGMON JNI Global Reference lock (0x0026FA38): <unowned>
2LKREGMON Classloader lock (0x0026FB58): <unowned>
2LKREGMON Binclass lock (0x0026F9A8): <unowned>
2LKREGMON Thread queue lock (0x002AE568): owner "main" (0x2AE790), entry count 1
2LKREGMON Monitor Registry lock (0x0026FB10): owner "main" (0x2AE790), entry count 1
2LKREGMON System Heap lock (0x0026ECD8): <unowned>
2LKREGMON ACS Heap lock (0x0026ED20): <unowned>
2LKREGMON PAM lock (0x0026ED68): <unowned>
2LKREGMON Intern String Table lock (0x0026EDB0): <unowned>
2LKREGMON Classloader lock (0x0026EDF8): <unowned>
2LKREGMON JIT Byte Code lock (0x0026EE40): <unowned>
2LKREGMON JIT Global Compile lock (0x0026EE88): <unowned>
2LKREGMON JIT BINCLASS lock (0x0026EED0): <unowned>
2LKREGMON JIT Debug lock (0x0026EF18): <unowned>
2LKREGMON JIT Log lock (0x0026EF60): <unowned>
2LKREGMON JITmemT 1 lock (0x0026EFA8): <unowned>
2LKREGMON JITspaceT 1 lock (0x0026EFF0): <unowned>
2LKREGMON JITcodeT 1 lock (0x0026F038): <unowned>
2LKREGMON JITnccbT 1 lock (0x0026F080): <unowned>
2LKREGMON JIT Invoke Interface Cache lock (0x0026F0C8): <unowned>
2LKREGMON JIT Class Map lock (0x0026F110): <unowned>
2LKREGMON JIT Code lock (0x0026F158): <unowned>
2LKREGMON JITmblkT 1 lock (0x0026F1A0): <unowned>
2LKREGMON JIT MB Update lock (0x0026F1E8): <unowned>
2LKREGMON Permanent Variable subpool lock (0x0026F230): <unowned>
2LKREGMON Intern String Buckets subpool lock (0x0026F278): <unowned>
2LKREGMON UTF8 Cache subpool lock (0x0026F2C0): <unowned>
2LKREGMON Namespace Cache subpool lock (0x0026F308): <unowned>
2LKREGMON Class Storage subpool lock (0x0026F350): <unowned>
2LKREGMON CL Tables subpool lock (0x0026F398): <unowned>
2LKREGMON JIT General subpool lock (0x0026F3E0): <unowned>
NULL
1LKFLATMONDUMP Thread identifiers (as used in flat monitors):
2LKFLATMON ident 0x07 "ReaderThread" (0x59C8158) ee 0x059C7F80
2LKFLATMON ident 0x05 "Finalizer" (0x1E36620) ee 0x01E36448
2LKFLATMON ident 0x04 "Reference Handler" (0x1DFF6F0) ee 0x01DFF518
2LKFLATMON ident 0x03 "Signal dispatcher" (0x1E94920) ee 0x01E94748
2LKFLATMON ident 0x02 "main" (0x2AE790) ee 0x002AE5B8
NULL
1LKOBJMONDUMP Java Object Monitor Dump (flat & inflated object-monitors):
2LKFLATLOCKED sun.misc.Launcher$AppClassLoader@101EB7B0/101EB7B8
3LKFLATDETAILS locknflags 00020200 Flat locked by thread ident 0x02, entry count 3
2LKINFLATEDMON java.lang.ref.ReferenceQueue$Lock@102002D0/102002D8
3LKINFLDETAILS locknflags 80000400 Monitor inflated infl_mon 0x0026E08C
2LKINFLATEDMON java.lang.ref.Reference$Lock@10200598/102005A0
3LKINFLDETAILS locknflags 80000200 Monitor inflated infl_mon 0x0026E034
2LKFLATLOCKED java.io.InputStreamReader@10335560/10335568
3LKFLATDETAILS locknflags 00070100 Flat locked by thread ident 0x07, entry count 2
NULL ------------------------------------------------------------------------
0SECTION XM subcomponent dump routine
NULL ============================
NULL
1XMCURTHDINFO Current Thread Details
NULL ----------------------
3XMTHREADINFO "main" (TID:0x101EB9B8, sys_thread_t:0x2AE790, state:R, native ID:0x5AC) prio=5
4XESTACKTRACE at java.util.zip.ZipFile.getEntry(Native Method)
4XESTACKTRACE at java.util.zip.ZipFile.getEntry(ZipFile.java(Compiled Code))
4XESTACKTRACE at java.util.jar.JarFile.getEntry(JarFile.java(Compiled Code))
4XESTACKTRACE at java.util.jar.JarFile.getJarEntry(JarFile.java(Compiled Code))
4XESTACKTRACE at java.util.jar.JarFile.getManifest(JarFile.java:198)
4XESTACKTRACE at sun.misc.URLClassPath$5.getManifest(URLClassPath.java:687)
4XESTACKTRACE at java.net.URLClassLoader.defineClass(URLClassLoader.java:399)
4XESTACKTRACE at java.net.URLClassLoader.access$500(URLClassLoader.java:109)
4XESTACKTRACE at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java:848)
4XESTACKTRACE at java.security.AccessController.doPrivileged1(Native Method)
4XESTACKTRACE at java.security.AccessController.doPrivileged(AccessController.java:389)
4XESTACKTRACE at java.net.URLClassLoader.findClass(URLClassLoader.java:371)
4XESTACKTRACE at java.lang.ClassLoader.loadClass(ClassLoader.java:572)
4XESTACKTRACE at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:442)
4XESTACKTRACE at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
4XESTACKTRACE at org.apache.cactus.internal.AbstractCactusTestCase.<clinit>(AbstractCactusTestCase.java:53)
4XESTACKTRACE at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
4XESTACKTRACE at sun.reflect.NativeConstructorAccessorImpl. newInstance(NativeConstructorAccessorImp
l.java:80)
4XESTACKTRACE at sun.reflect.DelegatingConstructorAccessorImpl. newInstance(DelegatingConstructorAccesso
rImpl.java:44)
4XESTACKTRACE at java.lang.reflect.Constructor.newInstance(Constructor.java:315)
4XESTACKTRACE at junit.framework.TestSuite.createTest(TestSuite.java:135)
4XESTACKTRACE at junit.framework.TestSuite.addTestMethod(TestSuite.java:114)
4XESTACKTRACE at junit.framework.TestSuite.<init>(TestSuite.java:75)
4XESTACKTRACE at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.getTest(RemoteTestRunner.java:366)
4XESTACKTRACE at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:404)
4XESTACKTRACE at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:311)
4XESTACKTRACE at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
1XMTHDINFO All Thread Details
NULL ------------------
NULL
2XMFULLTHDDUMP Full thread dump Classic VM (J2RE 1.4.2 IBM Windows 32 build cn142-20050609, native threads):
3XMTHREADINFO "ReaderThread" (TID:0x101EB6F8, sys_thread_t:0x59C8158, state:R, native ID:0xAEC) prio=5
4XESTACKTRACE at java.net.SocketInputStream.socketRead0(Native Method)
4XESTACKTRACE at java.net.SocketInputStream.read(SocketInputStream.java:153)
4XESTACKTRACE at java.net.SocketInputStream.read(SocketInputStream.java:114)
4XESTACKTRACE at sun.nio.cs.StreamDecoder$ConverterSD.implRead(StreamDecoder.java:325)
4XESTACKTRACE at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:223)
4XESTACKTRACE at java.io.InputStreamReader.read(InputStreamReader.java:208)
4XESTACKTRACE at java.io.BufferedReader.fill(BufferedReader.java:153)
4XESTACKTRACE at java.io.BufferedReader.readLine(BufferedReader.java(Compiled Code))
4XESTACKTRACE at java.io.BufferedReader.readLine(BufferedReader.java:379)
4XESTACKTRACE at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner$ReaderThread.run(RemoteTestRunner.java:145)
3XMTHREADINFO "Finalizer" (TID:0x101EB8B0, sys_thread_t:0x1E36620, state:CW, native ID:0x980) prio=8
4XESTACKTRACE at java.lang.Object.wait(Native Method)
4XESTACKTRACE at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:144)
4XESTACKTRACE at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:160)
4XESTACKTRACE at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:211)
3XMTHREADINFO "Reference Handler" (TID:0x101EB908, sys_thread_t:0x1DFF6F0, state:CW, native ID:0xB30) prio=10
4XESTACKTRACE at java.lang.ref.Reference.process(Native Method)
4XESTACKTRACE at java.lang.ref.Reference.access$300(Reference.java:50)
4XESTACKTRACE at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:130)
3XMTHREADINFO "Signal dispatcher" (TID:0x101EB960, sys_thread_t:0x1E94920, state:R, native ID:0xBE8) prio=5
3XMTHREADINFO "main" (TID:0x101EB9B8, sys_thread_t:0x2AE790, state:R, native ID:0x5AC) prio=5
4XESTACKTRACE at java.util.zip.ZipFile.getEntry(Native Method)
4XESTACKTRACE at java.util.zip.ZipFile.getEntry(ZipFile.java(Compiled Code))
4XESTACKTRACE at java.util.jar.JarFile.getEntry(JarFile.java(Compiled Code))
4XESTACKTRACE at java.util.jar.JarFile.getJarEntry(JarFile.java(Compiled Code))
4XESTACKTRACE at java.util.jar.JarFile.getManifest(JarFile.java:198)
4XESTACKTRACE at sun.misc.URLClassPath$5.getManifest(URLClassPath.java:687)
4XESTACKTRACE at java.net.URLClassLoader.defineClass(URLClassLoader.java:399)
4XESTACKTRACE at java.net.URLClassLoader.access$500(URLClassLoader.java:109)
4XESTACKTRACE at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java:848)
4XESTACKTRACE at java.security.AccessController.doPrivileged1(Native Method)
4XESTACKTRACE at java.security.AccessController.doPrivileged(AccessController.java:389)
4XESTACKTRACE at java.net.URLClassLoader.findClass(URLClassLoader.java:371)
4XESTACKTRACE at java.lang.ClassLoader.loadClass(ClassLoader.java:572)
4XESTACKTRACE at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:442)
4XESTACKTRACE at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
4XESTACKTRACE at org.apache.cactus.internal.AbstractCactusTestCase.<clinit>(AbstractCactusTestCase.java:53)
4XESTACKTRACE at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
4XESTACKTRACE at sun.reflect.NativeConstructorAccessorImpl. newInstance(NativeConstructorAccessorImp
l.java:80)
4XESTACKTRACE at sun.reflect.DelegatingConstructorAccessorImpl. newInstance(DelegatingConstructorAccesso
rImpl.java:44)
4XESTACKTRACE at java.lang.reflect.Constructor.newInstance(Constructor.java:315)
4XESTACKTRACE at junit.framework.TestSuite.createTest(TestSuite.java:135)
4XESTACKTRACE at junit.framework.TestSuite.addTestMethod(TestSuite.java:114)
4XESTACKTRACE at junit.framework.TestSuite.<init>(TestSuite.java:75)
4XESTACKTRACE at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.getTest(RemoteTestRunner.java:366)
4XESTACKTRACE at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:404)
4XESTACKTRACE at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:311)
Do you have got an idea?????
cheers
| |
|
|
|
| thanks
the lastest fix resolved the problem.
Be sure to use the lastest fixes :-)
thx a lot
| |
| randeep 2006-04-28, 8:09 am |
| It doesn't seem to be a memory problem.
There is some problem in following dll
Fault module: C:\WINNT\system32\ntdll.dll
This is the method that is failing
java.util.zip.ZipFile.getEntry(Native Method)
check out you trace for more delails
cheers | |
| was_forum 2006-04-29, 7:21 am |
| ben_
How you judge, the jdk's version is problem?
Why every ibmer suggest update the jdk no matter the problem is at this point.
august guo
| |
| Paul Ilechko 2006-04-29, 7:21 am |
| was_forum wrote:
> ben_
>
> How you judge, the jdk's version is problem?
> Why every ibmer suggest update the jdk no matter the problem is at this point.
> august guo
What makes you think Ben is from IBM?
What makes you think that it is not a good idea to apply necessary
maintenance ?
Didn't you notice that someone else said that the fixes the Ben
recommended solved their problem?
| |
|
| Very amuzing reaction... :-)
OK, I'll tell you the magic: "Search engine is my friend" + experience with
WebSphere, and you get the formula.
I simply searched for javacore-related problems with different combinations
of the following keywords: "javacore", "core dump", "ntdll.dll", "7C93426D"
and "ZipFile.getEntry" (it's the currently running thread in the javacore).
And I found several bug reports not directly relevant but somehow suggesting
that a JDK fix could help, because it was not likely to be a bug in
ntdll.dll but rather caused by invalid arguments passed to it.
Thinking further at how ZipFile.getEntry could cause a JVM crash then rang a
bell to me, as I remembered I or a colleague of mine once experienced
problems with ZipFile.getEntry causing javacores. And for what I remembered
it was solved by a JDK fix. Hence my suggestion.
But you're correct that any JVM crash is very likely to get as first answer:
"upgrade the JDK". Even more, when it mentions "Access Violation" as reason.
Probably because it's the way IBM Support works: "(...) These factors
highlight the advantage of applying a newer Java SDK before working through
a full PD cycle." (Java SDK Upgrade policy for WebSphere Application Server,
http://www-1.ibm.com/support/docvie...uid=swg21138332)
While it's frustrating in the first place, it proved to be correct several
times for me. And I now proceed more easily with JDK updates than in the
past.
BTW, if you feel you need get more familiar with reading and understanding
javacores, you'll want to read the IBM JVM Diagnostic Guide
(http://www.ibm.com/developerworks/java/jdk/diagnosis).
It covers advanced subjects (very much in depth) and I found it difficult to
understand in the first place. But I realized that you only need to try to
understand what you find interesting in the first place and read it again
and again when you get a challenging JDK problem to solve (experience you
get between readings helps understand a bit more each time).
|
|
|
|
|