JDK-8155966 : Assertion failures when -XX:+UseParallelGC -XX:ParallelGCThreads=1
  • Type: Bug
  • Component: hotspot
  • Sub-Component: gc
  • Affected Version: 9
  • Priority: P1
  • Status: Resolved
  • Resolution: Fixed
  • Submitted: 2016-05-03
  • Updated: 2020-09-01
  • Resolved: 2016-05-04
The Version table provides details related to the release that this issue/RFE will be addressed.

Unresolved : Release in which this issue/RFE will be addressed.
Resolved: Release in which this issue/RFE has been resolved.
Fixed : Release in which this issue/RFE has been fixed. The release containing this fix may be available for download as an Early Access Release or a General Availability Release.

To download the current JDK release, click here.
JDK 9
9 b120Fixed
Related Reports
Relates :  
Relates :  
Description
Test /runtime/CommandLine/OptionsValidation/common fails in fastdebug, but probably many uses of  -XX:+UseParallelGC -XX:ParallelGCThreads=1 will fail.

There where many different failure modes:

----------------
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (/opt/jprt/T/P1/233740.sspitsyn/s/hotspot/src/share/vm/oops/klass.inline.hpp:66), pid=29120, tid=29152
#  assert(check_klass_alignment(result)) failed: address not aligned: 0x00000008baadbabe

V  [libjvm.so+0xf95084]  VMError::report(outputStream*, bool)+0x1770
V  [libjvm.so+0xf95618]  VMError::report_and_die(int, char const*, char const*, std::__va_list, Thread*, unsigned char*, void*, void*, char const*, int, unsigned long)+0x140
V  [libjvm.so+0xf961c8]  VMError::report_and_die(Thread*, char const*, int, char const*, char const*, std::__va_list)+0x54
V  [libjvm.so+0x652e08]  report_vm_error(char const*, int, char const*, char const*, ...)+0xe0
V  [libjvm.so+0xca2c28]  VerifyOopsClosure::do_oop(oop*)+0x208
V  [libjvm.so+0xc98888]  nmethod::oops_do(OopClosure*, bool)+0x19c
V  [libjvm.so+0xc9aa80]  nmethod::verify()+0x244
V  [libjvm.so+0x595718]  CodeCache::gc_epilogue()+0x8c
V  [libjvm.so+0xda3908]  PSParallelCompact::post_compact()+0x15c
V  [libjvm.so+0xda54d4]  PSParallelCompact::invoke_no_policy(bool)+0x4ac
V  [libjvm.so+0xda6000]  PSParallelCompact::invoke(bool)+0x130
V  [libjvm.so+0xf97f30]  VM_ParallelGCSystemGC::doit()+0x1ac
V  [libjvm.so+0xfc7e08]  VM_Operation::evaluate()+0xb0
V  [libjvm.so+0xfc3c2c]  VMThread::evaluate_operation(VM_Operation*)+0x134
V  [libjvm.so+0xfc4520]  VMThread::loop()+0x48c
V  [libjvm.so+0xfc477c]  VMThread::run()+0xc4
V  [libjvm.so+0xceb9c8]  java_start(Thread*)+0x118
C  [libpthread.so.0+0x7e2c]  start_thread+0xb0

-------------
#  Internal Error (/opt/jprt/T/P1/233740.sspitsyn/s/hotspot/src/share/vm/gc/parallel/psParallelCompact.cpp:1932), pid=26430, tid=4
#  assert(cm->region_stack()->is_empty()) failed: should be empty

V  [libjvm.so+0x2181d76]  void VMError::report(outputStream*,bool)+0xef6
V  [libjvm.so+0x2184083]  void VMError::report_and_die(int,const char*,const char*,__va_list_element*,Thread*,unsigned char*,void*,void*,const char*,int,unsigned long)+0x8e3
V  [libjvm.so+0x2183732]  void VMError::report_and_die(Thread*,const char*,int,const char*,const char*,__va_list_element*)+0x42
V  [libjvm.so+0x14e8819]  void report_vm_error(const char*,int,const char*,const char*,...)+0xf9
V  [libjvm.so+0x1ef8957]  bool PSParallelCompact::invoke_no_policy(bool)+0xdd7
V  [libjvm.so+0x1ef7abe]  void PSParallelCompact::invoke(bool)+0x9e
V  [libjvm.so+0x21884e8]  void VM_ParallelGCSystemGC::doit()+0xe8
V  [libjvm.so+0x21be999]  void VM_Operation::evaluate()+0x129
V  [libjvm.so+0x21bc36e]  void VMThread::evaluate_operation(VM_Operation*)+0x14e
V  [libjvm.so+0x21bc931]  void VMThread::loop()+0x3e1
V  [libjvm.so+0x21bbff7]  void VMThread::run()+0x97
V  [libjvm.so+0x1e1be62]  java_start+0x132
C  [libc.so.1+0x1251f1]  _thrp_setup+0xa5
C  [libc.so.1+0x125490]  _lwp_start+0x0

