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

Final String field values should be trusted as stable

    Details

    • Type: Enhancement
    • Status: Resolved
    • Priority: P4
    • Resolution: Fixed
    • Affects Version/s: None
    • Fix Version/s: 9
    • Component/s: hotspot
    • Labels:
      None
    • Subcomponent:
    • Resolved In Build:
      b83

      Backports

        Description

        We have an UseImplicitStableValues option that enables treating some known VM fields as stable. However, for String.value, it does only seem to matter in GraphKit, and therefore only the targeted compiler optimizations benefit from this, not the normal Java code. This gets in the way with Compact String work, which has a new "byte coder" field, that participates in every hot method, e.g.:

            public int length() {
                return value.length >> coder;
            }

        This method is compiled normally, and so escapes the provisions of UseImplicitStableValues. When we ask for "someconstantstring".length(), the coder field would always be read. To solve this, we might want to mark all final String fields as stable. It is not sufficient, however, to put @Stable over them (even if @Stable was a public annotation), because one of the legitimate values for "coder" is zero, which is coincidentally the default value for byte field. Therefore, we might need to put final String fields to TrustFinalNonStaticFields exceptions, to fold every value of coder.

          Attachments

            Issue Links

              Activity

                People

                • Assignee:
                  shade Aleksey Shipilev
                  Reporter:
                  shade Aleksey Shipilev
                • Votes:
                  0 Vote for this issue
                  Watchers:
                  2 Start watching this issue

                  Dates

                  • Created:
                    Updated:
                    Resolved: