Critical memory leak with J/Link
- To: mathgroup at smc.vnet.net
- Subject: [mg47530] Critical memory leak with J/Link
- From: "J. McKenzie Alexander" <jalex at lse.ac.uk>
- Date: Thu, 15 Apr 2004 03:39:57 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
I've encountered a curious, and completely disabling, memory leak when I use J/Link. The memory leak is such that a program can easily consume over 1.5GB of virtual memory and will crash the system if left to run for an extended period of time. The leak occurs under both Windows XP and Mac OS X (Panther), with both machines running Mathematica 5.0 (J/Link version 2.1.1). The XP box has Sun Java 1.4.1_03 (build 2) installed, and the OS X box has java 1.4.2_03 (build 1.4.2_03-117.1) installed. Here's the simplest example I've found. // MemoryLeaker.java import com.wolfram.jlink.*; public class MemoryLeaker { Expr expr; public MemoryLeaker(Expr e) { expr = e; } public Expr getExpr() { return expr; } } Once MemoryLeaker is compiled, load it into Mathematica and use it as follows (adjusting the AddToClassPath command as necessary, of course). In[1]:= Needs["JLink`"]; <<DiscreteMath`Combinatorica` In[3]:= AddToClassPath["/Users/jalex/Source/tmp/"]; In[4]:= LoadJavaClass["MemoryLeaker"]; In[5]:= g=GridGraph[50,50]; In[6]:= memoryLeaker=JavaNew["MemoryLeaker", NormalizeVertices[g] ]; In[7]:= Do[ memoryLeaker@getExpr[],{50} ]; The above run leaves J/Link, on my OS X box, in the following state: ID Name %CPU Real Memory Virtual Memory 1287 J/Link 0.00 265.50 MB 823.50 MB Memory is not freed with calls to JavaGC[]. It is only freed with QuitJava[] or quitting the kernel. The real kicker is that if you replace line 6 with the following: In[6]:= memoryLeaker=JavaNew["MemoryLeaker", g ]; no leak occurs. However, if you replace line 6 with In[6]:= g2 = NormalizeVertices[g]; memoryLeaker = JavaNew["MemoryLeaker", g2]; you still get the memory leak. Would someone please explain what I'm doing wrong in the above example or, if I'm not doing anything wrong, a work-around? Cheers, Jason -- Dr J. McKenzie Alexander Department of Philosophy, Logic and Scientific Method London School of Economics and Political Science Houghton Street, London WC2A 2AE
- Follow-Ups:
- Re: Critical memory leak with J/Link
- From: "Werner Schuster" <werner.schuster@netway.at>
- Re: Critical memory leak with J/Link