Hi all, While working on a fix to issue, [1], I happened to review the code of [2]. In [2], if you search for ALL_CONNECTION_MANAGERS, you can see that you only put objects into it, and never remove. However, ALL_CONNECTION_MANAGERS is a WeakHashMap, [3], and I believe the expectation here is that the key will be removed once there are no strong references to it. Interestingly, the objects stored in this WeakHashMap are of type MultiThreadedHttpConnectionManager. And, each MultiThreadedHttpConnectionManager has a non-static inner class ConnectionPool which maintains a strong reference to the parent, [4-5]. Also, the MultiThreadedHttpConnectionManager contains a reference to the ConnectionPool. Thus, even after GC, the MultiThreadedHttpConnectionManager contains a valid circular reference to itself. And, AFAIU, the purpose of having a WeakHashMap doesn't seem to worthwhile in this scenario.
Thus, (according to my personal belief - please correct me if I'm wrong here) in theory and by debugging (I only have kept the server running for about 3-4 hours, and the map doesn't seem to shrink. I manually called System.gc() which had no effect.) into the code, I discovered that the ALL_CONNECTION_MANAGERS map is growing per each new MultiThreadedHttpConnectionManager being created. Our older atom-based remote registry, [6], creates a new AbderaClient, [7], per each registry operation, which in return creates a MultiThreadedHttpConnectionManager. Thus, even during halfway of startup, the ALL_CONNECTION_MANAGERS map has over 100 stale references stored in it. And, the number keeps increasing per registry call made. Axis2 however allows users to reuse the MultiThreadedHttpConnectionManager, which prevents creating new instances, but I wonder whether this is being practiced. Therefore, I wonder whether this could be a potential memory leak that would affect Carbon based products? [1] https://wso2.org/jira/browse/CARBON-4444 [2] http://hc.apache.org/httpclient-3.x/xref/org/apache/commons/httpclient/MultiThreadedHttpConnectionManager.html [3] http://java.sun.com/j2se/1.5.0/docs/api/java/util/WeakHashMap.html [4] http://www.codepoet.org/~markw/weber/java/ch6/notes.html [5] http://www.coderfriendly.com/2009/06/27/inner-classes-static-and-non-static/ [6] https://svn.wso2.org/repos/wso2/trunk/carbon/org.wso2.carbon.registry.core/src/main/java/org/wso2/carbon/registry/app/RemoteRegistry.java [7] http://svn.apache.org/repos/asf/abdera/java/trunk/client/src/main/java/org/apache/abdera/protocol/client/AbderaClient.java Thanks, Senaka.
_______________________________________________ Carbon-dev mailing list [email protected] https://mail.wso2.org/cgi-bin/mailman/listinfo/carbon-dev
