我正在调查一个生产系统上的JVM崩溃,以下内存值在下面的hs\u err\u pid日志文件片段中代表什么?
Heap
par new generation total 1258624K, used 955445K [0x00000005c0000000, 0x00000006155b0000, 0x000000066aaa0000)
eden space 1118784K, 73% used [0x00000005c0000000, 0x00000005f1e52598, 0x0000000604490000)
from space 139840K, 98% used [0x000000060cd20000, 0x00000006153db100, 0x00000006155b0000)
to space 139840K, 0% used [0x0000000604490000, 0x0000000604490000, 0x000000060cd20000)
tenured generation total 2796224K, used 1745107K [0x000000066aaa0000, 0x0000000715550000, 0x00000007c0000000)
the space 2796224K, 62% used [0x000000066aaa0000, 0x00000006d52d4d90, 0x00000006c2e0c400, 0x0000000715550000)
compacting perm gen total 482944K, used 482943K [0x00000007c0000000, 0x00000007dd7a0000, 0x0000000800000000)
the space 482944K, 99% used [0x00000007c0000000, 0x00000007dd79fff0, 0x00000007dd7a0000, 0x00000007dd7a0000)
No shared spaces configured.
我关心的是“压缩perm-gen”的用法:它是指最大分配perm-gen堆的使用百分比,还是最大堆的使用百分比,或者其他什么?提供的百分比似乎是已用/总百分比的一部分,这是分配的总perm gen吗?由于我们的-XX:MaxPermSize设置为1GB。。。
是否有任何有用的资源(除了Oracle白皮书,它没有提到hs_err文件)来解释在JVM崩溃中转储的数据?
但仅仅因为您将MaxPermSize设置为1GB,并不意味着HotSpot将遵守它。我认为我从未获得超过512MB的数据。JVM的482MB非常接近这个数字。
无论如何,512MB对于PermGen来说已经足够了,因为它只用于保存类的元数据,除非通过ClassLoader加载更多的类,否则它的大小不会增长。所以问题是:您真的需要超过512MB来保存内存中所有必要类的字节码大小吗?
很可能您的系统在PermGen中确实存在内存泄漏。
我从未找到准确描述“压实perm gen”值的参考文献,但我们自己的调查证明,报告的值为:
当前使用的永久发电机/当前分配的永久发电机
在我问题中的示例中,这意味着已经为PermGen分配了482944K内存,其中482943K已在GC点使用(99%)。我们的最大PermGen大小设置为1048576K(1GB),因此收集过程有大量保留资源可重新分配。
对于那些遇到类似问题的人,我们最终解决了问题。在我们的例子中,它原来是一个利用太阳的第三方图书馆。其他。不安全类,当使用不当时,它是出了名的“不安全”。
在本例中,克隆对象的一段逻辑将特定的类加载器传递给了某个sun。其他。复制对象的不安全操作。在某些机器上,复制的对象经常在损坏状态下创建。当JVM试图进行垃圾收集时,它最终会捕获其中一个坏对象并崩溃。这总是导致我的问题中描述的错误。
问题内容: 我对Heap,Young,Tenured和Perm一代感到困惑。 谁能解释一下? 问题答案: Java垃圾收集器被称为分 代垃圾收集器 。应用程序中的对象生存的时间长短不一,具体取决于它们的创建位置和使用方式。此处的主要见解在于,针对短期和长期对象使用不同的垃圾回收策略,可以针对每种情况专门优化GC。 松散地说,当对象在新 世代中 “生存”重复的垃圾回收时,它们将迁移到 终身代 。该
替换中国大陆主流视频网站的 Flash 播放器为 HTML5 播放器 使用 Mac 的同学都可能碰到过在线看视频引起机子风扇狂转、机身发烫等情况,这是因为 Flash 占用了过多系统资源的缘故。 目前主流视频网站(包括但不限于 优酷、土豆、奇艺、搜狐、QQ、56 等)都支持 iOS 设备的在线播放,同时使用非 iOS 设备访问则会使用默认的 Flash 播放器。 这个 Chrome 浏览器的扩展原
在OSX上安装java,scala scalding之后,当我尝试运行WordCountJob文件时,出现以下错误 编译wordcountjob.scala scalac-classpath/users/me/.sbt/boot/scala--2.9.3/lib/scala-library.jar:/drive/me/coding/scalding/scalding-core/target/sca
问题内容: Java内存空间(Perm空间,Space Stack,堆空间)之间有什么区别? JVM什么时候使用一个或另一个? 如果我使用Scala / Groovy / etc等,会有区别吗? 问题答案: 只是 堆空间:所有活动对象都分配在这里。 堆栈空间:在方法调用或变量实例化中存储对对象的引用以获取变量。 烫发空间:存储已加载的类信息 例如: 执行完上述行之后,内存状态将是这样。 堆:存储“
问题内容: 我目前正在阅读Deitel的有关Java的书,并在他们的一个程序中遇到了以下代码: 如标题所示,“。2f”前面的“ $%”代表什么?我已经知道.2f是什么意思。 问题答案: 该字在这里是指没有什么特别的。它只是显示在字符串中的文字。该角色需要它的通常含义在这里-用一个值来代替(这里,有2位小数)。 请注意,字符可能在字符之后具有含义。有关详细信息,请参见javadocs 的“参数索引”
问题内容: 今天在bash shell脚本中,我注意到脚本末尾的以下命令。我知道是什么,但是我不知道破折号的重要性。 这是什么意思?Google天真地将其截断,因此我找不到答案。 问题答案: 如果将单破折号指定为参数,它将替换为的值。 在被设定的命令,这是以前的工作目录。