APAR status
Closed as program error.
Error description
Error Message: SIG_SEGV when executing in code for java/util/ArrayList$Itr.next() on POWER platforms. . Stack Trace: Looking at the javacore from the crash the "Current thread" stack trace looks like this: 3XMTHREADINFO3 Java callstack: 4XESTACKTRACE at java/util/ArrayList$Itr.next(ArrayList.java:878(Compiled Code)) . The problem can only surface when an array of objects is allocated at the very end of the java heap memory space and that object array is being accessed using the Iterator object returned from ArrayList.iterator() i.e. static void test(ArrayList numbers){ Iterator<String> itr = numbers.iterator(); while( itr.hasNext() ){ System.out.println("Itr: " + itr.next() ); } System.out.println("\n"); } This issue involving ArrayList$Itr.next() can only happen in Java 8.0.5.17, 8.0.5.20 and 8.0.5.21 but a similar issue involving TreeMap$UnboundedValueIterator.next() can happen in previous releases. The chances of hitting the TreeMap problem were increased in Java 8.0.5.17 because of a change in the prefetching stride distance. Both issues are addressed by the same fix. The issue only effects POWER (PowerPC) platforms (AIX and Linux on PPC)
Local fix
You can only avoid the problem by preventing the JIT from compiling and inlining two specific methods using the following command line option: -Xjit:exclude={java/util/ArrayList$Itr.next*|java/util/Tree Map$UnboundedValueIterator.next*},dontInline={java/util/ArrayLis t$Itr.next*|java/util/TreeMap$UnboundedValueIterator.next*} The above option should only have a minor effect on performance for most applications. Note that depending on how the option is provided and the environment that the command is running in, it may be necessary to escape the $ characters to prevent them being processed by the shell.
Problem summary
When attempting to load the CPU cache with the contents of objects that we expect to be accessed in the near future, the JIT could run off the end of an object array leading to a crash when that array is allocated at very the end of the addressable memory space.
Problem conclusion
The JIT was modified so that it will only attempt to load the CPU cache when it's known to be safe to do so. . This APAR will be fixed in the following Java Releases: 8 SR5 FP22 (8.0.5.22) . Contact your IBM Product's Service Team for these Service Refreshes and Fix Packs. For those running stand-alone, information about the available Service Refreshes and Fix Packs can be found at: https://www.ibm.com/developerworks/java/jdk/
Temporary fix
Comments
APAR Information
APAR number
IJ08850
Reported component name
JIT
Reported component ID
620700124
Reported release
130
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt / Xsystem
Submitted date
2018-08-29
Closed date
2018-08-30
Last modified date
2018-12-06
APAR is sysrouted FROM one or more of the following:
APAR is sysrouted TO one or more of the following:
Fix information
Fixed component name
JIT
Fixed component ID
620700124
Applicable component levels
[{"Business Unit":{"code":"BU048","label":"IBM Software"},"Product":{"code":"SSC9HBA","label":"Just In Time (JIT) Compiler"},"Component":"","ARM Category":[],"Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"130","Edition":"","Line of Business":{"code":"","label":""}}]
Document Information
Modified date:
06 December 2018