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

JVM基础了解

        JVM 是java虚拟机。

       作用:运行并管理java源码文件锁生成的Class文件;在不同的操作系统上安装不同的JVM,从而实现了跨平台的保证。一般在安装完JDK或者JRE之后,其中就已经内置了JVM,只需要将Class文件交给JVM即可

 写好的java源文件,会编译生成16进制的字节码文件(**.class),cafe babe开头,有相应的格式,可交由jvm执行

1.类加载

     A. 首先是Loading阶段,找到jvm执行字节码文件的前提是需要找到对应的字节码文件。由此可知,下一步就是通过类加载机制对 Class文件进行加载,其实是在硬盘上查找并通过IO读入字节码文件【使用到类时才会加载,java这里采用的时懒加载机制,例如:调用类main()方法时,new对象等,在加载阶段会在内存生成一个代表这个类的java.lang.Class对象】【双亲委派】

     双亲委派机制进行类加载,加载类的时候,先由Custom ClassLoader 自定义类加载器 委托上级 App ClassLoader应用类加载器 再委托上级Extension ClassLoader 扩展类加载器 最后委托给 Bootstrap ClassLoader 根加载器 ,由根加载器优先去加载此类。如果 根加载器未在自己的工作范围内找到,则向下一级委托,一旦有加载器加载后,则不会被重复加载。根加载器 和扩展类加载器一般是加载 java自带的一些 类,【这样是一个沙箱机制,防止 用户随意篡改已有的类,比如用户自己写一个 java.lang.String类,用户自己写的类是没法被加载】

    当然,双亲委派机制也是可以破坏的,ClassLoader里面的 复写loadclass方法,改变加载方式,例如:Tomcat

   B.找到对应的class文件,进行加载的时候,会打散.class的信息,类文件字节码流静态存储结构 放入 JVM的一块区域【Method  Area】,方法区,所有的线程共享的一块区域

   C. 类文件的所对应的Class对象 交给jvm 放入【Heap】堆中,也是所有线程共享的一块区域 


2.链接 (Linking)

   加载类文件后需要进一步处理

   a. 验证  verify :保证类被加载的类的正确性,有验证规则

   b. 准备 prepare :为类的静态变量分配内存空间,并将其的值初始化为默认值 。比如 static int a =0 ; 初始化 a=0;

   c. 解析 resolve :将类中的符号引用转换为直接引用

    例如:目前字节码文件String str 的地址,以前是.class 文件中的一个代称,这里将会 分配好内存空间直接对应内存中的某一个真实的地址指向


3. 初始化 (Initializing)

   为静态变量进行初始化为真正的值   ,a =10;


最后 进行使用  以及 卸载

 

 

http://www.lryc.cn/news/131911.html

相关文章:

  • QT:event事件分发器,事件过滤器(了解)
  • 若依项目的介绍(前后端分离版本)
  • DT游乐场建模
  • Servlet+JDBC实战开发书店项目讲解第9篇:VIP等级优惠实现
  • Azure文件共享
  • idea新建web项目
  • 回归预测 | MATLAB实现BES-SVM秃鹰搜索优化算法优化支持向量机多输入单输出回归预测(多指标,多图)
  • 电商增强现实3D模型优化需要关注的4个方面
  • 【Effective Python】读书笔记-04推导与生成
  • Android内存泄漏总结和性能优化技巧
  • leetcode 125.验证回文串
  • ZooKeeper客户端使用与经典应用场景
  • 标签准备——labelIMG工具使用——自动化标注
  • 关于vant2 组件van-dropdown-item,在IOS手机上,特定条件下无法点击问题的探讨
  • 一零七一、Spring大海捞针篇
  • 请求并发控制
  • 创建密码库/创建用户帐户/更新 Ansible 库的密钥/ 配置cron作业
  • vue实现穿梭框,ctrl多选,shift多选
  • Win11中zookeeper的下载与安装
  • ubuntu22.04 找不到串口,串口ttyusb时断时续的问题(拔插以后能检测到,过会儿就检测不到了)
  • Pinia基础教程
  • 【NOIP】标题统计
  • BOXTRADE-天启量化分析平台 系统功能预览
  • 解决Kibana(OpenSearch)某些字段无法搜索问题
  • 代码随想录训练营day15|102.层序遍历 226.翻转二叉树 101.对称二叉树
  • Nginx 配置https以及wss
  • Log4net在.Net Winform项目中的使用
  • 从零到一制作扫雷游戏——C语言
  • Python 数据挖掘与机器学习教程
  • 排序小白必读:掌握插入排序的基本原理