JDK-6844419 : Crash throwing exception (loading classes) on 1.4.2/ia64 with full perm space and -noclassgc
  • Type: Bug
  • Component: other-libs
  • Sub-Component: other
  • Affected Version: 1.4.2_21-rev
  • Priority: P4
  • Status: Closed
  • Resolution: Won't Fix
  • OS: linux_suse_sles_11
  • CPU: itanium
  • Submitted: 2009-05-22
  • Updated: 2010-04-03
  • Resolved: 2009-06-16
Related Reports
Relates :  
Relates :  
Testcase for 6173515 (Test6173515.sh) tests that exceptions are thrown when filling the heap and, separately, filling the perm generation by continually loading classes.

The ConsumePermGen test crashes on ia64: (although the testcase wrapper hides the crash and appears to pass)

hpzx:~/kevin/6173515 # $TESTJAVA/bin/java -noclassgc -XX:MaxPermSize=32m ConsumePermGen

Exception in thread "main" java.lang.OutOfMemoryError
# An unexpected error has been detected by HotSpot Virtual Machine:
#  Internal Error (455843455054494F4E530E435050011B), pid=9911, tid=2305843009214615424
# Java VM: Java HotSpot(TM) 64-Bit Server VM (1.4.2_21-rev-b04 mixed mode)
# An error report file with more information is saved as hs_err_pid9911.log
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
hpzx:~/kevin/6173515 #

The crashing stack is:

Core was generated by `/root/kevin/j2sdk1.4.2_21/bin/java -noclassgc -XX:MaxPermSize=32m ConsumePermGe'.
Program terminated with signal 6, Aborted.
#0  0xa000000000010721 in __kernel_syscall_via_break ()
(gdb) bt
#0  0xa000000000010721 in __kernel_syscall_via_break ()
#1  0x2000000000142940 in raise () from /lib/libc.so.6.1
#2  0x2000000000145210 in abort () from /lib/libc.so.6.1
#3  0x2000000000ea60b0 in os::abort(int) () from /root/kevin/j2sdk1.4.2_21/jre/lib/ia64/server/libjvm.so
#4  0x2000000001039690 in VMError::report_and_die(void) () from /root/kevin/j2sdk1.4.2_21/jre/lib/ia64/server/libjvm.so
#5  0x2000000000a01b30 in report_fatal(char const *, int, char const *) () from /root/kevin/j2sdk1.4.2_21/jre/lib/ia64/server/libjvm.so
#6  0x2000000000a7d560 in ExceptionMark::~ExceptionMark(void) () from /root/kevin/j2sdk1.4.2_21/jre/lib/ia64/server/libjvm.so
#7  0x2000000000fd0ed0 in JavaThread::exit(int) () from /root/kevin/j2sdk1.4.2_21/jre/lib/ia64/server/libjvm.so
#8  0x2000000000fda580 in Threads::destroy_vm(void) () from /root/kevin/j2sdk1.4.2_21/jre/lib/ia64/server/libjvm.so
#9  0x2000000000c0dd90 in jni_DestroyJavaVM () from /root/kevin/j2sdk1.4.2_21/jre/lib/ia64/server/libjvm.so
#10 0x4000000000003370 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)

Use of -noclassgc is perhaps asking for a problem when we need to load a class in order to proceed, and the perm space is absolutely full.

We need to load some classes after the exception happens:


WORK AROUND Do not use -noclassgc

EVALUATION Although I haven't tested older verisons, this may have always been the case with ia64 / 1.4.2. As it only relates to using -noclassgc, and comes from a testcase that can avoid that option, closing as will not fix seems acceptable. The testcase failure (CR 6840156) demands an increase in the MaxPermSize setting in the script in order to run on ia64 at all, and removing -noclassgc as part of that change still demonstrates the exception.