0
点赞
收藏
分享

微信扫一扫

A fatal error has been detected by the Java Runtime Environment, C [VCRUNTIME140.dll+0x1989]

洛茄 2022-04-18 阅读 42
java

前言:

在服务器Linux(内存32G)下执行加密算法,入参是1G时发现了内存崩溃问题,直接杀死了Java进程,所以需要在Windows调试代码看是否能重现此问题。Windows的内存小,入参是300M就出现了,后来排查到原因是因为执行程序需要的内存超过了运行机器的内存。

Linux执行时内存的效果:

Windows执行:

在运行Java代码时,出现A fatal error has been detected by the Java Runtime Environment, C [VCRUNTIME140.dll+0x1989]

根据执行的日志,报错具体信息在hs_err_pid18804.log

查看hs_err_pid18804.log,找到引起VCRUNTIME140.dll的相关类和相关调用文件

执行机器资源:

压测客户端操作系统

Windows 10 家庭中文版

64 位操作系统, 基于 x64 的处理器

压测客户端IP地址

10.1.7.63(个人机器)

CPU

11th Gen Intel(R) Core(TM) i7-1165G7 @ 2.80GHz   2.80 GHz

cpu cores : 4   8个线程

内存

16.0 GB (15.7 GB 可用)

已知:执行电脑内存16G,已使用了50%,只剩下8G可用。

 本次加密算法执行入参:300M,8个线程同时多线程执行。

原因分析:入参的参数是:300M,出参300M,加密过程需要300+150M内存,1.05*8=8.4G,超出了内存,导致内存崩溃。

所以出现了上面问题。

解决办法:有4种方式

1、执行机器执行该程序时,其他程序都关闭

2、执行机器加大内存

3、测试时不输入太大的入参。

4、修改代码,能够判断内存大小大于入参的4倍,才会执行加密算法。

最好的方式应该是4。目前临时做法是:2

举报

相关推荐

0 条评论