Java Swing应用程序冻结了

1 c java swing out-of-memory

虽然我使用Xm标志设置了初始和最大内存,但有时会冻结,我们有一个Java应用程序,它有点大,需要太多内存,我们得到OutOfMemoryError1-2分钟后(如果我们很幸运).

如果发生这种情况,我们需要重启应用程序.

我们通过一个只运行命令行的本机c应用程序运行该程序.

问题

  1. 如果我没有设置Xmx旗帜怎么办?
  2. 这是否意味着无限的内存使用?
  3. 如何在C或Java中冻结应用程序?

And*_*son 7

如果我没有设置Xmx标志怎么办?

然后,JVM默认为应用程序的(通常适度)内存大小.

这是否意味着无限的内存使用?

没有.

如何在C或Java中冻结应用程序?

修复内存泄漏1.

请注意,我回答的问题使用'release'而不是'realize'.仔细考虑之后,我觉得答案应该保持完全相同."释放(记忆)"或"实现(存在问题)"并不能真正解决问题.最好的方法是解决实际问题(内存泄漏).


作为旁白.我不认为问题出在C代码中,但是一个简单的测试(从命令行启动应用程序)应该显示出任何一种方式.我认为问题是Java代码的原因OutOfMemoryError是(可能是)功能齐全的JVM检测到它.

如果是C app.曾经使用过JVM为自己或应用程序保留的内存空间.我猜这个错误会有很大的不同,可能是这样的:JVM internal error..

1.修复内存泄漏

其他贡献者提供了一系列好的建议,我将在这里重温一下.

  • @ChristianKullmann强调了内存分析的重要性.
  • @KlasLindbäck随后在评论中提供了一些优秀的资源.
    • Java堆转储.
      "找到内存泄漏的一种方法是分析堆转储.有几种方法可以获得堆转储(不包括第三方工具)."
    • 分析Java虚拟机堆内存转储的提示和技巧.
      "内存转储是JVM在任何给定时间分析内存内容的一个非常有用的功能,但它们的使用需要一些经验,在这篇文章中,我将与大家分享一些我从中学到的技巧和窍门.多年来,所以希望它们对你也有用."
  • @mKorbel找出了一些典型的问题来寻找:
    *"如果有的话,搜索代码close():
    • JDBC,
    • FileIO专注,
    • 插座,
    • 等等,最后阻止,那么你会喜欢重新开发太多"*