----------------
#  Internal Error (/scratch/opt/jprt/T/P1/233740.sspitsyn/s/hotspot/src/share/vm/code/debugInfo.cpp:51), pid=21966, tid=21971
#  assert(o->is_oop_or_null()) failed: oop only

V  [libjvm.so+0x1293aa7]  VMError::report_and_die(int, char const*, char const*, char*, Thread*, unsigned char*, void*, void*, char const*, int, unsigned int)+0x137
V  [libjvm.so+0x1294710]  VMError::report_and_die(Thread*, char const*, int, char const*, char const*, char*)+0x30
V  [libjvm.so+0x813800]  report_vm_error(char const*, int, char const*, char const*, ...)+0x60
V  [libjvm.so+0x81c4b2]  DebugInfoReadStream::read_oop()+0x1b2
V  [libjvm.so+0x81c8ce]  ConstantOopReadValue::ConstantOopReadValue(DebugInfoReadStream*)+0x3e
V  [libjvm.so+0x81d3d3]  ScopeValue::read_from(DebugInfoReadStream*)+0x153
V  [libjvm.so+0x10ebdbe]  ScopeDesc::decode_scope_values(int)+0x21e
V  [libjvm.so+0x10ecb92]  ScopeDesc::print_on(outputStream*, PcDesc*) const+0xe2
V  [libjvm.so+0x10ed135]  ScopeDesc::print_on(outputStream*) const+0x15
V  [libjvm.so+0x10151d2]  PcDesc::print(CompiledMethod*)+0xe2
V  [libjvm.so+0xf48dd8]  nmethod::print_pcs()+0xd8
V  [libjvm.so+0xf53674]  nmethod::print_nmethod(bool)+0x164
V  [libjvm.so+0xf5737f]  VerifyOopsClosure::do_oop(oop*)+0x8f
V  [libjvm.so+0xf4dd53]  nmethod::oops_do(OopClosure*, bool)+0x273
V  [libjvm.so+0xf51492]  nmethod::verify()+0x262
V  [libjvm.so+0x75f13c]  CodeCache::gc_epilogue()+0xac
V  [libjvm.so+0x1063ebc]  PSParallelCompact::post_compact()+0x12c
V  [libjvm.so+0x1065b53]  PSParallelCompact::invoke_no_policy(bool) [clone .part.164]+0x493
V  [libjvm.so+0x10668e8]  PSParallelCompact::invoke(bool)+0x138
V  [libjvm.so+0x1295db6]  VM_ParallelGCSystemGC::doit()+0xd6
V  [libjvm.so+0x12c975a]  VM_Operation::evaluate()+0x9a
V  [libjvm.so+0x12c4229]  VMThread::evaluate_operation(VM_Operation*)+0x169
V  [libjvm.so+0x12c4ba0]  VMThread::loop()+0x230
V  [libjvm.so+0x12c5140]  VMThread::run()+0xc0
V  [libjvm.so+0xfa5104]  java_start(Thread*)+0x124
C  [libpthread.so.0+0x6b2c]  start_thread+0xcc

-----------------

Comments
And... RULE "runtime/CommandLine/OptionsValidation/TestOptionsWithRanges.java" Crash Internal Error ...debugInfo.cpp...assert(o->is_oop_or_null()) failed: oop only RULE "runtime/CommandLine/OptionsValidation/TestOptionsWithRanges.java" Crash Internal Error ...klass.inline.hpp...assert(check_klass_alignment(result)) failed: address not aligned: ...
04-05-2016

The original code assumed that stealing tasks were only needed if there was more than 1 GC worker (otherwise stealing from whom?). The change for 8150994 make the stealing tasks the task than tasks that do the region draining tasks and should always create stealing tasks (even for only 1 GC worker). // Once a thread has drained it's stack, it should try to steal regions from // other threads. - if (parallel_gc_threads > 1) { for (uint j = 0; j < parallel_gc_threads; j++) { q->enqueue(new StealRegionCompactionTask(terminator_ptr)); } } -}
03-05-2016