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

JVM学习《类加载运行-jvm内存模型》

目录

1.类加载过程

1.1 加载过程详解

1.2 类加载器

2.类加载器和双亲委派机制

3.JVM的内存模型

4.那些是GC Roots的对象有哪些?


1.类加载过程

       通过类加载器加载主类到JVM,加载过程可以分为五个主要阶段:加载、验证、准备、解析、初始化。

1.1 加载过程详解
  • 加载:在硬盘上查找字节码文件,生成java.lang.Class对象。
  • 验证:校验字节码文件的正确性。
  • 准备:为静态变量分配内存,并赋予默认值。
  • 解析:将符号引用替换为直接引用。
  • 初始化:为静态变量赋予指定值,执行静态代码块。
1.2 类加载器

引导类加载器(Bootstrap ClassLoader):加载JRE核心类库。

扩展类加载器(Extension ClassLoader):加载JRE扩展目录中的类包。

应用程序类加载器(Application ClassLoader):加载ClassPath路径下的类。

自定义加载器(Custom ClassLoader):加载用户自定义路径下的类。

2.类加载器和双亲委派机制

   Java在运行之前,首先需要把Java代码转换成字节码,即class文件。然后JVM需要把字节码通过类加载器(ClassLoader)方式加载到内存中的运行时数据区

      类加载时,先委托父加载器(上层父加载器)寻找目标类,找不到再由自己加载。

设计双亲委派机制的好处?

  • 安全性:沙箱安全机制,防止核心类库(如 java.lang.String)被篡改。通过先让父类加载器尝试加载类,可以确保应用程序无法加载并替换核心类库。

  • 避免类的重复加载:如果某个类已经被父类加载器加载过,子类加载器就不会再加载它,从而保证 JVM 中每个类的唯一性,节省内存资源并提高加载效率。

3.JVM的内存模型

4.那些是GC Roots的对象有哪些?

垃圾回收(Garbage Collection, GC)的方法主要有两种:引用计数法可达性分析算法

下为GCROOT的对象:

  1. 虚拟机栈(栈帧中的本地变量表)中引用的对象
  2. 方法区中类静态属性引用的对象
  3. 方法区中常量引用的对象
  4. 本地方法栈中JNI引用的对象

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • EXO:StandardNode _process_tensor
  • Node.js中的SQLite库:安装、对比与选择指南
  • Datawhale X 李宏毅苹果书 AI夏令营 进阶 Task2-自适应学习率+分类
  • 100423. 求出数字答案 显示英文描述
  • Makefile入门
  • java之浅拷贝、深拷贝
  • vscode和edge浏览器等鼠标输入光标变透明
  • 单链表应用
  • 【Android】UI拓展之滑动菜单、悬浮按钮、CoordinatorLayout布局等
  • excel透视图、看板案例(超详细)
  • 保姆级Maven安装、配置、版本查询教程(包含配置本地仓库、阿里云私服、环境变量)
  • PWM(Pulse-width modulation)脉冲宽度调制
  • 计算机毕业设计PySpark+Scrapy农产品推荐系统 农产品爬虫 农产品商城 农产品大数据 农产品数据分析可视化 PySpark Hadoop
  • Leetcode3243. 新增道路查询后的最短距离 I
  • C#——类与结构
  • 【刷算法】从上往下打印二叉树
  • 2018一半小结一波
  • Angular6错误 Service: No provider for Renderer2
  • Apache Zeppelin在Apache Trafodion上的可视化
  • ES6核心特性
  • Git的一些常用操作
  • 从PHP迁移至Golang - 基础篇
  • 大型网站性能监测、分析与优化常见问题QA
  • 干货 | 以太坊Mist负责人教你建立无服务器应用
  • 简单实现一个textarea自适应高度
  • 看完九篇字体系列的文章,你还觉得我是在说字体?
  • 前端存储 - localStorage
  • 浅谈Kotlin实战篇之自定义View图片圆角简单应用(一)
  • 如何正确配置 Ubuntu 14.04 服务器?
  • 少走弯路,给Java 1~5 年程序员的建议
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 一道闭包题引发的思考
  • 智能合约开发环境搭建及Hello World合约
  • media数据库操作,可以进行增删改查,实现回收站,隐私照片功能 SharedPreferences存储地址:
  • MyCAT水平分库
  • 阿里云API、SDK和CLI应用实践方案
  • 从如何停掉 Promise 链说起
  • ​flutter 代码混淆
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • #传输# #传输数据判断#
  • (12)目标检测_SSD基于pytorch搭建代码
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (vue)el-tabs选中最后一项后更新数据后无法展开
  • (补)B+树一些思想
  • (苍穹外卖)day03菜品管理
  • (几何:六边形面积)编写程序,提示用户输入六边形的边长,然后显示它的面积。
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (四)c52学习之旅-流水LED灯
  • (原创)Stanford Machine Learning (by Andrew NG) --- (week 9) Anomaly DetectionRecommender Systems...
  • (原創) 如何優化ThinkPad X61開機速度? (NB) (ThinkPad) (X61) (OS) (Windows)
  • (转)fock函数详解
  • (转)编辑寄语:因为爱心,所以美丽
  • .Net Core webapi RestFul 统一接口数据返回格式
  • .NET Micro Framework 4.2 beta 源码探析