JDK-7118647 : compressed oops crashes on MacOS X with JPRT GCBasher test
  • Type: Bug
  • Component: hotspot
  • Sub-Component: runtime
  • Affected Version: hs23
  • Priority: P3
  • Status: Closed
  • Resolution: Duplicate
  • OS: os_x
  • CPU: x86
  • Submitted: 2011-12-06
  • Updated: 2012-02-17
  • Resolved: 2012-02-17
Related Reports
Duplicate :  
Relates :  
Description
Vladimir posted the following (which includes an exact command line to
use to reproduce the crash):

I would suggest to file bug and disable Compressed oops for MacOS until the bug is fixed. It is not clear for me what is going on here since I don't know how to debug there. One assumption why assert failed is _noaccess_prefix == 0 but
size_t(_base + _size) > OopEncodingHeapMax. Which means OS allocated heap in the different address from what is asked (we need to print all values in assert to verify it).

Also hs_err does not work with hs_err for Mac:

sh: /usr/ccs/bin/elfdump: No such file or directory
sh: /usr/ccs/bin/nm: No such file or directory
sh: /usr/ccs/bin/elfdump: No such file or directory
sh: /usr/ccs/bin/nm: No such file or directory

V  [libjvm.dylib+0x28f83f]

I was able to reproduce it only after few attempts which means :

/tmp/jprt/P1/145914.jmelvin/testproduct/macosx_x64_10.7-fastdebug/bin/java -server -Xmx128M -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseParallelOldGC -XX:+PrintMiscellaneous -XX:+Verbose -XX:+PrintCompressedOopsMode -XX:+TracePageSizes -jar GCBasher.jar -time:30000
  Initial heap size 86047552
  Minimum heap size 6815736
[SafePoint Polling address: 0x00000001051ff000]
code heap:  min=2555904 max=50331648 pg_sz=4096 base=0x0000000106414000 size=50331648
Logical CPUs per core: 2
UseSSE=4
Allocation prefetching: PREFETCHNTA at distance 192, 4 lines of 64 bytes
PrefetchCopyIntervalInBytes 576
PrefetchScanIntervalInBytes 576
PrefetchFieldsAhead 1
CPU:total 8 (4 cores per cpu, 2 threads per core) family 6 model 42 stepping 7, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, ht
Minimum heap 6815744  Initial heap 86048768  Maximum heap 134217728
1: Minimum gen0 2228224  Initial gen0 28639232  Maximum gen0 44695552
Minimum gen1 4587520  Initial gen1 57409536  Maximum gen1 89522176
ps heap raw:  21248,83968 4480,87424 2176,43648 215040
ps heap rnd:  21248,83968 4480,87424 2176,43648 215040
# To suppress the following error report, specify this argument
# after -XX: or in .hotspotrc:  SuppressErrorAt=/virtualspace.cpp:460
#
# A fatal error has been detected by the Java Runtime Environment:
#
#  Internal Error (/private/tmp/jprt/P1/145914.jmelvin/source/src/share/vm/runtime/virtualspace.cpp:460), pid=33006, tid=4399587328
#  assert((_noaccess_prefix != 0) == (UseCompressedOops && _base != NULL && (size_t(_base + _size) > OopEncodingHeapMax) && Universe::narrow_oop_use_implicit_null_checks())) failed: noaccess_prefix should be used only with non zero based compressed oops
#

When it passed I got this output:

/tmp/jprt/P1/145914.jmelvin/testproduct/macosx_x64_10.7-fastdebug/bin/java -server -Xmx128M -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseParallelOldGC -XX:+PrintMiscellaneous -XX:+Verbose -XX:+PrintCompressedOopsMode -XX:+TracePageSizes -jar GCBasher.jar -time:30000
  Initial heap size 86047552
  Minimum heap size 6815736
[SafePoint Polling address: 0x000000010c1fa000]
code heap:  min=2555904 max=50331648 pg_sz=4096 base=0x000000010d384000 size=50331648
Logical CPUs per core: 2
UseSSE=4
Allocation prefetching: PREFETCHNTA at distance 192, 4 lines of 64 bytes
PrefetchCopyIntervalInBytes 576
PrefetchScanIntervalInBytes 576
PrefetchFieldsAhead 1
CPU:total 8 (4 cores per cpu, 2 threads per core) family 6 model 42 stepping 7, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1, sse4.2, popcnt, ht
Minimum heap 6815744  Initial heap 86048768  Maximum heap 134217728
1: Minimum gen0 2228224  Initial gen0 28639232  Maximum gen0 44695552
Minimum gen1 4587520  Initial gen1 57409536  Maximum gen1 89522176
ps heap raw:  21248,83968 4480,87424 2176,43648 215040
ps heap rnd:  21248,83968 4480,87424 2176,43648 215040
ps perm:  min=21757952 max=85983232 pg_sz=4096 base=0x00000007f2e00000 size=85983232
ps main:  min=6815744 max=134217728 pg_sz=4096 base=0x00000007f8000000 size=134217728
card table:  min=430081 max=430081 pg_sz=4096 base=0x0000000110444000 size=434176
par bitmap:  min=6881280 max=6881280 pg_sz=4096 base=0x0000000110d1a000 size=6881280
par compact:  min=3010560 max=3010560 pg_sz=4096 base=0x00000001113aa000 size=3010560

heap address: 0x00000007f2e00000, size: 210 MB, zero based Compressed Oops
Jim reported the following during his recent JPRT experiments:

Intermittent failure with JPRT testing of the non-universal binary...

Internal Error (/private/tmp/jprt/P1/050642.jmelvin/source/src/share/vm/runtime/virtualspace.cpp:460), pid=53634, tid=4531154944
#  assert((_noaccess_prefix != 0) == (UseCompressedOops && _base != NULL && (size_t(_base + _size) > OopEncodingHeapMax) && Universe::narrow_oop_use_implicit_null_checks())) failed: noaccess_prefix should be used only with non zero based compressed oops
#

For more details, see my jobs on the East queue. Not sure if this is a
known problem. No other failures. Still working on the create_jdk target
for universal binaries. Tricky makefile magic.

Comments
EVALUATION Relax the assertion to simply check for COOP mode rather than an exact address.
16-02-2012