0

这是一个有点复杂的问题,我可以提供的信息很少,所以请耐心等待或忽略。

我正在开发一个小型 Swing/JOGL 程序,并试图在我的程序中包含一个 java 运行时,以便我可以为我的用户简化 JVM 设置。我的程序正在运行一个批处理文件,该批处理文件调用我打包的 java.exe,而后者又执行我的 jar 文件。

该程序可以正常运行几个小时,然后退出并出现“Microsoft Visual C++ 运行时库”错误:

   Runtime Error!
   Program: \<path>\java.exe

   abnormal program termination

我的问题是:

  1. 在我的程序中包含一个 JRE 作为文件夹是否是解决我的问题的“正确”解决方案,即确保运行我的程序的稳定且一致的 JVM?简单地强制我的用户先安装 Java 会更好吗?

  2. 通过简单地为我的平台包含 jre 构建的 bin 文件夹,我是否面临任何类型的配置问题?除了在执行 java.exe 时使用命令行选项之外,还有其他方法可以存储配置信息吗?

  3. 由于 C++ 错误消息和异常进程终止错误发生的条件,我猜这与我的 JOGL 库有关,但是,该程序在 APT 之前完全正常工作,并且使用完全相同使用在线安装程序的 Java 版本,该程序运行良好,没有错误。

  4. 这可能是更基本的东西吗?是否有可能我只是没有正确收集垃圾或没有正确设置 GC 配置,因为我只是使用 JRE 安装的 bin 文件夹?

4

1 回答 1

4

鉴于它需要一夜之间,最有可能的罪魁祸首是内存泄漏或视频驱动程序出现问题。

检查视频驱动程序和 DirectX 是否是最新的。微软自动更新还不够!您需要查看供应商的站点以获取视频驱动程序和Microsoft 的站点以获取 DirectX。

如果这不能解决它,则可能是内存泄漏。

启动您的应用程序。
启动 VisualVm。它在 jdb/bin 目录下的名称jvisualvm.exe
注意:这些必须以同一用户身份运行

您的应用程序应出现在Local应用程序下的分支下。
右键单击并选择Enable Heap Dump on OOME
右键单击并选择Open
现在检查监视器选项卡。

一旦你的应用程序运行起来,堆和线程应该稳定下来,并且随着任务的处理和 GC 的执行而呈现为一条带有周期性锯齿的直线。

但是,如果这两条线中的任何一条呈上升趋势,那么您就有问题了。

还有一些用于获取堆和线程转储的控件,可以进行更详细的检查。

于 2010-03-31T17:03:53.483 回答