Environment Info:
OS:
SLES 11 sp1(Linux linux 2.6.32.59-0.7-default #1 SMP 2012-07-13 15:50:56 +0200 x86_64 x86_64 x86_64 GNU/Linux);
GLIBC:
rpm -qa | grep glibc
glibc-devel-2.11.1-0.17.4
glibc-i18ndata-2.11.1-0.17.4
glibc-32bit-2.11.1-0.17.4
glibc-locale-32bit-2.11.1-0.17.4
glibc-info-2.11.1-0.17.4
glibc-locale-2.11.1-0.17.4
glibc-devel-32bit-2.11.1-0.17.4
glibc-2.11.1-0.17.4;
JRE:
java version "1.6.0_43"
Java(TM) SE Runtime Environment (build 1.6.0_43-b01)
Java HotSpot(TM) 64-Bit Server VM (build 20.14-b01, mixed mode)
JVM Args:
-Xms128m -Xmx128m -XX:MaxPermSize=64m
Problem when the java process runing after a while,resident memory has an increase of 200M.
/proc/${PID}/fd and jstack have no changes.
Then I use gperftools to analyse the memory,as fellow:
time1:
124.5 31.5% 80.0% 124.5 31.5% pthread_create@@GLIBC_2.2.5
time2:
162.6 37.3% 81.2% 162.6 37.3% pthread_create@@GLIBC_2.2.5
'pthread_create@@GLIBC_2.2.5' calling increase from 124.5M to 162.6M
pthread_create中是否有JRE 1.6内存泄漏?
答案 0 :(得分:3)
pthread_create中是否有JRE 1.6内存泄漏?
有可能,但我严重怀疑它。
如果start()
有很多线程并且它们永远不会终止,那么将泄漏内存。但是,这不是pthread_create
的错。内存泄漏(实际上)在您的代码中。
无限制的线程创建在Java应用程序中是一件坏事。一个更好的策略是使用带有有限线程池的ExecutorService
实例...并让Java运行时负责创建线程。