APAR status
Closed as program error.
Error description
Error Message: A segmentation fault might occur or a NullPointerException might be thrown for a call to a method of an object of one of the primitive wrapper types, such as java.lang.Integer, java.lang.Long, and so on, or to a method of an object of type java.lang.String. . Stack Trace: N/A . This problem was first introduced in IBM Java 8 SR5 FP31.
Local fix
This issue can be worked around by specifying the option -Xjit:disableEscapeAnalysis. Specifying this option might have an effect on program performance.
Problem summary
One optimization of the Java JIT compiler is known as Escape Analysis. Under this optimization, the compiler identifies Java objects whose duration is brief, and it allocates them on the run-time stack rather than the Java heap in order to improve the run-time performance of the program. Such an object might be allocated on the run-time stack as a contiguous object, or if the entire object is not needed, as several temporary variables for the individual instance members of the original object. In the cases of an object of type java.lang.String or an object of one of the wrapper class types for the Java primitive types, if that object has methods called on it, it might still be broken up into several temporary variables for its individual instance members by Escape Analysis. Escape Analysis will generate code to allocate the object on the heap just at the point where one of its methods is called. Some calls to an object's method will happen through a pointer to the virtual function table for the object's class which is stored in a hidden instance member that is managed by the implementation. In the problem case, Escape Analysis generated code to call a method that attempted to use a temporary variable for the pointer to the object's virtual function table, but that temporary variable was only initialized with a null pointer reference.
Problem conclusion
The problem was fixed by ensuring that, for the kind of call described in the problem summary, Escape Analysis generates code that uses the pointer to the virtual function table that is a hidden instance member of the copy of the object that was allocated on the Java heap, rather than trying to use a separate temporary variable. The pointer to the virtual function table that is part of the object that is allocated on the heap will always be initialized correctly. . This APAR will be fixed in the following Java Releases: 8 SR6 (8.0.6.0) . 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
IJ20528
Reported component name
JIT
Reported component ID
620700124
Reported release
130
Status
CLOSED PER
PE
NoPE
HIPER
NoHIPER
Special Attention
NoSpecatt / Xsystem
Submitted date
2019-10-27
Closed date
2019-10-28
Last modified date
2019-10-28
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:
28 October 2019