Out-of-Memory Handling in Long-Running / Server Applications
Randall R Schulz <[email protected]> Sun, 13 Apr 2008 08:41:14 -0700
| Newsgroups | gmane.comp.windows.devel.java.advanced |
|---|---|
| Message-ID | <[email protected]> |
Hi, My application has highly variable running times and memory demands based on the problems submitted to it. Some hard-to-solve (or insoluble) problems will run it out of memory. When memory is exhausted in the inner loop of the program (the only place it's going to happen), I catch the OutOfMemoryError, release the storage, trigger a GC (forcing it would seem desirable, but I'm not sure how to do that) and report the failure back up the call chain. The vast majority of the RAM is used in the search tree, which is linked only upwardly from the leaves and the leaves are all in a priority queue, so relinquishing the priority queue is enough to make all the objects in the tree unreferenceable. This technique sometimes works and sometimes does not. I.e., when it doesn't work the program gets another OOM very shortly after or during the my OOM handling and dies. Until recently, this application was mostly run from the command line so this behavior was not such a big problem. Now it's being used much more in its Web-App form (running in Tomcat 5.5, at the moment), this inadequate handling is becoming a problem. What techniques are available for handling OOM errors in situations where simply dying on the spot is not an option? Thanks. Randall Schulz =================================== This list is hosted by DevelopMentorĀ® http://www.develop.com View archives and manage your subscription(s) at http://discuss.develop.com