当前位置: 首页 > news >正文

接地气的方式认识JVM(二)

最近实习,感觉属于自己的时间越来越少了,这次来一起说说jvm的类加载器吧。

类加载器

他是干什么的?
类加载器是用来将.class文件搬运到内存中的,并将这些内容转换成方法区运行时的数据结构,并且ClassLoader只负责class文件的加载,而是否能运行则有Execution Engine来决定。

1.1类加载器的流程

加载器的流程包括:加载、链接、初始化
再具体一点就是:加载,验证,准备,解析,初始化,使用,卸载
其中验证,准备,解析都属于链接

1.1.1加载

1.将.class文件加载到内存中去
2.将静态的数据结构转化成方法区运行时的数据结构
3.在堆上生成一个代表这个类的java.lang.Class文件对象作为数据的入口

1.1.2链接

1.验证:对类做一个安全检查,防止这个文件会对jvm做一些攻击的事情
2.准备:为static变量在方法区中分配内存方法,设置变量的初始值,例如 static int a=3
3.解析:虚拟机将常量池内的符号引用替换为直接引用的过程(从import java.util…这算法号引用,直接引用就是指针或者对象地址

1.1.3初始化

初始化其实就是执行类构造器方法的()的过程,而且要保证执行前父类的()方法执行完毕。这个方法由编译器收集,顺序执行所有类变量(static 修饰的成员变量)显式初始化和静态代码块中语句。此时准备阶段时的那个 static int a 由默认初始化的 0 变成了显式初始化的 3。

1.1.4卸载

GC将无用对象从内存中卸载

1.2类加载器的加载顺序

加载一个类是有优先级的
1.BootStrap ClassLoader rt.jar
2.Extension ClassLoader 加载拓展的jar包
3.App ClassLoader 指定classpath下的jar包
4.Custom ClassLoader 自定义的类加载器

1.3双亲委派机制

当一个类收到了加载请求时,它是不会自己进行加载的,而是委托给父类去完成,比如说我现在要new一个Student类,这个Student类是我们自定义的类,Student类会先去委托App ClassLoader类,然后,App ClassLoader类会去委托Extension ClassLoader类,然后会去BootStrap类中去加载,只有当父类中都找不到这个类时,才回去当前类进行加载
这样做的好处是,在加载rt.jar包中的类时,不管是哪一个类加载器,最终都会委托到BootStrap类进行加载,这样保证了使用的不同的类加载器,加载的结果是一致的
over!

相关文章:

  • Linux边缘智能:物联网的终极进化
  • 【最新案例】智能物料称重柜/生鲜称重售卖柜系统, 共享自助管理系统, 物联网应用定制开发
  • 职坐标物联网全栈开发全流程解析
  • VR 技术赋能南锣鼓巷的多元发展潜力与前景​
  • Python ROS2【机器人中间件框架】 简介
  • 【HTML-16】深入理解HTML中的块元素与行内元素
  • 基于江科大stm32屏幕驱动,实现OLED多级菜单(动画效果),结构体链表实现(独创源码)
  • 基于 Spring Boot 策略模式的短信服务提供商动态切换实现
  • delphi安装SAP控件:SAPFunctionsSAPLogonControl
  • Fail2ban开源入侵检测,保护SSH,NGINX等
  • 基于Python的气象数据分析及可视化研究
  • Java性能测试工具列举
  • 【PostgreSQL系列】PostgreSQL连接参数
  • 雷达RCS计算中的旋转矩阵
  • 【FTP】ftp文件传输会丢包吗?批量几百个文件传输,有一些文件没有传输完整,如何解决?
  • SpringBoot API接口签名(防篡改)
  • AWS vs 阿里云:功能、服务与性能对比指南
  • centos7部署AWStats日志分析系统
  • AWSLambda之设置时区
  • 使用docker在3台服务器上搭建基于版本redis 6.x的一主两从模式
  • 网站建设创业计划书模板范文/何鹏seo
  • Java除了做网站开发哈能做啥/网站关键词搜索排名优化
  • 公司做网站需要多少钱/北京百度搜索排名优化
  • 免费开源的网站系统/媒介星软文平台官网
  • 钦州网站制作/seo 的作用和意义
  • 学做效果图的网站有哪些/网络营销策略理论有哪些