1

我使用 java melody 来监控生产环境中的内存使用情况。要求是内存不应该超过256MB/512MB

我已经做了最大的代码优化,但仍然是使用,448MB/512MB 但是当我在 java melody 中手动执行垃圾收集器时,内存消耗是109MB/512MB

4

2 回答 2

0

为什么你真的关心堆使用?只要设置 XMS(最大堆)就可以了。让 java 在合适的时候调用 GC。只要您有空闲堆,仅仅为了拥有大量空闲堆而进行 GC 和释放堆是没有意义的。

如果要限制进程分配的内存 XMX 是不够的。您还应该限制本机内存。

你应该关心的是

  • 内存泄漏、连续 Full GC、GC 饥饿
  • GC KPI:延迟、吞吐量、占用空间
  • 对象创建率、提升率、回收率……</li>
  • GC暂停时间统计:持续时间分布、平均值、计数、平均间隔、最小值/最大值、标准偏差
  • GC 原因统计信息:持续时间、百分比、最小/最大、总计
  • GC阶段相关统计:每个GC算法都有几个子阶段。G1 示例:initial-mark、remark、young、full、concurrent mark、mixed

https://blog.gceasy.io/2017/05/30/improving-your-performance-reports/ https://blog.gceasy.io/2017/05/31/gc-log-analysis-use-cases /了解更多技术细节。您还可以使用https://blog.gceasy.io/分析您的 GC 日志,这将帮助您了解 JVM 是如何使用内存的。

于 2017-06-09T10:58:20.543 回答
0

您可以在代码中使用这两个调用之一来调用垃圾收集(它们是等效的):

  • System.gc();
  • Runtime.getRuntime().gc();

最好将调用放在定期调用的 Runnable 中,具体取决于达到内存限制的速度。

于 2020-08-04T23:21:38.007 回答