From: Pratyush R G. <pra...@ya...> - 2007-11-01 21:59:49
|
All, I have this test code public class TestMemory { public static void main(String[] args) { byte[] myByte = new byte[1024 * 1024 * 200]; myByte = null; System.gc(); while(true) { } } } When I am trying to run this from a java code then as expected the heap size increases to 200 MB and then comes back. However, when running this from a jython intepreter, the memory seems not to be released at all. Anyone has faced the same issues and if there is a solution to this? Rgds, Pratyush Thanks Pratyush __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com |
From: Philip J. <pj...@gr...> - 2007-11-10 21:25:29
|
On Nov 1, 2007, at 2:59 PM, Pratyush R Giri wrote: > All, > > I have this test code > > public class TestMemory > { > public static void main(String[] args) > { > byte[] myByte = new byte[1024 * 1024 * 200]; > > myByte = null; > System.gc(); > while(true) { > > } > } > } > > > When I am trying to run this from a java code then as > expected the heap size increases to 200 MB and then > comes back. However, when running this from a jython > intepreter, the memory seems not to be released at > all. > > Anyone has faced the same issues and if there is a > solution to this? > Jython itself wouldn't be affecting garbage collection, especially for a fully contained method like this. Running this code on its own (on OS X Java 1.5), I don't see the memory returned to the operating system via ps, which is probably what you're doing. I recall the JVM does not return all unused allocated memory back to the OS. Apparently managing this isn't an easy thing to do, CPython's pymalloc up until 2.5 would also never free memory back to the OS. So viewing the result of ps won't give an accurate measure of how much active memory is in use by Java. For that you should do: Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory(); -- Philip Jenvey |