【Gradle】Gradle之JVM进程详解

news2024/12/23 13:42:37

个人主页:金鳞踏雨

个人简介:大家好,我是金鳞,一个初出茅庐的Java小白

目前状况:22届普通本科毕业生,几经波折了,现在任职于一家国内大型知名日化公司,从事Java开发工作

我的博客:这里是CSDN,是我学习技术,总结知识的地方。希望和各位大佬交流,共同进步 ~

Gradle 是个程序、Groovy 是特定领域 DSL 语言

  • Gradle 是运行在 JVM 实例上的一个程序,内部使用 Groovy 语言。
  • Groovy 是一种 JVM 上的脚本语言,基于 java 扩展的动态语言。

Gradle 会把 .gradle 的 Groovy 脚本编译成 .class java字节码文件在 JVM 上运行,最终还是 java 来运行。

Grade的目录结构

打开 Gradle 文件目录,核心的 bin 文件就一个 gradle 脚本,这个脚本就是 Gradle 核心执行逻辑了,他 会启动一个 JVM 实例去加载 lib 中的各种函数去构建项目:

Gradle 使用到的JVM进程

 Gradle 构建工具在不同场景下会分别使用3个 JVM 进程:

  1. client
  2. Daemon
  3. wrapper

一、client 进程

client 进程是个轻量级进程,每次构建开始都会创建这个进程,构建结束会销毁这个进程。

client 进程的任务:查找并和 Daemon 进程通信

(1)Daemon 进程没启动,client 进程会启动一个新的 Daemon 进程

(2)Daemon 进程已经存在了,client 进程就给 Daemon 进程传递本次构建相关的参数任务,然后,接收 Daemon 进程发送过来的日志

gradle.properties 里面设置的参数、全局 init.gradle 初始化脚本的任务,这些都需要 client 进程 传递给 Daemon 进程

二、Daemon 进程

Daemon 进程负责具体的构建任务

我们使用 Android Studio 打包 APK 这依靠的不是 Android Studio 这个 IDEA 开发工具,而是 Gradle 构建工具自己启动的专门的一个负责构建任务的进程:Daemon

Daemon 进程 是一个守护进程,构建结束 Daemon 进程也不会销毁,而是会休眠, 等待下一次构建,这样做是为了节省系统资源,加快构建速度,Daemon 进程会缓存插件、依赖等资源。

注意:每一个 Gradle 版本都会对应一个 Daemon 进程,机器内若是运行过多个版本的 Gradle,那么机器内就会存在多个 Daemon 进程

Daemon 进程在以下情况时会失效,需要启动新的 Daemon 进程,判断 Daemon 进程是否符合要求是上面说 的 client 进程的任务:

  • 修改 JVM 配置会造成启动新的构建进程
  • Gradle 将杀死任何闲置了3小时或更长时间的守护程序
  • 一些环境变量的变化,如语言、keystore、keyStorePassword、keyStoreType 这些变化都会造成旧有的守护进程失效

即便是同一个版本的 Gradle,也会因为 VM 配置不同而存在多个相同 Gradle 版本的 Daemon 进程。比如同时启动好几个项目,项目之间使用的 Gradle 版本相同,但是 VM 使用的不同配置。

三、wrapper 进程

wrapper 进程啥也不干,不参与项目构建,唯一任务就是负责下载管理 Gradle 版本

我们导入 Gradle 项目进来,client 进程发现所需版本的 Gradle 本机没有,那么就会启动 wrapper 进程,根据 gradle.properties 里面的参数自行去 gradle-wrapper.jar 里面的下载程序去下载 Gradle 文件,完事wrapper 进程会关闭

文章到这里就结束了,如果有什么疑问的地方,可以在评论区指出~

希望能和大佬们一起努力,诸君顶峰相见

再次感谢各位小伙伴儿们的支持!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/761378.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机密计算组织】机密计算联盟

一、简介 1.1 机密计算联盟与成员 2019年8月22日,Linux基金会宣布多家巨头企业组建“机密计算联盟”(Confidential Computing Consortium),该基金将负责对联盟活动进行监督。机密计算联盟专门针对云服务及硬件生态,致…

SpringBoot中注入ServletFilterListener

1.基本介绍 文档:SpringBoot中注入Servlet&Filter&Listener 考虑到实际开发业务非常复杂和兼容问题,SpringBoot支持将Servlet、Filter、Listener注入spring容器中,成为Spring Bean也就是说,SpringBoot开放了和原生WEB组件…

关于初识MySQL数据库以及MySQL的基本使用

文章目录 什么是数据库什么是MySQL为什么要有数据库 MySQL基本使用连接mysql查看当前服务器对应的数据库创建数据库进入某个数据库建立一张表向表中插入数据查询表中的数据 服务器,数据库,表之间的关系数据逻辑存储MySQL架构SQL语句分类存储引擎 什么是数…

vue-cesium的基本使用【一】

最近的项目中用到了cesium,也了解了一点关于cesium的知识,打点、 标绘、等等基础的功能点,但是在开发过程中使用原生的cesium编写对于初学者还是有点难度,为此,找到关于对cesium进行二次封装的开源项目vue-cesium,本次文章主要记录…

Git原理与基本操作(含安装教程)

Git Git初识Git安装Linux-centosLinux-ubuntu Git基本操作git int配置Git 认识⼯作区、暂存区、版本库添加⽂件--场景⼀git add、git commitgit log 查看.git⽂件git cat-file 添加⽂件--场景⼆修改⽂件git statusgit diff [file]、git diff HEAD -- [file] 版本回退git resetg…

