Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8159244

Partially initialized string object created by C2's string concat optimization may escape

    XMLWordPrintable

Details

    • b127
    • Verified

    Backports

      Description

        C2's String concatenation optimization replaces a series of StringBuilder.append() calls by creating a single char buffer array (or byte array with Compact Strings) and emitting direct loads/stores to/from this array. The final StringBuilder.toString() call is replaced by a new String allocation which is initialized to the buffer array (see [1] -> [2], CallStaticJava is replaced).
        Depending on the scheduling of instructions, it may happen that a reference to the newly allocated String object escapes before the String.value field is initialized (see [2], '334 StoreP' stores the String object, '514 StoreP' initializes the String.value field). In a highly concurrent setting, another thread may try to dereference String.value from such a partially initialized String object and crash.

        TestStringObjectInitialization.java reproduces this problem with JDK 7, 8 and 9 (see attached hs_err files) in approximately 1 out of 10 runs. I had to disable Indify String Concat, Compressed Oops and G1 to trigger the bug with JDK 9.

        [1] https://bugs.openjdk.java.net/secure/attachment/60305/graph_baseline_before%20SC.png
        [2] https://bugs.openjdk.java.net/secure/attachment/60306/graph_baseline_after_sc.png

        Attachments

          1. JDK9_hs_err_pid383.log
            64 kB
          2. JDK8u_hs_err_pid23015.log
            67 kB
          3. JDK7_hs_err_pid17491.log
            139 kB
          4. graph_fix.png
            graph_fix.png
            54 kB
          5. graph_baseline_before SC.png
            graph_baseline_before SC.png
            21 kB
          6. graph_baseline_after_sc.png
            graph_baseline_after_sc.png
            28 kB
          7. fix.asm
            0.5 kB
          8. baseline.asm
            0.6 kB

          Issue Links

            Activity

              People

                thartmann Tobias Hartmann
                thartmann Tobias Hartmann
                Votes:
                0 Vote for this issue
                Watchers:
                7 Start watching this issue

                Dates

                  Created:
                  Updated:
                  Resolved: