问题、探究过程和解决方法:

在接手一个新的项目构建的过程中,遇到了构建项目过程中,项目一直处于parsing java的过程

打开构建日志的位置

日志位置:

查询构建日志(build-log)发现 项目触发了很多的低内存信号,然后可以猜测afterGc 是触发了回收机制。

解决方法:

1.修改idea64.exe.vmoptions 中的-Xms 和-Xmx 的值,但修改后还是出现同样的错误,无效

2.重装idea无效

3.重新刷新缓存,方法File-> Invalidate Caches / Restart... ,清除缓存并且重启,重启后idea会重新给这个项目建立索引,无效

4.根据同事的帮助,修改File -> settings -> Build,Execution,Deployment->Compiler->Build process heap size ,改大一些后再次编译,成功

反思:

这里的配置选项说的很清楚了,是构建过程堆内存,那么一般来说 我们只知道(起码我是这样的),堆内存是运行时期用来存放对象的地方,具体的内存可以回忆一下:

那么编译时期,为什么要使用堆内存呢? 

这个问题其实很明显,编译的过程会解析语法树、检查死锁、分析逃逸之类的一系列的工作,使用一部分内存是很明显需要的。

为什么设置的编译过程堆内存不自动扩展呢?

首先明确的是 内存的申请和释放都是操作系统的内核态系统调用,频繁的申请和释放会降低性能。

如果可以自动扩展,那么为了保护执行时期需要使用的大量内存,就必然会被释放,这就导致前面说的降低性能。

那么更好的方法是什么呢?

复用!这也是运行时期GC的目的,实际上我们也证明了构建过程会GC复用内存,从上面我们的构建日志中发现的GC过程可以知道。

总结:

我认为这里的堆内存会在编译期间使用,然后结束编译期,即转为class文件后,释放这些内存。从进程的角度看,编译时期,是一个javac程序来执行编译,而完成后由java程序来执行运行。

我们来实验一下。

实验开始前:

开始编译后:

这里JAVA程序,内存是慢慢增加上来的,一开始只有100m左右,CPU满载的原因找到了,javac的内存不够大,导致一直GC回收,猜测需要所有java文件都读到内存后才开始写入class文件。

编译结束后:

运行开始后:这个不演示图片了,这个必然不可能没有一个JAVA Platform SE 程序在跑,没有我直播倒立洗头,截图为证

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

待解决的问题:

那么为什么是堆内存呢?

这个我也不知道,衍生的问题还有 既然堆内存在编译时期就已经存在,那么会不会编译时期已经存在所有的运行时期内存分布呢?

运行时期内存分布相信大家都很熟悉了 ,如下图所示:

堆和方法区是所有线程共享的,而绿色的三个区域是线程私有的。

项目构建CPU满载问题的根源的查找相关推荐

  1. python 项目构建工具_GitHub - shjlone/emake: 你见过的最简单的 GCC/CLANG 项目构建工具(python3版本)...

    python3实现版本 Preface GNU Make 太麻烦?Makefile 写起来太臃肿?头文件依赖生成搞不定?多核同时编译太麻烦?Emake 帮你解决这些问题: 使用简单:设定源文件,设定编 ...

  2. 用 Maven 做项目构建

    简介 本文将介绍基于 Apache Maven 3 的项目构建的基本概念和方法.Maven 是一套标准的项目构建和管理工具,使用统一规范的脚本进行项目构建,简单易用,摒弃了 Ant 中繁琐的构建元素, ...

  3. 利用Yocto构建嵌入式Linux教程01--第一个Yocto项目构建

    大家好,从今日开始,计划写一个利用Yocto构建嵌入式Linux的教程,算是对个人工作和学习的一个总结. 本教程选用的Yocto版本为3.0.4,我使用的Linux发行版为Ubuntu 18.04 ( ...

  4. Linux ECS CPU满载100% TOP进程无法查看解决记录

    一.阿里一台ECS测试服务器提示检查到挖矿程序运行. 文件名为/usr/lib/libiacpkmn.so.3 影响:CUP进程100%持续满载 二.处理方法 1.通过阿里云盾杀掉及隔离进程文件 无效 ...

  5. Vue项目构建开发入门

    Vue项目构建开发入门 开篇:Vue CLI 3 项目构建基础 大家好,当你点进这个标题,开始阅读本章的时候,说明你对 Vue.js 是充满好奇心和求知欲的.我之前写过一篇文章,这样评价 Vue.js ...

  6. Gradle 2.0 用户指南翻译——第五十六章. 多项目构建

    本文禁止w3cschool转载! 翻译项目请关注Github上的地址:https://github.com/msdx/gradledoc . 本文翻译所在分支:https://github.com/m ...

  7. Gradle 1.12用户指南翻译——第五十六章. 多项目构建

    其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Github上的地址: https://g ...

  8. 使用 happypack 提升 Webpack 项目构建速度

    本文简单介绍了 Happypack 的简单使用,不了解的同学可以进来看一看.也许会有所帮助. Happypack 作用 在使用 Webpack 对项目进行构建时,会对大量文件进行解析和处理.当文件数量 ...

  9. 项目构建之maven篇:2.HelloWorld项目构建过程

    文件结构说明: 项目构建生命周期: 清理 编译 測试 打包 执行 部署 清理与编译 hello\pom.xml POM:Project Object Model,项目对象模型 pom.xml与ant的 ...

最新文章

  1. python教程下载地址-最新python实战教程网盘下载地址
  2. Android Studio2.0 教程从入门到精通Windows版
  3. 计算机安全的最后一道防线,汪文勇:灾备,数据安全的最后一道防线
  4. 大厂JVM GC面试题
  5. java log4j 热部署_JAVA类加载器分析--热部署的缺陷(有代码示例,及分析)
  6. RDS SQL Server死锁(Deadlock)系列之四利用Service Broker事件通知捕获死锁
  7. ::-webkit-scrollbar 滚动条的设置
  8. Linux服务-rsync
  9. c语言链表课件,C语言链表详解ppt课件.ppt
  10. 《Option Volatility Pricing》阅读笔记之 Volatility(波动率)
  11. 边框盒子 box-sizing 的 content-box 和 border-box属性
  12. android 动态磁贴,善用动态磁贴和Xbox游戏
  13. vue+eleme upload 上传图片(含gif动图) canvas压缩,base64转blob对象
  14. java开源物联网_JetLinks开源物联网平台源码 v1.8.0
  15. 2019游戏 f1_F1 2019
  16. 教你如何关闭Win7视频预览节约资源
  17. Springboot整合Websocket(推送消息通知)
  18. 序数是什么意思_vlookup 列序数是什么意思
  19. Cortex-M3处理器系统框图
  20. 飞机游戏中子弹与飞机的移动与边界源码

热门文章

  1. seq和ack的理解
  2. 读懂Wi-Fi 6:看这本白皮书就够了!(附全文下载)
  3. [ FI基本业务流程 ] - FI与MM间的业务集成
  4. chatgpt 镜像版
  5. Leaflet基础入门教程(一)
  6. 计算机用户名如何修改,如何修改电脑用户名
  7. 深入学习理解Java集合
  8. C语言怎么消除最后的回车键,多样例输出,如何去掉最后一个回车
  9. python中的strip()方法
  10. ubuntu 下安装flash player