APAR status
Closed as program error.
Error description
Error Message: The following problems are possible: 1) CML Lock contention and zIIP eligible Java workloads unexpected shifting to GCPs. 2) SYSDUMP messages showing 0C7 abends as part of normal Java execution with no termination. 3) Data Exceptions causing MVS dump data set creation and 0C7 abends terminating the Java process. 4) Performance issues or regressions for code paths which throw a lot of Java exceptions . Stack Trace: N/A . This problem only applies to the z/OS platform
Local fix
Trap instructions can be disabled using the following Java command line option: -Xjit:noResumableTrapHandler
Problem summary
Beginning with Java 7.0 with the -Xaggressive option and Java 7.1/7R1 by default, the JIT compiler started using trap instructions to implement the implicit checks required by the Java specification done by the Java Virtual Machine for exception cases, e.g. NullPointerExceptions and ArrayIndexOutOfBounds. Like many optimizations, this involves a trade-off which benefits the main path but hurts the exception path. The implementation creates a 0C7 Data Exception when the Java exception needs to be thrown. This Data Exception signal needs to be passed to the JVM in order for Java execution to resume. The 4 problems that can arise are explained: 1) When a high volume of exceptions get thrown in parallel, the 0C7 Data Exceptions get serialized going through z/OS Recovery Termination Manager causing CML Lock contention and this also can cause the zIIP eligible Java workload to shift to GCPs. 2) The 0C7 Data Exceptions will get logged as SYSDUMP 0C7 abends if that is not suppressed. A Java program can potentially throw thousands of exceptions which can cause a lot of noise in system logs. 3) If the 0C7 Data Exception gets intercepted by a handler which does not pass it on to the JVM, a 0C7 abend will happen and a dump may be produced and the Java process will terminate. Correct signal chaining is required by the Java specification to avoid this scenario. 4) Because of the inherent trade-off in using trap instructions, if the exception path is heavily used, then this can have a significant and noticeable negative effect on performance. To be clear, regardless of how exceptions are implemented in the JVM, any Java program that heavily relies on throwing exceptions will not be following Java programming best practices and will not achieve optimal performance, but the use of trap instructions exacerbates this.
Problem conclusion
Trap instructions have been disabled by default on the z/OS platform. They may be enabled using the following Java command line option: -Xjit:enableTraps . This APAR will be fixed in the following Java Releases: 7 SR10 FP5 (7.0.10.5) 7 R1 SR4 FP5 (7.1.4.5) 8 SR4 FP5 (8.0.4.5) . 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
IV95073
Reported component name
JIT
Reported component ID
620700124
Reported release
260
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt / Xsystem
Submitted date
2017-04-12
Closed date
2017-04-19
Last modified date
2017-04-25
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
R260 PSY
UP
R130 PSY
UP
[{"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":"260","Edition":"","Line of Business":{"code":"","label":""}}]
Document Information
Modified date:
25 April 2017