产品
解决方案
文档与社区
权益中心
定价
云市场
合作伙伴
支持与服务
了解阿里云
备案
控制台
登录/注册
开发者社区
首页
探索云世界
探索云世界
云上快速入门,热门云上应用快速查找
了解更多
问产品
动手实践
考认证
TIANCHI大赛
活动广场
活动广场
丰富的线上&线下活动,深入探索云世界
任务中心
做任务,得社区积分和周边
高校计划
让每位学生受益于普惠算力
训练营
资深技术专家手把手带教
话题
畅聊无限,分享你的技术见解
开发者评测
最真实的开发者用云体验
乘风者计划
让创作激发创新
阿里云MVP
遇见技术追梦人
直播
技术交流,直击现场
下载
下载
海量开发者使用工具、手册,免费下载
镜像站
极速、全面、稳定、安全的开源镜像
技术资料
开发手册、白皮书、案例集等实战精华
插件
为开发者定制的Chrome浏览器插件
探索云世界
新手上云
云上应用构建
云上数据管理
云上探索人工智能
云计算
弹性计算
无影
存储
网络
倚天
云原生
容器
serverless
中间件
微服务
可观测
消息队列
数据库
关系型数据库
NoSQL数据库
数据仓库
数据管理工具
PolarDB开源
向量数据库
热门
Modelscope模型即服务
弹性计算
云原生
数据库
物联网
云效DevOps
龙蜥操作系统
平头哥
钉钉开放平台
大数据
大数据计算
实时数仓Hologres
实时计算Flink
E-MapReduce
DataWorks
Elasticsearch
机器学习平台PAI
智能搜索推荐
人工智能
机器学习平台PAI
视觉智能开放平台
智能语音交互
自然语言处理
多模态模型
pythonsdk
通用模型
开发与运维
云效DevOps
钉钉宜搭
支持服务
镜像站
码上公益
开发者社区
开发与运维
文章
正文
JVM学习日志(六) JVM从加载到内存全过程
2023-07-29
38
版权
版权声明:
本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《
阿里云开发者社区用户服务协议
》和 《
阿里云开发者社区知识产权保护指引
》。如果您发现本社区中有涉嫌抄袭的内容,填写
侵权投诉表单
进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:
JVM从加载到内存全过程 简述
+关注继续查看
JVM从加载到内存全过程
文字流程
java代码编写完成后,首先通过jdea/eclipse编译打包称为jar包/war包,其中封装的是.class字节码文件
接下来使用java-jar启动jvm虚拟机,开启jvm进程
jvm虚拟机接下来使用类加载器来对字节码文件进行加载
通过双亲委派机制
优先通过系统类加载器,加载jdk/lib包下面的类
然后通过extClassLoader进行加载 /ext包下面的类
最后通过应用程序类加载器,appClassLoader进行加载
同时类加载器加载类的时候,还涉及到一个破坏型双亲委派机制,通过上下文类加载器来破坏双亲委派机制,叫做上下文类加载器(ContextClassLoader),这种加载机制可以直接强制调用应用程序层加载器,java中涉及到SPI加载的框架基本都使用到了ThreadContextClassLoader
jvm通过类加载器将class文件加载到jvm内存中,需要经历如下几个步骤
加载,验证,准备,解析,初始化等步骤
加载步骤:主要是通过类加载器打通jvm内存区域与.class文件的通道
验证:验证有很多验证方面,主要作用是验证.class文件格式是否符合规范,最简单的有一个魔数验证,及所有的.class文件的二进制文件开头都是CA FE BA BE这八个魔数
准备:在这一步主要是将.class文件加载到方法区的元空间中,并创建一个.class对象模板,在加载完成之后,在堆内存中创建.class字节码对象,并且给该对象的属性开辟空间以及赋初始值,如果涉及到基本数据类型的常量的话,在这个阶段也会给常量赋值
解析:在这一步将对象这种的符号引用转换为直接引用
初始化:在这一步需要将字节码对象中的对象属性直接赋值
当.class文件加载到内存中后,通过字节码执行引擎来执行相关的代码,字节码执行引擎会将jvm指令翻译成机器码,这里面涉及到解释器和即时编译器两大组件,解释器分为字节码解释器和模板解释器两种
字节码解释器是逐行进行编译解释,模板解释器是先将整个模板进行编译,然后再执行,前者编译很快,但是整体执行效率比较低,后者编译时间很慢,但是,编译后执行速度很快
即时编译器一般是和模板解释器配合使用,对热点代码进行跟踪标记,然后将热点代码编译成为模板代码,然后交由模板解释器进行解释执行
执行时可能会划分多个线程,每个线程都会有一个程序计数器用来标记和记录当前线程执行的指令位置,方便下次继续执行
每个线程都会有一个对应的虚拟机栈,用来存储当前系统执行的整体流程,每个方法都会以栈帧的形式来存放入虚拟机栈中,而方法中的局部变量都会存放再栈帧中,此时还有一个共享的栈空间叫做本地方法栈,本地方法栈中存储了一些native修饰的C++本地方法,用来直接跟操作系统进行交互
虚拟机栈的栈帧中的局部变量只是一个地址值,这个地址值指向的是堆内存中的一个对象地址
堆空间中分为这几块区域:新生代,老年代,新生代中又包含eden,suvivor0,suvivor1,垃圾处理器GC,youngGC,FullGC
youngGC的触发时机是当新生代的eden区内存满了,放不下新对象的时候,这时候会将没有引用指向的对象清除,然后,将幸存下来的对象存放入suvivor区,并且进行年龄标记,当新生带位置放不下的情况下,会直接将该对象放入到老年代,老年代放不下的时候会直接触发fullGC,FullGC其实也叫Stop All The World,会将整个程序停止,然后进行清除
再1.8之前方法区中的字符串常量池是存放再老年代中,只有fullGC才会触发清除机制,1.8之后,将字符串常量池存放再新生代eden区中,通过minorGC和youngGC来进行清除
流程图
文章标签:
日志服务
Java
C++
Android开发
存储
编译器
关键词:
JVM日志
内存jvm
JVM内存
内存日志
JVM学习
相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
DearSil
目录
相关文章
程序员朱永胜
|
5天前
|
监控
Java
JVM-如何查询垃圾回收日志
JVM-如何查询垃圾回收日志
程序员朱永胜
18
0
0
程序员朱永胜
|
2月前
|
存储
Java
【面试题精讲】JVM*类的生命周期*加载阶段
【面试题精讲】JVM*类的生命周期*加载阶段
程序员朱永胜
16
1
1
游客io6musbi47krs
|
4月前
|
Java
关系型数据库
MySQL
阿里面试官(性能优化):描述一下jvm加载class文件的原理机制?
相信很多人对于性能优化都不陌生,为了获得更好的系统性能,或者是为了满足不断增加的业务需求。 都需要用到我们的性能调优。所以性能优化在面试中出现的频率特别高 楼主自认为自己对性能优化相关知识有很多了解,而且因为最近在找工作面试,所以单独复习了很多关于索引的知识。
游客io6musbi47krs
41
0
0
小小工匠
|
7月前
|
Java
容器
Java-查看JVM从哪个JAR包中加载指定类
Java-查看JVM从哪个JAR包中加载指定类
小小工匠
135
0
0
游客gy27fhrpaouum
|
9月前
|
存储
Java
虚拟化
JVM加载class文件的原理机制是什么?
JVM加载class文件的原理机制是什么?
游客gy27fhrpaouum
46
0
0
柳鲲鹏
|
11月前
|
Java
Linux
iOS开发
JNI用C加载JDK产生JVM虚拟机,并运行JAVA类main函数(MACOS/LINUX/WINDOWS)
JNI用C加载JDK产生JVM虚拟机,并运行JAVA类main函数(MACOS/LINUX/WINDOWS)
柳鲲鹏
104
0
0
柳鲲鹏
|
Java
Linux
iOS开发
JNI用C加载JDK产生JVM虚拟机,并运行JAVA类main函数(MACOS/LINUX/WINDOWS)
JNI用C加载JDK产生JVM虚拟机,并运行JAVA类main函数(MACOS/LINUX/WINDOWS)
柳鲲鹏
195
0
0
1658538813089932
|
Java
数据库连接
API
DAY6:你必须知道的java虚拟机之类篇——类文件的加载(2)
1.类加载的七个过程清楚吗? 2.和类初始化相关的6个条件能说一下吗 3.数组的加载和引用类型的加载有哪些区别 这几个知识点还说不上来的,传送门
1658538813089932
139
0
0
Java极客技术
|
Java
应用服务中间件
编译器
JVM 是如何加载 Java 类的?
看到这个题目的时候,你可能就会觉得,阿粉,这不是挺简单的一个问题么 如何加载?不就是 加载,链接,初始化 这三步嘛,说白了不就是类加载过程么 那么,你知道这三步具体又做了什么嘛?这就是本篇文章想要写的
Java极客技术
78
0
0
万猫学社
|
Java
编译器
一篇文章彻底搞懂JVM加载中初始化的时机
JVM类加载过程分为几个阶段,分别是加载、验证、准备、解析和初始化。其中,
万猫学社
120
0
0
热门文章
最新文章
1
JVM调优篇:探索Java性能优化的必备种子面试题
2
JVM学习笔记(完结)
3
JVM学习笔记(上)
4
JVM学习笔记(中)
5
JVM常用命令整理
6
Java虚拟机运行时数据区精华总结
7
JVM调优总结二
8
JVM内存管理
9
Jenkins 打包shell出现gradle命令不存在,jvm内存溢出
10
收下我的膝盖!阿里架构师编写的668页Java虚拟机笔记真强
1
nacos日志
10
2
在Kubernetes(k8s)中部署Higress时,查看Wasm插件日志的方法如下
14
3
在OceanBase数据库中,clog和slog文件夹的内容包含了事务日志和系统日志
15
4
构建高效日志管理系统:阿里云产品实践与技术解析
33
5
SpringBoot中日志选择与实现
27
6
idea的Terminal终端操作git时, git log的注释乱码问题
14
7
使用 ELK 收集日志
11
8
MySQL之深入InnoDB存储引擎——redo日志
25
9
请仔细检查DataX报告的脏数据日志信息,或者调整脏数据阈值。
23
10
Mybatis【结果集映射、日志、分页】
22
相关产品
云迁移中心
文档详情
产品详情
相关课程
更多
场景实践-基于阿里云Quick BI 对MOOC网站日志分析
大数据知识图谱系列—基于ELK+Flink日志全观测最佳实践
日志服务 SLS 可观测数据分析平台介绍
日志服务SLS实现云产品可观测
相关电子书
更多
云服务器ECS内存增强型实例re6全新发布
JVM的GC
基于JVM的脚本语言开发、运用实践
相关实验场景
更多
日志服务之使用Nginx模式采集日志
如何将OSS数据导入至SLS中进行分析
通过日志服务实现云资源OSS的安全审计
揭秘如何通过日志服务实现个人敏感信息保护
日志服务之数据清洗与入湖
推荐文章
更多
重磅来袭!参与评测赢Iphone14 pro!
文件存储NAS评测征集令!
招募!寻找技术人的伯乐!
乘风者计划邀您入驻社区,精彩权益即刻享
下一篇
手动搭建WordPress(CentOS 8)