Martin,

I agree regarding the bug - this fix provides a consistent approach to all situations where an OOME is thrown. (You can consider this an additional review.)

My meta-question is whether OOME should have been thrown for this case: it somehow seems wrong to me - I would not handle this error in the same way I would handle a true OOM, because this is obviously a simple programming error - but other than throwing an unspecified RuntimeException I don't see a better alternative. And it's a little late to change this now.

My caution with the fix is that it will now post JVMTI events in circumstances where they were not previously posted. I doubt any real code will be affected by this, but it is possible that there is a test somewhere that may get upset by it. You know how sensitive some of our tests can be. ;)

Cheers,
David

Martin Buchholz said the following on 06/15/09 08:43:
I'm far from an expert on jvmti or hotspot's error handling, but...

If I've asked for a command to be run on OOME,
having it not run feels very much like a bug.
I agree that OOME might not perfectly match the situation,
but is there a better course of action?
I don't see any reasonable alternative to throwing OOME.

Martin

On Sun, Jun 14, 2009 at 15:25, David Holmes - Sun Microsystems <[email protected] <mailto:[email protected]>> wrote:

    Martin, Jeremy,

    This change has been bugging me. I guess what I don't like is not
    the "fix" but the fact that we report OutOfMemoryError for this
    situation in the first place! We are not out-of-memory! We've been
    asked to allocate something that is impossible to allocate given the
    physical constraints of the memory system. The heap could actually
    be nearly empty! If I were executing a OOM handler using the
    "onError" mechanism I'm not sure I'd want it to run for this case.

    This fix makes this usage consistent with all the other OOM
    situations, but we post JVMTI resource exhausted events when the
    resource need not be exhausted at all! I'm not sure that is the
    right thing to do. Even assuming it is the right thing to do, this
    may impact some tests as it now generates additional JVMTI events.

    David Holmes

    Martin Buchholz said the following on 06/15/09 05:37:

        I've polished the changes in preparation for committing.
        I'll commit once I have reviewer approval.
        You'll need to let me know which forest to commit to.

        Test webrev is now at:
        http://cr.openjdk.java.net/~martin/jvmti-oom-test/
        <http://cr.openjdk.java.net/%7Emartin/jvmti-oom-test/>

        Now has more tests and filled-in @bug line.

        Hotspot fix webrev is at:
        http://cr.openjdk.java.net/~martin/jvmti-oom/
        <http://cr.openjdk.java.net/%7Emartin/jvmti-oom/>

        I've hacked on my private copy of webrev to make the output more
        suitable for
        external contributors.

        I think it's time to again beg the hotspot integrators
        to be sure to run the java/lang and java/util/concurrent tests
        from the jdk repo before committing changes to MASTER.

        Martin

        On Sat, Jun 13, 2009 at 10:18, Tim Bell <[email protected]
        <mailto:[email protected]> <mailto:[email protected]
        <mailto:[email protected]>>> wrote:

           Martin Buchholz wrote:

               I've called my own bluff and implemented a test case for this
               http://cr.openjdk.java.net/~martin/jvmti-oom/
        <http://cr.openjdk.java.net/%7Emartin/jvmti-oom/>
               <http://cr.openjdk.java.net/%7Emartin/jvmti-oom/>


               Jeremy's original fix is in this hotspot webrev:
               http://cr.openjdk.java.net/~martin/jvmti-oom-hotspot/
        <http://cr.openjdk.java.net/%7Emartin/jvmti-oom-hotspot/>
               <http://cr.openjdk.java.net/%7Emartin/jvmti-oom-hotspot/>


               Sun folks (Tim?), please take up the process issues:
               - please review test and fix
               - file one (or two?) "real" bugs or


           For the HotSpot VM side:

               6850957 hotspot/jvmti JVMTI OOM handling when arrays /
        objects
               are too large


           For the test case:

               6850958 java/classes_lang JVMTI OOM handling when arrays /
               objects are too large




               It's non-traditional to have fixes cross the hotspot/jdk
        barrier,
               but this was the easiest way to write a test case.


           This happens most often in the Serviceability area, for
        example when
           fixes hit JVM TI and JDWP code.  You have another good
        example, where
           the most natural test case fits in
        JDK/test/java/lang/ProcessBuilder

           The parent bugzilla report is:


            https://bugs.openjdk.java.net/show_bug.cgi?id=100067

           I filed two internal bug reports that should be visible on
           bugs.sun.com <http://bugs.sun.com> <http://bugs.sun.com>

           in a few working days.  Using URL surgery, I predict the URLs
        will be:

            http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6850957
            http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6850958

           Later today I will set up a forest, apply the patches from the
           webrevs, and send it through JPRT.  I want to see the HotSpot
           test results, as well as the new ProcessBuilder/Basic.java

           Tim



Reply via email to