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

4

1 回答 1

3

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

这是可能的,但我严重怀疑它。

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


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

于 2013-08-05T04:09:07.353 回答