From: Sharon L. <lu...@us...> - 2001-09-21 23:48:53
|
Can anyone explain why the attached simple Java program which creates one PythonInterpreter and then does an eval in a continuous loop using so much memory on Windows 2000 and Linux? Is it a Java problem or a Jython problem? Can it be fixed? On a Windows 2000 system with 128M memory using IBM Java 1.3.0 (20010609) with the JIT on, java.exe's memory usage for this program steadily increases and performance decreases. Eventually I get an OutOfMemory message. Elapsed time Memory Usage Time to complete 10,000 loops ------------ ------------ ----------------------------- 1 minute 26,108 K 31 seconds 20 minutes 121,696 K 70 seconds 54 minutes 185,132 K 116 seconds A similar memory increase and performance degradation is true running this program on a Linux Redhat 7.1 system with 256M memory and using IBM Java 1.3.0 (20010626) with the JIT on. However, on a Windows ME system with 64M memory using Sun Java 1.3.1 (HotSpot), there is no increase in memory usage and no performance degradation, even after this program has run for 24 hours. Here's the code for the SimpleEmbedded Java program that's running: import org.python.util.PythonInterpreter; import org.python.core.*; public class SimpleEmbedded { public static void main(String []args) throws PyException { PythonInterpreter interp = new PythonInterpreter(); interp.exec("import time"); interp.exec("LoopStartTime = time.time()"); int i = 1; while (i > 0) { interp.eval("'This is a test'"); if (i % 10000 == 0) { interp.exec("LoopStopTime = time.time()"); interp.exec("LoopElapsedSecs = LoopStopTime - LoopStartTime"); System.out.println("Completed Loop " + i + " - elapsed time: " + interp.get("LoopElapsedSecs") + " secs"); interp.exec("LoopStartTime = time.time()"); } i++; } } } -------------------------------------------------------------- Sharon Lucas IBM Austin, lu...@us... (512) 838-8347 or Tieline 678-8347 |