United StatesChange Country, Oracle Worldwide Web Sites Communities I am a... I want to...
Bug ID: 7112478 after 7105605 JRuby bench_define_method_methods.rb fails with NPE
7112478 : after 7105605 JRuby bench_define_method_methods.rb fails with NPE

Details
Type:
Bug
Submit Date:
2011-11-16
Status:
Closed
Updated Date:
2012-03-22
Project Name:
JDK
Resolved Date:
2012-01-20
Component:
hotspot
OS:
generic
Sub-Component:
compiler
CPU:
generic
Priority:
P3
Resolution:
Fixed
Affected Versions:
hs23
Fixed Versions:
hs23

Related Reports
Backport:
Backport:
Relates:

Sub Tasks

Description
$ jruby -J-showversion -X+C -J-d32 --server -J-Xbatch bench/bench_define_method_methods.rb
java version "1.7.0_02"
Java(TM) SE Runtime Environment (build 1.7.0_02-b12)
Java HotSpot(TM) Server VM (build 23.0-b06-internal, mixed mode)

                                                                  user     system      total        real
control, simple method, 10k * 100 invocations                 0.418000   0.000000   0.418000 (  0.345000)
define_method(:foo) {1}, 10k * 100 invocations                0.954000   0.000000   0.954000 (  0.955000)
eval'ed define_method(:baz) {1}, 10k * 100 invocations      Formatter.java:2472:in `format': java.lang.NullPointerException
        from Formatter.java:2423:in `format'
        from String.java:2845:in `format'
        from RubyModule.java:439:in `calculateAnonymousName'
        from RubyModule.java:410:in `calculateName'
        from RubyModule.java:401:in `getName'
...

Disabling OptimizePtrCompare makes the test pass:

$ jruby -J-showversion -X+C -J-d32 --server -J-Xbatch -J-XX:-OptimizePtrCompare bench/bench_define_method_methods.rb
java version "1.7.0_02"
Java(TM) SE Runtime Environment (build 1.7.0_02-b12)
Java HotSpot(TM) Server VM (build 23.0-b06-internal, mixed mode)

                                                                  user     system      total        real
control, simple method, 10k * 100 invocations                 0.401000   0.000000   0.401000 (  0.341000)
define_method(:foo) {1}, 10k * 100 invocations                0.976000   0.000000   0.976000 (  0.976000)
eval'ed define_method(:baz) {1}, 10k * 100 invocations        2.715000   0.000000   2.715000 (  2.715000)
define_method(:bar) {a = 1}, 10k * 100 invocations            0.779000   0.000000   0.779000 (  0.779000)
b = 1; define_method(:baz) {b = 2}, 10k * 100 invocations     0.759000   0.000000   0.759000 (  0.759000)
...

                                    

Comments
EVALUATION

http://hg.openjdk.java.net/lambda/lambda/hotspot/rev/cc81b9c09bbb
                                     
2012-03-22
EVALUATION

http://hg.openjdk.java.net/hsx/hotspot-emb/hotspot/rev/cc81b9c09bbb
                                     
2011-12-15
EVALUATION

http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev/cc81b9c09bbb
                                     
2011-11-29
EVALUATION

Added missing edges from arraycopy's destination fields to fields of source object. Mark source object as global escape if we are not sure that all edges are created.

EA bytecode analyzer gives incorrect information about returned object if there were state merges with processed block. Also call's result missed reference to returned arguments and unknown object when not only arguments is returned.

Added missing reference to NULL from array elements with OffsetBot offset.

Make sure that LocalVar and Field have edge to at least unknown object before removing deferred edges from the graph.

Moved escaped state propagation code to execute it after Connection Graph is completed and skip the rest of code if all objects globally escaped.

Also added accessors to check for null and unknown pointers. And don't add fields edges to NULL pointer object.
                                     
2011-11-29
EVALUATION

Incomplete Connection graph.
                                     
2011-11-18
WORK AROUND

-XX:-OptimizePtrCompare
                                     
2011-11-16
EVALUATION

$ jruby -X+C -J-d32 --server -J-Xbatch -J-XX:CICompilerCount=1 -J-XX:+PrintCompilation -J-XX:+PrintOptimizePtrCompare bench/bench_define_method_methods.rb
...
   7909  254   !b        java.util.Formatter::format (271 bytes)
++++ Replaced: 4787 CmpP(4786,38) --> EQ
   8061   37             java.lang.AbstractStringBuilder::append (48 bytes)   made not entrant
Formatter.java:2472:in `format': java.lang.NullPointerException
        from Formatter.java:2423:in `format'
        from String.java:2845:in `format'
...
                                     
2011-11-16



Hardware and Software, Engineered to Work Together