java - 高 PermGen,但堆使用率低

标签 java performance memory heap-memory permgen

我经常在我的 java(web) 应用程序中看到 High Perm Gen。

jmap 命令,经常显示已使用 90%。但它似乎不会对我的应用程序造成任何问题。我的总体堆使用率非常低(大约 400 MB,其中最大内存设置为 2048 MB)。

管理生产中应用程序的团队担心 PermGen 过高。通常各种各样​​的问题都归因于它。

问题:
(1) 我是否需要担心,因为 PermGen 很高,当垃圾收集发生时 PermGen 不会下降吗?
(2) 如果我将最大 PermGen 大小加倍(当前为 200 MB),会有任何副作用吗?

最佳答案

(1) Do i need to be worried just becz PermGen is High, Wouldn't PermGen come down when Garbage Collection happens?

不。 PermGen是为加载类信息而保留的空间。除非 Web 容器取消部署 WAR 文件并且不再需要这些类,否则它无法被垃圾回收。

(2) Should i double the max PermGen Size (current is 200 MB), would there be any side effect of that?

第一个明显的副作用是 JVM 会使用更多的 RAM。确保分配给机器的物理 RAM 足够。 BIRT is an example of an app尽管没有泄漏,但由于永久代空间,它很快就会失败。其次,我也会调查你的永久元是否有泄漏。增加永久生成作为预防措施是可以的,但从长远来看,如果存在内存泄漏,它可能对应用程序没有帮助。

一个leaking driver for example可能会导致更多永久元的使用。一个好的试金石是重复热部署您的应用程序并检查永久元的更改。它会不断增加直到内存耗尽吗?那么你就有了泄漏。

关于java - 高 PermGen,但堆使用率低,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15522837/

相关文章:

c++ - 处理内存,垃圾收集器之类的

memory - 分析Redis内存使用情况

java - Java中的正弦近似误差

java - Collection.toArray() 的时间复杂度是多少?

memory - CUDA 合并访问全局内存

javascript - Angularjs ui-router,当嵌套变得太多时

c# - 一行清除 CheckBoxList

java - 有工厂时在哪里放置 getAll() 方法

java - 根据当前请求URI获取用户权限

java - Object 类的方法如何通过接口(interface)可见?