在pthread_create中是否有JRE 1.6内存泄漏?

时间:2013-08-05 03:31:53

标签: java memory-leaks pthreads glibc

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内存泄漏?

1 个答案:

答案 0 :(得分:3)

  

pthread_create中是否有JRE 1.6内存泄漏?

有可能,但我严重怀疑它。

如果start()有很多线程并且它们永远不会终止,那么泄漏内存。但是,这不是pthread_create的错。内存泄漏(实际上)在您的代码中。


无限制的线程创建在Java应用程序中是一件坏事。一个更好的策略是使用带有有限线程池的ExecutorService实例...并让Java运行时负责创建线程。