这是一个很复杂的问题,我可以提供很少的信息,所以请耐心等待或忽略。
我正在开发一个小的Swing / JOGL程序,并且我正在尝试在我的程序中包含一个java运行时,以便我可以为我的用户简化JVM设置。我的程序正在运行一个批处理文件,该文件调用我的打包java.exe,然后执行我的jar文件。
程序运行好几个小时,此时它以“Microsoft Visual C ++运行时库”退出错误:
Runtime Error!
Program: \<path>\java.exe
abnormal program termination
我的问题是:
将JRE作为我程序中的文件夹包含一个“正确”的解决方案来解决我的问题,即确保从中运行程序的稳定且一致的JVM?简单地强迫我的用户先安装Java会不会更好?
通过简单地为我的平台包含jre构建的bin文件夹,我是否面临任何类型的配置问题?除了在执行java.exe时使用命令行选项,还有其他方法可以存储配置信息吗?
由于C ++错误信息和异常进程终止错误发生的条件,我猜它与我的JOGL库有关,但是,程序完全正常直到APT,当使用在线安装程序使用完全相同的Java版本时,程序完全正常,没有错误。
这可能是更基本的东西吗?是否有可能我只是没有正确收集垃圾或者没有正确设置GC配置,因为我只是使用JRE安装的bin文件夹?
答案 0 :(得分:4)
鉴于它需要一夜之间,最可能的罪魁祸首是内存泄漏或视频驱动程序的问题。
检查视频驱动程序和DirectX是否是最新的。 Microsoft自动更新是不够的!您需要查看供应商的网站以获取视频驱动程序,并{0}}查看DirectX。
如果不能解决问题,可能是内存泄漏。
开始申请。
启动VisualVm。它位于名为jvisualvm.exe
的jdb / bin目录中
注意:这些必须以同一个用户身份运行
您的申请应出现在申请表下的Local
分支下
右键单击并选择Enable Heap Dump on OOME
右键单击并选择Open
现在检查Monitor选项卡。
一旦你的应用程序正在运行,堆和线程应该稳定并在处理任务并执行GC时显示为带有周期性锯齿的大致直线。
但是,如果这些行中的任何一条向上趋势,则表示存在问题。
还有用于获取堆和线程转储的控件,可以更详细地检查它们。