解决Error occurred during initialization of VM Java虚拟机初始化失败问题
遇到这个问题,其实很多人就害怕了,根本找不到问题的原因…
JVM那可是一个遥不可攀的东西,我写Java的,JVM报错了我咋整?
首先,先排查一下你的环境是否按照规矩配置好了
1.如果在Eclipse上运行出现了这个错误
估计是你的环境没有配置好,eclipse主要是通过JRE的运行环境来执行你的代码
右击项目名,找到properties属性:
- 1、点击Java Build Path,找到Libraries;
- 2、点击Libraries进入;
- 3、双击JRE System Library如下图所示。






然后Finish即可
2.IDEA中出现这个情况
File > Project Structure


一般情况下,SDKs都会随着变化,如果没变,你就手动点一下

Modules也一样

然后OK即可
自己编译的JDK进行debug时出现这样的情况
需要知道,一般在java.lang包下的东西都与虚拟机挂钩,在修改了java.lang包下的一些代码后,需要重新编译,并且需要确保jvm在运行时不会调用这些方法,或者你在执行某个代码的方法不会被其他的类相互之间调用,如果出现相互之间调用的情况…就极有可能导致Java虚拟机无法初始化
比如,在ArrayList的构造方法中就不能随便添加System.out.println()打印语句

一般…写写注释得了,别像我一样乱改…
这些rt.jar包下的代码,谁也不知道会不会出现什么特殊的情况
就比如我在java.util.ArrayList.java中的add方法添加了这么一行打印语句

在Test的main方法中创建了一个ArrayList对象

理论上,我没有调用add方法,应该不会执行add方法吧…
实际上,我运行之后发现…

原来在调用list.add()之前,ArrayList其实已经运行过N次了,只是咱不知道而已…
这是我之前修改了HashMap.java源码中的一些代码,结果就导致虚拟机起不来了,还好后面复原了

原谅我的无知…
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
浅谈java.util.concurrent包中的线程池和消息队列
这篇文章主要介绍了浅谈java.util.concurrent包中的线程池和消息队列,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-08-08
SpringBoot通过接口下载resources下的文件方式
SpringBoot通过接口下载resources目录文件,解决jar包部署后资源路径不可直接访问的问题,利用Resource类加载文件,通过HttpServletResponse返回流,实现用户下载功能2025-09-09
Java 详解Collection集合之ArrayList和HashSet
本章具体介绍了ArrayList和HashSet两种集合的基本使用方法和区别,图解穿插代码实现。 JAVA成仙路从基础开始讲,后续会讲到JAVA高级,中间会穿插面试题和项目实战,希望能给大家带来帮助2022-03-03


最新评论