/** * A class to demonstrate core dumping. */ public class CoreDumper { // load the library static { System.loadLibrary("nativelib"); } // native method declaration public native void core(); public static void main(String[] args) { new CoreDumper().core(); } }2. Compile the Java class
$ javac CoreDumper.java $ ls CoreDumper.class CoreDumper.java3. Generate the header file
$ javah -jni CoreDumper $ ls CoreDumper.class CoreDumper.h CoreDumper.java4. Implement the native method
Copy the method declaration from the header file and create a new file called
CoreDumper.c
containing the implementation of this method:
#include "CoreDumper.h" void bar() { // the following statements will produce a core int* p = NULL; *p = 5; // alternatively: // abort(); } void foo() { bar(); } JNIEXPORT void JNICALL Java_CoreDumper_core (JNIEnv *env, jobject obj) { foo(); }5. Compile the native code
This command may vary based on your operating system. On my Red Hat Linux machine, I use the following command:
$ gcc -fPIC -o libnativelib.so -shared \ -I$JAVA_HOME/include/linux/ \ -I$JAVA_HOME/include/ \ CoreDumper.c $ ls CoreDumper.class CoreDumper.h CoreDumper.java libnativelib.so6. Run the program
$ java -Djava.library.path=. CoreDumper # # A fatal error has been detected by the Java Runtime Environment: # # SIGSEGV (0xb) at pc=0x0000002b1cecf75c, pid=18919, tid=1076017504 # # JRE version: 6.0_21-b06 # Java VM: Java HotSpot(TM) 64-Bit Server VM (17.0-b16 mixed mode linux-amd64 ) # Problematic frame: # C [libnativelib.so+0x75c] bar+0x10 # # An error report file with more information is saved as: # /home/sharfah/tmp/jni/hs_err_pid18919.log # # If you would like to submit a bug report, please visit: # http://java.sun.com/webapps/bugreport/crash.jsp # The crash happened outside the Java Virtual Machine in native code. # See problematic frame for where to report the bug. # Aborted (core dumped)The core file
As shown above, running the program causes it to crash and a core file is produced. On my machine, the operating system writes out core files to
/var/tmp/cores
. You can use the following command to see what your core file directory is configured to:
$ cat /proc/sys/kernel/core_pattern /var/tmp/cores/%e.%p.%u.core $ ls /var/tmp/cores java.21178.146385.coreIn my next post, I will show you how can you perform some quick analysis on a core file to see what caused the crash. Next Post:
Analysing a Java Core Dump
i really like that you are giving information on core and advance java concepts. Being enrolled at http://www.wiziq.com/course/1779-core-and-advance-java-concepts i found your information very helpful indeed.thanks for it.
ReplyDeletewhich books and online video stuff should i use for java certificationjava certification dumps can be very helpful for passing the certification exams..
ReplyDeleteGood information. World-class thread dump analyzer to fire fight any sort of JVM related availability, scalability and performance problems. Applies several intelligence patterns discovers the root cause of the problem instantly.Java Thread Dump Analyzer
ReplyDelete