I take it back, I wasn't using the shell, I was compiling the JS to a
Java class. When I switched to using the shell it *did* exit on OOME.

The shell does in fact have a try/catch for VM errors.

Problem solved.

On Jan 15, 8:10 pm, Tom Robinson <[email protected]> wrote:
> My program is entirely JavaScript, and I'm using the Rhino shell to
> execute it, so I don't have the ability to add Java try/catches for
> VirtualMachineErrors without modifying the shell. I could do that, but
> I'd rather not. Would it be something worth adding to the official
> Rhino shell?
>
> But regardless of that, Java doesn't always seem to hang like this.
> For example, if you just do something like:
>
>     blah = [];
>     while(1) blah.push("blahblahblah");
>
> and execute it in the Rhino shell java will quickly throw the OOME
> *and exit*.
>
> But in my program it doesn't exit, it throws OOME and hangs.
>
> Thanks,
>
> Tom
>
> On Jan 9, 8:43 am, Attila Szegedi <[email protected]> wrote:
>
>
>
> > It's (unfortunately?) normal that a JVM doesn't exit on OOME. If you  
> > have a top-level processing loop, you can do a:
>
> > try
> > {
> > ...}
>
> > catch(VirtualMachineError e)
> > {
> >      System.exit(123);
>
> > }
>
> > or similar. I tend to have such catches in my production stuff, since  
> > if you get a VirtualMachineError (of which OOME is one subclass), then  
> > all bets are off with regard to correct future execution of that VM  
> > instance -- you can't count even on finally blocks completing, streams  
> > being flushed (potentially leading to incomplete file writes), etc.,  
> > so indeed the best course of action is exiting as quickly as possible  
> > and making sure monitoring staff spots it immediately.
>
> > One possible exception you might want to make is for  
> > StackOverflowError -- it too is a VirtualMachineError, but is normally  
> > localized in effect to a single thread. However, it too can cause VM  
> > guarantees to fail; a finally block executing after a SOE might get  
> > another SOE itself if the stack is still very deep while in the  
> > finally block, so I usually don't bother making an exception for it  
> > and my code does a System.exit() whenever it spots any  
> > VirtualMachineError.
>
> > Attila.
>
> > --
> > home:http://www.szegedi.org
> > twitter:http://twitter.com/szegedi
> > weblog:http://constc.blogspot.com
>
> > On 2009.01.09., at 16:10, Tom Robinson wrote:
>
> > > I have a fairly complex JavaScript app I run using the Rhino shell.
> > > Occasionally it runs out of memory and throws the OutOfMemoryError
> > > exception. I expect the java process to exit at that point, but it
> > > doesn't. No code seems to be executed after that point, but the
> > > process doesn't exit.
>
> > > This is rather annoying because then I can't check to see if the
> > > process has crashed and automatically restart it.
>
> > > I'm having a hard time creating a simple reduction. Has anyone
> > > experienced anything like this in Rhino, or Java in general?
>
> > > Thanks.

_______________________________________________
dev-tech-js-engine-rhino mailing list
[email protected]
https://lists.mozilla.org/listinfo/dev-tech-js-engine-rhino

Reply via email to