IntelliJ IDEA启动项目提示java.lang.OutOfMemoryError : GC overhead limit exceeded解决方案

IntelliJ IDEA 启动一个之前运行正常的项目失败,报错是:

java.lang.OutOfMemoryError : GC overhead limit exceeded

百度了一下,说是 IntelliJ IDEA 设置的内存太小,需要设置大一点。修改完成后,果然可以运行了,这里记录一下。

IntelliJ IDEA 中修改如下配置:

1、 File -> Settings -> Build,Execution,Deployment -> Complier

   设置【Build process heap size(Mbytes)】 为 2000

2、File -> Settings -> Build,Execution,Deployment ->Build Tools -> Maven -> Importing

   设置【VM options for importer】为 -Xmx1024m

进入 IntelliJ IDEA 的安装目录,找到文件 【idea64.exe.vmoptions】(如果是32位机器,修改【idea.exe.vmoptions】文件),修改配置为:

-Xms1024m
-Xmx2048m
-XX:ReservedCodeCacheSize=1024m

### Java 用户态与内核态的区别和联系 #### 区别 在Java环境中,用户态和内核态主要体现在程序执行的不同层次上。当Java应用程序运行时,默认情况下是在用户空间中操作,即处于用户态;而一旦涉及到需要操作系统权限的操作,则会进入内核态。 - **访问范围** - 在用户态下,进程能够触及的地址区域有限制,并且无法直接操控硬件设备或修改某些敏感数据结构。这是因为存在保护机制防止恶意软件破坏系统稳定性[^3]。 - **特权级别** - 当切换到内核态之后,当前正在处理的任务获得了更高的控制权,可以不受约束地读写整个物理内存以及调用底层API函数完成特定功能(如I/O请求)。此时占用的CPU时间片也不会轻易被其他更高优先级的任务打断[^4]。 #### 联系 尽管两者有着明显的界限区分,但在实际应用过程中却紧密相连: - **通过系统调用来沟通** - 对于Java而言,在遇到诸如文件IO、网络通信等场景时,便会触发从用户模式向核心层转变的过程——这被称为“系统调用”。例如`new FileInputStream()`这样的方法内部就会发起一次跨越边界的动作[^1]。 - **共享同一套逻辑流程** - 即使表面上看去像是两个独立的世界,但实际上二者遵循着相同的编程模型并共同作用于同一个进程中。每当发生异常事件或者定时器到期等情况时,都可能导致类似的转换行为出现[^2]。 ```java try (FileInputStream fis = new FileInputStream("example.txt")) { int content; while ((content = fis.read()) != -1) { System.out.print((char) content); } } catch (IOException e) { e.printStackTrace(); } ``` 上述代码展示了如何利用标准库类实现简单的磁盘读取过程,期间不可避免地经历了由用户域至管理端再返回来的循环路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值