Java进程的内存与占用系统内存的研究

1.问题1

-Xms4g -Xmx4g -Xmn1g启动该java进程,那么该进程占用机器内存情况是什么样的呢?

A:进过查看GClog及top、pmap看机器内存使用情况,发现以下实践真知:
1.进程启动后,该进程占用机器村内逐步增大,如500M、1g,期间会进行YGC,对此影响不大;

2020-xx-04T09:03:32.529+0800: 41.575: [GC (Allocation Failure) [PSYoungGen: 839680K->13428K(990720K)] 887823K->61580K(4136448K), 0.0052305 secs] [Times: user=0.08 sys=0.01, real=0.00 secs]
2020-xx-04T09:03:33.511+0800: 42.558: [GC (Allocation Failure) [PSYoungGen: 949364K->20549K(992256K)] 997516K->68709K(4137984K), 0.0057830 secs] [Times: user=0.09 sys=0.01, real=0.00 secs]

Young区从几百M变成几十M,总内存也从几百M变成几十M,(显示的总内存是4g)。
2. 当olg区达到3g,整个区差不多4g,会进行FullGC,此时old区从3g变成300M,java堆内存使用变少,但是此时top仍然是最大值。

2019-xx-28T16:10:50.867+0800: 181284.239: [GC (Allocation Failure) [PSYoungGen: 895638K->45114K(944128K)] 3998856K->3169775K(4089856K), 0.1031650 secs] [Times: user=0.79 sys=0.71, real=0.11 secs]
2019-xx-28T16:10:50.971+0800: 181284.342: [Full GC (Ergonomics) [PSYoungGen: 45114K->0K(944128K)] [ParOldGen: 3124661K->334930K(3145728K)] 3169775K->334930K(4089856K), [Metaspace: 44186K->44131K(1089536K)], 0.3835550 secs] [Times: user=4.06 sys=0.87, real=0.38 secs]
2019-xx-28T16:11:29.864+0800: 181323.236: [GC (Allocation Failure) [PSYoungGen: 839630K->16480K(944128K)] 1174560K->351410K(4089856K), 0.0547833 secs] [Times: user=0.11 sys=0.11, real=0.05 secs]

结论:java占用的linux内存会慢慢变大,直到FullGC后,java内存变少,但是占用机器仍然不会释放。

猜你喜欢

转载自blog.csdn.net/answer100answer/article/details/107398164