- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我监控了一个 Java7 应用程序几个星期,我观察到了一些我想了解的事情。
从应用程序开始加载类的总数不断增长,我认为这是正常的,因为应用程序(基于 netty 3.6 库)每小时打开和关闭大量 tcp 连接。我认为我也不应该为此担心,因为当前加载的类计数器没有增长。
我无法理解的是,为什么大约每 7 天总加载类数就会下降到当前加载类计数器。此外,堆内存使用似乎遵循相同的模式:堆空间增长到 70mb,然后减少到 20mb。
它就像每 7 天执行一次更“深入”的垃圾收集器执行。
应用程序从未重启过。
有人可以向我解释这种行为吗?谢谢。
附言不幸的是,我无法截取 JConsole 的屏幕截图。
最佳答案
在 Oracle JVM 中,堆中有多个内存池。其中一个是旧的 gen 池,另一个是 perm gen 池。 old gen 池包含在几次垃圾回收中幸存下来的对象。永久生成池包含加载的类和其他“永久”数据。
堆池的垃圾回收方式不同。您看到的标准垃圾回收通常在伊甸园池中运行,伊甸园池是放置新创建的对象的地方。理论是,如果你有很多短暂的对象,那么这些对象通常可以在一个小堆中被垃圾收集。与此同时,您的生命周期较长的对象会被提升到较旧的池中,并且收集频率会降低。
这一切都是为了允许更有效的垃圾收集,因为生命周期较长的对象不像生命周期较短的对象那样经常被考虑收集。因此,您看到的“更深层次”执行可能是在旧的 gen 池被收集时。碰巧的是,Oracle 决定实现一些事情,以便 perm gen 池与 old gen 池同时收集垃圾,这就是为什么它们同时被丢弃。
最后,简单地打开和关闭 TCP 连接不应导致加载新类。可能发生的情况是某些库在连接到达时正在创建新的动态代理。这个动态代理是一个在运行时创建的全新类,当它被创建时,它会增加你的类加载总数。
引用资料:
关于java - JConsole 总加载类行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20637225/
大家好, 我正在尝试使用 jconsole 连接到远程 Wildfly 8 Final 服务器。那不起作用:连接失败。经过多次尝试和失败后,我试图让它至少连接到我的“localhost”jboss,但
我尝试运行JConsole来分析正在运行的进程使用的内存,但是即使我绝对确定一个进程正在运行,JConsole也不会向我显示进程(除了它还应该在进程列表中显示JConsole之外,但它不)。 有谁知道
如何将 jconsole 输出保存在日志文件中? 我尝试添加logging.properties,但它已被忽略: jconsole.exe -Jjava.util.logging.config.fil
当您启动 jconsole 或 VisualVM 时,它们会向您显示可以附加和监视的“本地运行的 Java 应用程序”列表。 它如何知道本地运行的应用程序存在哪些? 最佳答案 引自VisualVM d
我想避免为进程分配特定的 TCP 端口,但仍然能够与其中的 JMX MBean 建立(本地)连接。我不断看到证据表明这应该是可能的,但我无法弄清楚我将使用什么作为 JNDI 名称来引用某些此类进程,或
我正在使用 jconsole 连接到远程 jboss 服务器。由于某种原因,除 MBean 之外的所有选项卡都被禁用,我如何设置 jboss 运行配置以允许远程内存监控? 我正在使用以下链接连接到 j
我是trying to use JConsole to see if I have a memory leak但不知道要寻找什么。如果非要我猜的话,内存使用率应该总是上升,尽管有垃圾回收,如下所示:
我监控了一个 Java7 应用程序几个星期,我观察到了一些我想了解的事情。 从应用程序开始加载类的总数不断增长,我认为这是正常的,因为应用程序(基于 netty 3.6 库)每小时打开和关闭大量 tc
我正在尝试使用其 Main 类从命令行启动 JConsole。 我提取了 jconsole.jar 的内容,在 MANIFEST.MF 中我可以看到 Main-Class: sun.tools.jco
我正在尝试熟悉 JMX,并且一直在使用 Oracle 教程来帮助我加快速度。根据this链接,我应该运行 Java 应用程序,然后运行 jconsole。 然而,即使我安装了 JDK 1.6.0_
我经常使用jconsole连接本地tomcat。是否可以不通过 PID 而是通过进程名称进行连接?因为今天我必须多次重启 tomcat,每次我需要连接 jconsole 以调用 mbean 上的某些操
我有一个多线程数据加载作业,一直在崩溃。我在 jconsole 中观看它,类区域似乎呈指数级增长。我在我设置的地方找到了这个 javassist.ClassPool ClassPool.doPruni
我正在使用 JConsole 访问我的应用程序 MBean。目前还没有适当的身份验证。当用户通过 Jconsole 访问它时,我想进行基于用户名/密码的身份验证。 我在 google 上进行了搜索并尝
我们有一些使用 docker 运行 java 进程的容器。我们一直注意到的一件事是,仅通过运行一个简单的 spring-boot 应用程序就占用了大量内存,甚至没有包含我们自己的代码(只是为了尝试获得
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the
我正在为我的项目做负载测试,当我尝试使用 jconsole 来监视服务器何时重新启动连接丢失时,有什么解决方案吗? 谢谢 最佳答案 jconsole 连接到一个进程,当服务器重新启动时它获得一个新的进
我正在使用 VNC 连接到服务器。我能够通过 VNC 连接到服务器并打开 Jconsole,但无论我包含 PID 还是尝试使用 GUI 进行连接,都无法让它连接到我的进程。奇怪的是所有进程都显示在 G
Console工具在JDK/bin目录下,启动JConsole后,将自动搜索本机运行的jvm进程,不需要jps命令来查询指定。双击其中一个jvm进程即可开始监控,也可使用“远程进程”来连接远程服务器。
我最近开始学习J。 如果发现它在学习一门新语言时能够快速 将一些源代码映射到输出并将其存储以供以后在 Emacs 组织模式中引用。 但是我遇到了神秘的问题 jconsole当我想做评估时。 例如 jc
是否可以在通过命令行启动时将受监控资源的凭据传递给 JConsole。我现在得到了这样的命令。 ${jdk.home}/bin/jconsole.exe -J-Djava.class.path
我是一名优秀的程序员,十分优秀!