Java Swing 应用程序卡住

标签 java c swing out-of-memory

我们有一个 Java 应用程序,它有点大并且需要太多内存,虽然我使用 Xm 标志设置了初始和最大内存,但有时它会卡住,我们会得到一个 OutOfMemoryError 1-2 分钟后(如果幸运的话)。

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

我们通过仅运行命令行的 native c 应用程序运行该程序。

问题

  1. 如果我不设置 Xmx 标志会怎样?
  2. 这是否意味着无限的内存使用量?
  3. 我如何知道应用程序是用 C 还是 Java 卡住的?

最佳答案

What if I don't set the Xmx flag?

然后 JVM 默认为应用程序提供一个(通常适中的)内存大小。

Does it mean unlimited memory usage?

没有。

How can I realize if the application is frozen in either C or Java?

修复内存泄漏1

请注意,我回答的问题使用的是“发布”而不是“实现”。经过深思熟虑,我觉得答案应该是一样的。 “释放(内存)”或“意识到(存在问题)”都不会真正解决问题。最好是解决实际问题(内存泄漏)


顺便说一句。我不认为问题出在 C 代码中,但一个简单的测试(从命令行启动应用程序)应该可以揭示任何一种方式。 原因 我认为问题是 Java 代码是 OutOfMemoryError 被(大概)功能齐全的 JVM 检测到。

如果 C 应用程序。已使用内存空间 JVM 为自身或应用保留的内存空间。我想错误会非常不同,可能是这样的:JVM internal error..

1。修复内存泄漏

其他贡献者提供了一系列好的建议,我将在这里重新讨论。

  • @ChristianKullmann 通过强调 the importance of memory profiling 开始了它.
  • @KlasLindbäck 在评论中链接了一些优秀的资源。
    • Java Heap Dump .
      “查找内存泄漏的一种方法是分析堆转储。有几种方法可以获取堆转储(不包括第 3 方工具)。”
    • Tips and tricks for analyzing Java virtual machine heap memory dumps .
      “内存转储是 JVM 的一项非常有用的功能,可以在任何给定时间分析内存的内容,但使用它们需要一些经验,在这篇文章中,我将与您分享一些技巧和我多年来学到的技巧,希望它们对你也有用。”
  • @mKorbel 用一些典型的问题来解决它:
    *“如果有 close(),请在代码中搜索:
    • JDBC,
    • 文件输入输出,
    • 套接字,
    • 等 在 finally block 中,那么你会非常喜欢 re_engeneering"*

关于Java Swing 应用程序卡住,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23382619/

相关文章:

java - CXF BusException 命名空间 http ://cxf. 没有 DestinationFactory apache.org/transports/http

java - JDialog中的垂直滚动 Pane 问题

java - 使用 repaint() 的动画

java - 找出 jTextPane 中的某个位置是否有特定的字符 [java]

java - JLabel 图像不会显示在 JFrame 上

java - 强制 HDFS globStatus 跳过它没有权限的目录

java - 如何使用 viewPager 和 Fragments 传递多个数据

c - C中的 float 和 double

c - 带两个可用的加权间隔调度 "workers"

c - 使用空参数列表在 ANSI-C 中检查函数参数类型