描述一下JVM加载class文件的原理机制?Java对象创建过程?

JVM加载class文件的原理机制        

        JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。 由于Java的跨平台性,经过编译的Java源程序并不是一个可执行程序,而是一个或多个类文件。当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。加载完成后,Class对象还不完整,所以此时的类还不可用。当类被加载后就进入连接阶段,这一阶段包括验证、准备(为静态变量分配内存并设置默认的初始值)和解析(将符号引用替换为直接引用)三个步骤。最后JVM对类进行初始化,包括:1)如果类存在直接的父类并且这个类还没有被初始化,那么就先初始化父类;2)如果类中存在初始化语句,就依次执行这些初始化语句。 类的加载是由类加载器完成的,类加载器包括:根加载器(BootStrap)、扩展加载器(Extension)、系统加载器(System)和用户自定义类加载器(java.lang.ClassLoader的子类)。从Java 2(JDK 1.2)开始,类加载过程采取了父亲委托机制(PDM)。PDM更好的保证了Java平台的安全性,在该机制中,JVM自带的Bootstrap是根加载器,其他的加载器都有且仅有一个父类加载器。类的加载首先请求父类加载器加载,父类加载器无能为力时才由其子类加载器自行加载。JVM不会向Java程序提供对Bootstrap的引用。下面是关于几个类加载器的说明:

  • Bootstrap:一般用本地代码实现,负责加载JVM基础核心类库(rt.jar);
  • Extension:从java.ext.dirs系统属性所指定的目录中加载类库,它的父加载器是Bootstrap;
  • System:又叫应用类加载器,其父类是Extension。它是应用最广泛的类加载器。它从环境变量classpath或者系统属性java.class.path所指定的目录中记载类,是用户自定义加载器的默认父加载器。

Java对象创建过程

  1. JVM遇到一条新建对象的指令时首先去检查这个指令的参数是否能在常量池中定义到一个类的符号引用。然后加载这个类(类加载过程在后边讲)
  2. 为对象分配内存。一种办法“指针碰撞”、一种办法“空闲列表”,最终常用的办法“本地线程缓冲分配(TLAB)”
  3. 将除对象头外的对象内存空间初始化为0
  4. 对对象头进行必要设置 

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

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

相关文章

基于AIoTedge+ThingsKit物联网平台,实现办公室人员进出AI统计

在AIoT时代,智能办公已成为提升企业效率的关键。本期文章将带你了解如何利用AIoTedge结合ThingsKit物联网平台,实现办公室人员进出的智能统计。这不是简单的技术堆砌,而是一场关于AI与IoT融合的实战演示。🌟 提示:AIoT…

Mysql进阶-sql优化篇

