-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 に答える