当前位置: 首页 > 知识库问答 >
问题:

为什么我的Java程序在重载情况下关闭时没有任何错误消息?

谷永贞
2023-03-14

当我加载一个相当大的文件时,我的Java程序崩溃(在Eclipse中)。

我已经运行了VisualVM,在崩溃之前,我的CPU似乎以20%的使用率达到峰值,堆大小似乎也不太高。崩溃时运行的线程数约为20。

我确实收到错误消息——但不是每次崩溃发生时都收到。我收到的两条错误消息是:

[错误太多,中止]

#Java运行时环境检测到一个致命错误:

#

#在pc=0x00007f096d096942、pid=12102、tid=139678234564352时的SIGSEGV(0xb)

#

#JRE版本:6.0_24-b24

#JavaVM:OpenJDK 64位服务器VM(20.0-b12混合模式linux-amd64压缩oops)

#衍生工具:IcedTea6 1.11.5

#分发:Ubuntu 12.04 LTS,包6b24-1.11.5-0ubuntu1~12.04.1

#问题框架:

#J java.util.HashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

我发现了一个与第二个警告相关的线程,但它似乎暗示了一个硬件问题。我相信我的错误是在软件中,因为它似乎只发生在较大输入文件的特定实例中。

感谢您的帮助。

共有2个答案

马丰
2023-03-14

似乎这是一个OutOfMemoryException,尽管我承认Eclipse通常会报告这些异常。

但是请注意,启动的应用程序的堆大小不同于IDE本身的堆大小,默认值相当小(不记得了,但也不大)。

查看默认启动配置文件的VM设置,或者更改应用特定启动的VM,以添加大量带有-Xmx1G或其他内容的堆

夹谷宜民
2023-03-14

如果JVM被授予使用X数量内存的权限,但系统没有更多内存,JVM将崩溃。例如,您说过它可以使用512MB(-Xmx512m),而您的程序堆只使用128MB。应该允许它再分配384MB。然而,当机器分配更多内存时,操作系统会拒绝,JVM会在这种情况下崩溃。从CPU使用率和堆大小来看,这是正常的,但问题是机器没有更多的内存。因此,当这种情况发生时,检查您的总内存和可用内存,看看您是否正在耗尽内存。

有趣的是,如果降低JVM上的上层内存(-Xmx),它可能会阻止JVM崩溃,因为它会在分配更多内存之前将Java强制到GC。但是,如果将它降低得太远,它将运行得很慢,或者只是抛出一个OOM异常。这就是为什么选择一个大小不太大或太小的应用程序来有效运行是很重要的。您还可以提前分配更多内存,或者更改程序,使其更有效地使用内存。你可能想关闭那些占用你的内存的进程,而这些内存不是你应用程序的核心,或者只是购买更多内存。

 类似资料:
  • 问题内容: 我正在尝试编写一个执行脚本;但是,如果没有要提交的内容,则git会退出,状态为。部署脚本将其视为不成功,然后退出。我确实想检测 实际 要提交的故障,因此我不能仅仅给Fabric全面忽略故障。如何允许忽略空提交故障,以便部署可以继续进行,但仍然可以捕获实际提交失败时导致的错误? 问题答案: 通过检查git diff?的退出代码来预先捕获此条件。 例如(在shell中): 编辑:根据霍尔格

  • 当使用tensorflow时,我不想安装Cuda。现在,在用pip安装了当前版本(2.4.1)并运行任何代码后,我得到了一堆错误消息 它们由以下三行代码生成 我知道一个类似问题的答案在不能加载动态库'cudart64_101.dll'在tensorflow仅CPU安装 但是解决方案建议通过设置环境变量来提高调试级别。不过,我确实希望收到有关我的编程不一致的警告。 真的没有办法单独禁用这些消息并使张

  • 应用程序崩溃,我会得到以下错误: 致命异常:主进程:com.example.ayyan.JellyBeanEstimator,pid:2960 java.lang.RuntimeException:无法启动活动 ComponentInfo{com.example.ayyan.JellyBeanEstimator/com.example.ayyan.JellyBeanEstimator.MainAc

  • 我正在从文档中学习反应,但不确定在这个例子中超级()做什么。通常,它不需要传递给创建新实例的参数,然后调用React吗?组件的构造函数方法将这些参数合并到实例中?没有任何争论它是做什么的?

  • 我有一个java应用程序,它在JTabbedPane上加载并显示一个applet。所以基本上GUI是: 小程序-- 我已经在JFrame类中放入了这一标准行: 下面是我在 JFrame 类中的方法,它应该在窗口关闭时调用: 然后,在我的Tabbed Pane类中,我有一个管理Applets的arrayList: 我循环遍历JPanels的ArrayList,如下所示: JPanel类中的stopG

  • 你好团队, 我正在我的系统上运行一个Maven构建(mvn clean install),Maven构建在下面的代码行之后被终止,没有任何错误。 我使用的是最新的maven版本3.6.3(硬件配置-英特尔i5第4代处理器和16 GB RAM)。 下面是我用来执行项目maven构建的命令。 在IntelliJ中: D:\Software\jdk-11.0.10 9\bin\java。exe-Dmav