sql优化 sql优化insert优化批量插入手动提交事务主键顺序插入大批量插入数据 主键优化数据组织方式页分裂页合并主键设计原则 order by 优化原则 group by优化limit优化count 优化count的几种用法 update优化 sql优化 insert优化 批量插入 Insert into tb_test values(1,Tom…

算法笔记——数位DP

一、前置知识 1.DP小知识 D P DP DP 是一种算法思想,用递推方程的方式解决问题。但是使用它要满足如下性质: 最优子结构: 子结构优秀,整个就优秀。无后效性:当前决策不会影响后面。 2.DP实现方法 众所周知&#xf…

【Java】Java基础 使用集合实现斗地主分牌

📝个人主页:哈__ 期待您的关注 目录 0.思路 1.创建玩家手牌集合 2.创建牌堆 3. 把牌放入牌堆 4.洗牌 5.进行分牌 6.完整代码 今天使用集合TreeSet来实现一个斗地主的分牌流程。 TreeSet集合的一个特点就是 元素有序,这样就方便…

定期更新与维护:技术与生活的同步律动

在这个数字化时代,科技的温暖之光照进了盲人朋友们的日常生活中,特别是那些辅助出行的应用程序,它们如同贴心的向导,引领着用户穿越城市的喧嚣与宁静。然而,要确保这些应用始终能够高效、安全地服务于盲人用户&#xf…

Seaborn用法大全

原文连接: https://blog.csdn.net/qq_38614074/article/details/138251530 # Seaborn介绍 Seaborn是一个基于Python的数据可视化库,它建立在matplotlib的基础之上,为统计数据的可视化提供了高级接口。Seaborn通过简洁美观的默认样式和绘图类型&#xff…

如何用networkx实现最短路径的求解

您可以使用networkx库中的最短路径算法来求解最短路径。下面是一个使用networkx库的示例代码: import networkx as nx# 创建有向图 G nx.DiGraph()# 添加带权重的边 G.add_edge(A, B, weight4) G.add_edge(A, C, weight2) G.add_edge(B, C, weight1) G.add_edge(B…

Java随笔1

1.编程中组件的概念: 在编程中,组件(Component)通常指的是一种可重用的、模块化的代码单元,它封装了特定的功能或用户界面元素,并提供了与其他代码进行交互的接口。组件可以看作是对数据和方法的简单封装&…

锁策略详解:互斥锁、读写锁、乐观锁与悲观锁、轻量级锁与重量级锁、自旋锁、偏向锁、可重入锁与不可重入锁、公平锁与非公平锁

一.锁策略 锁策略指的是在多线程编程中用于管理共享资源访问的规则和技术。它们确保在任何给定时间只有一个线程可以访问共享资源,以防止竞态条件和数据不一致性问题。常见的锁策略包括: 互斥锁(Mutex):最常见的锁类型…

深入理解C++中的多态性

目录标题 1. 多态性简介2. 静态多态函数重载模板 3. 动态多态虚函数new动态分配内存纯虚函数和抽象类 4. 多态的应用5. 总结 在C编程中,多态性是一种使得相同的消息或操作可以应用于不同的对象,并根据对象的类型产生不同行为的能力。C通过虚函数&#xf…

王者营地ip地址怎么隐藏

在数字化快速发展的今天,网络安全和隐私保护成为了每个人都需要面对的重要问题。作为一款备受欢迎的游戏社区应用,王者营地为用户提供了丰富的游戏信息和交流平台。然而,与此同时,用户的IP地址也可能在不经意间被泄露,…

spring框架定时任务(@Scheduled)

内容: 在spring框架中,scheduled注解是用于声明定时任务的,以最简单的方式来创建定时任务。 注意: 要使用scheduled注解,需要确保已下几点: 1.spring应用程序已经开启了定时任务的开启。需要在配置类&am…

WPS加载项(wps jsapi)创建、发布及部署

安装wpsjs及其他具体细节参考WPS加载项官网地址https://open.wps.cn/previous/docs/client/wpsLoad 1,试验环境 node 20.12.1 npm 10.7.0 wpsjsrpcsdk.js,改动时间:2022-11-28 19:06, 大小80.2 KB (82,192 字节) wps,WPSPro_11.8.2.12195.e…

TCP与HTTP的关系?

TCP与HTTP的关系? 它们在TCP/IP七层通信架构的位置不同: 对于HTTP协议,它是在应用层的。对于TCP协议,它是在传输层的。 它们对应的功能不同: 对于TCP协议,它只是负者建立连接断开连接的,但是…

C++(类和对象—封装)

C面向对象的三大特性 封装 继承 多态 C认为万事万物皆为对象,对象上有其属性和行为 什么是封装? 封装是C面向对象三大特性之一 封装的意义: 将属性和行为作为一个整体,表现生活中的事物 将属性和行为加以权限控制封装意义一: …

torch.compile() 加速推理速度

条件: 需安装2.0及以上版本的torch即可。 优势: 根据模型和GPU的不同,torch.compile()在推理过程中可以提高多达30%的速度。 使用方式: vae_config OmegaConf.load("kl-f8/config.yaml")vae_model load_model_from_…

博客互动革命:如何打造活跃读者社区并提升参与度

CSDN 的朋友你们好,我是未来,今天给大家带来专栏【程序员博主教程(完全指南)】的第 10 篇文章“与读者互动”。本文揭示了提升技术博客参与度的秘诀。从评论互动到社交媒体策略,本文将指导你如何建立强大的读者社区。掌…

MySQL面试之什么是聚合函数、事务、索引?(通俗易懂版)

1、聚合函数: MySQL中的聚集函数用于对一组数据进行计算并返回单个结果。常见的聚集函数包括: COUNT():用于计算结果集中行的数量。SUM():对结果集中的数值列进行求和。AVG():计算结果集中数值列的平均值。MAX()&…

MYSQL数据库-SQL语句

数据库相关概念 名称全称简称数据库存储数据的仓库,数据是有组织的进行存储DataBase(DB)数据库管理系统操纵和管理数据库的大型软件DataBase Management System(DBMS)SQL操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准Structured Quer…

win10电脑录屏全攻略,从入门到精通,一篇文章就够了!

在当今科技时代,电脑录屏已经成为人们生活中越来越重要的一部分。无论是工作还是娱乐,我们都可能需要录制电脑屏幕来保存或分享一些内容。在本文中,我们将向您介绍win10电脑录屏的三种方法,并对每种方法进行详细说明,为…