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

Instrumentation.retransformClasses() leaks class bytes

    XMLWordPrintable

    Details

    • Subcomponent:
    • Introduced In Build:
      b40
    • Introduced In Version:
      6
    • Resolved In Build:
      b10
    • CPU:
      generic
    • OS:
      generic
    • Verification:
      Verified

      Backports

        Description

        java.lang.instrument.Instrumentation.retransoformClasses() leaks
        memory for the retransformed class or classes.

        As part of the work on this bug, the following SDK/JDK test
        will be added:

            java/lang/instrument/RetransformBigClass.sh
        The attached output.6u29_server_base.with_transformer.log tells
        the tale for the Server VM on Solaris X86. Version info is:

        java version "1.6.0-201112142258.dcubed.exp_bofa_leak"
        Java(TM) SE Runtime Environment (build 1.6.0-201112142258.dcubed.exp_bofa_leak-jprtadm_14_Dec_2011_15_17-b00)
        Java HotSpot(TM) Server VM (build 20.4-b02, mixed mode)

        The above bits are with the fix for 7121600 in place.


        Here is trace info for the first RedefineClasses() call:

        RedefineClasses-0x1: loading name=BigClass (avail_mem=1183084K)
        RedefineClasses-0x1: loaded name=BigClass (avail_mem=1178924K)
        RedefineClasses-0x1: redefined name=BigClass, count=1 (avail_mem=1178884K)


        Here is trace info for the last RedefineClasses() call:

        RedefineClasses-0x1: loading name=BigClass (avail_mem=134072K)
        RedefineClasses-0x1: loaded name=BigClass (avail_mem=133040K)
        RedefineClasses-0x1: redefined name=BigClass, count=1000 (avail_mem=133040K)


        Here's the math for leak:

        1178884 - 133040
        1045844
        . / 1024
        1021.3320

        So we leaked just over 1GB in 1000 RedefineRetransform() calls.
        The attached output.6u29_client_base.with_transformer.log tells
        the tale for the Client VM on Solaris X86. Version info is:

        java version "1.6.0-201112142258.dcubed.exp_bofa_leak"
        Java(TM) SE Runtime Environment (build 1.6.0-201112142258.dcubed.exp_bofa_leak-jprtadm_14_Dec_2011_15_17-b00)
        Java HotSpot(TM) Client VM (build 20.4-b02, mixed mode)

        The above bits are with the fix for 7121600 in place.


        Here is trace info for the first RedefineClasses() call:

        RedefineClasses-0x1: loading name=BigClass (avail_mem=1112544K)
        RedefineClasses-0x1: loaded name=BigClass (avail_mem=1108400K)
        RedefineClasses-0x1: redefined name=BigClass, count=1 (avail_mem=1108352K)


        Here is trace info for the last RedefineClasses() call:

        RedefineClasses-0x1: loading name=BigClass (avail_mem=151196K)
        RedefineClasses-0x1: loaded name=BigClass (avail_mem=150160K)
        RedefineClasses-0x1: redefined name=BigClass, count=1000 (avail_mem=150160K)


        Here's the math for leak:

        1108352 - 150160
        958192
        . / 1024
        935.7343

        So we leaked almost 1GB in 1000 RedefineRetransform() calls.

          Attachments

            Issue Links

              Activity

                People

                Assignee:
                dcubed Daniel Daugherty
                Reporter:
                dcubed Daniel Daugherty
                Votes:
                0 Vote for this issue
                Watchers:
                2 Start watching this issue

                  Dates

                  Created:
                  Updated:
                  Resolved:
                  Imported:
                  Indexed: