use*_*561 7 java memory-leaks javafx
我一直在分析我的应用程序的x64版本,因为内存使用率非常高,所有这些似乎来自JavaFX MediaPlayer,我正确地释放了监听器和事件处理程序.
这是鲜明的对比.
开始时的x32版本

现在开始使用x64版本

x32版本保持在256mb以下,而x64将在gig上拍摄; 这是两个人都可以播放他们的播放列表.
所有代码都是一样的.
JDK:jdk1.8.0_20
JRE:jre1.8.0_20
两者都有VM参数
-XX:MinHeapFreeRatio=40 -XX:MaxHeapFreeRatio=70 -Xms3670k -Xmx256m -Dsun.java2d.noddraw=true -XX:+UseParallelGC
Run Code Online (Sandbox Code Playgroud)
在另一个x64 Java应用程序上发生同样的问题

这是一个错误还是我忽略了什么?
您看到的是运行进程的整个 JVM 的内存使用情况。-Xmx256m 设置仅限制应用程序可分配的最大可用堆空间(JVM 将强制执行此操作)。在堆空间之外,JVM 可以将额外的内存用于许多其他目的(我确信我会错过下面列表中的一些):
PermGen,现已被 Metaspace 取代。根据文档,对此没有默认限制:
-XX:MaxMetaspaceSize=size
Sets the maximum amount of native memory that can be allocated for class metadata. By default, the size is not limited. The amount of metadata for an application depends on the application itself, other running applications, and the amount of memory available on the system.
Run Code Online (Sandbox Code Playgroud)堆栈空间(使用的内存=(线程数)*堆栈大小。可以通过-Xss参数控制
堆外空间(在代码中使用 ByteBuffer,或者使用 EHCache 等第三方库,而 EHCache 又会使用堆外内存)
JNI代码
GC(垃圾收集器需要自己的内存,这又不属于堆的一部分,并且根据所使用的收集器和应用程序内存使用情况可能会有很大差异)
在您的例子中,当您从 32 位 JVM 迁移到 64 位 JVM 时,您会看到内存使用量“几乎翻倍”,而且元空间分配可能更加宽松。使用-XX:MaxMetaspaceSize=128m可能会将 64 位 JVM 的内存使用量降至 512MB 以下。
| 归档时间: |
|
| 查看次数: |
127 次 |
| 最近记录: |