聊一下2023前端状况

2023已过大半,也是疫情后开放的第一年,想必大家都能感受到 各行各业一定程度上都在萎缩,线下一些工厂招聘,喊着90年以前的,可以回家了的 今年出现频率最高的一词就是裁员,失业,大学生慢就业 互联…

【从零开始学习Linux】背景知识与获取环境

哈喽,哈喽,大家好~ 我是你们的老朋友:保护小周ღ 本期给大家带来的是 Linux 操作系统的简介,以及如何获取一个Linux 的环境,作为Linux 章节起始篇,如果不妥之处,欢迎批评指正~ 本期收录于博主…

谷粒商城第二篇服务功能-商品服务-三级分类

商品服务三级分类工程初始化及查询搭建 在数据库中插入数据 1.controller类 RestController RequestMapping("product/category") public class CategoryController {Autowiredprivate CategoryService categoryService;/*** 查出所有分类以及子分类,…

前端Vue自定义可自由滚动新闻栏tabs选项卡标签栏标题栏组件

随着技术的发展,开发的复杂度也越来越高,传统开发方式将一个系统做成了整块应用,经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改,造成牵一发而动全身。 通过组件化开发,可以有效实现…

vue3.0之组合API有哪些(详解)

vue3.0之组合API有哪些 一、setup函数二、生命周期三、reactive函数四、toRef函数五、toRefs函数六、ref函数七、知识运用案例八、computed函数九、watch函数十、ref属性十一、父子通讯1.父传子2.子传父 十二、依赖注入十三、补充 v-model语法糖(简写)十四、补充 mixins语法 一…

【档案专题】三、电子档案管理系统

导读:主要针对电子档案管理系统相关内容介绍。对从事电子档案管理信息化的职业而言,不断夯实电子档案管理相关理论基础是十分重要。只有通过不断梳理相关知识体系和在实际工作当中应用实践,才能走出一条专业化加职业化的道路,从而…

el-cascader级联选择器那些事

el-cascader级联选择器那些事 1、获取选中的节点及其所有上级 vue3element-plusts 1、获取选中的节点及其所有上级 使用cascader组件提供的getCheckedNodes() <el-cascader :options"options" :show-all-levels"false" change"changeCascader&q…

cocosCreator笔记 之Spine了解

版本&#xff1a; 3.4.0 参考&#xff1a; Spine 骨骼动画资源 Spine Skeleton组件 cocosLua 之 骨骼动画 简介 使用spine动画&#xff0c;cocosCreator目前支持的版本&#xff1a; creator版本spine版本V3.0 及以上v3.8&#xff08;原生平台不支持特定版本 v3.8.75&…

北京银行发放门头沟区首笔知识产权质押贷款

6月&#xff0c;位于北京中关村门头沟科技园、专注于研制工业母机的民营企业——北京精雕科技集团有限公司&#xff08;以下简称“精雕科技集团”&#xff09;&#xff0c;因生产经营急需资金&#xff0c;但是由于缺乏抵押物而陷入了融资困境。“精雕科技集团与北京银行合作已长…

java习题3

292. Nim 游戏 难度简单 你和你的朋友&#xff0c;两个人一起玩 Nim 游戏&#xff1a; 桌子上有一堆石头。你们轮流进行自己的回合&#xff0c; 你作为先手 。每一回合&#xff0c;轮到的人拿掉 1 - 3 块石头。拿掉最后一块石头的人就是获胜者。 假设你们每一步都是最优解。…

Slf4j日志集成

Slf4j日志集成 下面就是集成步骤&#xff0c;按着做就可以了 1、logback-spring.xml 哪个服务需要记录日志就将在哪个服务的resource下新建logback-spring.xml文件&#xff0c;里面的内容如下&#xff1a; <!-- 级别从高到低 OFF 、 FATAL 、 ERROR 、 WARN 、 INFO 、 …

微软宣布Win10准备热烈的迎接Docker

在DockerCon 2017大会上&#xff0c;Docker团队今天宣布了LinuxKit&#xff0c;这是一个安全、干净和便携式的Linux子系统container容器环境。LinuxKit允许工具构建自定义的Linux子系统&#xff0c;可以仅包含完全运行时平台的组件需要。所有的系统服务都是可替换的容器&#x…

Leetcode-每日一题【25.k个一组翻转链表】

题目 给你链表的头节点 head &#xff0c;每 k 个节点一组进行翻转&#xff0c;请你返回修改后的链表。 k 是一个正整数&#xff0c;它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍&#xff0c;那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内…

xml2json xml转换成json PHP phpstorm

phpstorm 的插件 xml2json快速实现 xml转换成json 1&#xff0c;先安装好Phpstorm 2 二、好用的插件 进入设置页面&#xff0c;快捷键CtrlAlts&#xff0c;或者Files->settings 作者是meizu &#xff0c;应该是魅族公司&#xff0c;贡献的插件

【C语言进阶技巧】探秘字符与字符串函数的奇妙世界

【C语言进阶技巧】探秘字符与字符串函数的奇妙世界 1. strlen函数1.1 strlen函数的使用介绍1.2 strlen函数的模拟实现1.2.1 计数法&#xff08;使用临时变量&#xff09;1.2.1 递归法&#xff08;不使用临时变量&#xff09;1.2.3 指针减指针的方法 2. strcpy函数2.1 strcpy函数…