类的加载,链接和初始化——1运行时常量池(来自于java虚拟机规范英文版本+本人的翻译和理解)
加载(loading):通过一个特定的名字,找到类或接口的二进制表示,并通过这个二进制表示创建一个类或接口的过程。
链接:是获取类或接口并把它结合到JVM的运行时状态中,以让类或接口可以被执行
初始化:初始化一个类或接口——就是执行这个类或接口的<clinit>方法
运行时常量池(在方法区中)
在类或接口C创建的过程中,根据类或接口C的二进制表示中的常量池来创建运行时常量池。
运行时常量池中有许多运行时常量,运行时常量 有的是符号引用,有的不是符号引用
运行时常量池中所有的引用最初都是符号引用,运行时常量池中的符号引用来自于类或接口C二进制表示中的如下接口
1,类或接口C的符号引用——来自类或接口C的二进制表示中的CONSTANT_Class_info结构
类或接口C的符号引用通过调用方法Class.getName()给出类或接口C的名字A——对于非数组来说,A就是类或接口C的二进制名称(全限定名)
对n维数组来说,名称A以n个[ 开头,然后跟上数组的元素类型的名称
例如。int[ ] [ ]——名称为“[ [ I”,Thread[ ] [ ] [ ]——名称为“[ [ [ Ljava/lang/Thread;”
2,C中字段B的符号引用——来自C的二进制表示中的CONSTANT_Fieldref_info结构
C中字段B的符号引用——给出B的名称和描述符,以及一个指向字段B所在类或接口的符号引用
3,类中某个方法E的符号引用——来自类或接口的二进制表示中的CONSTANT_Methodref_info结构
类中某个方法E的符号引用——给出了方法E的名称和描述符,以及一个指向方法E所在类的符号引用
4,接口中某个方法F的符号引用——来自类或接口的二进制表示中的 CONSTANT_InterfaceMethodref_info结构
接口中某个方法F的符号引用——给出了接口方法F的名称和描述符,以及一个指向方法F所在接口的符号引用
5,method handle的符号引用——来自C的二进制表示中的CONSTANT_MethodHandle_info结构
method handle的符号引用 是 ①指向类或接口的一个字段的符号引用 或②指向类中一个方法的符号引用 或③指向接口中一个方法的符号引用
6,method type的符号引用来自于类或接口的二进制表示中的CONSTANT_Method_info结构
这个符号引用——给出了一个方法描述符
7,调用点限定符(call sit specifier)的符号引用——来自类或接口二进制表示中的CONSTANT_InvokeDynamic_info结构。
这个符号引用可以是 ①作为一个bootstrap method为invokedynamic指令服务的method handle符号引用
②一系列符号引用(类符号引用,method type符号引用,method handle符号引用)或字符串常量(string literals)或运行时常量(run-time constant values)——用来作为bootsrap method静态参数的
③方法名称和方法描述符
!!另外,有一些运行时常量并不是符号引用,而是来自常量池表中的某些项——例如字符串常量(string literals)和运行时常量值
9,字符串常量——是一个指向String实例的引用,来自于类或接口二进制表示中的CONSTANT_String_info结构
CONSTANT_String_info结构——给出Unicode code points序列,用来组成字符串常量
(JAVA要求相同的字符串常量,必须指向相同的String实例)
10,运行时常量值——来自于二进制表示中的 CONSTANT_Integer_info, CONSTANT_Float_info, CONSTANT_Long_info, or CONSTANT_Double_info结构
类的加载,链接和初始化——1运行时常量池(来自于java虚拟机规范英文版本+本人的翻译和理解)的更多相关文章
- JVM详解之:类的加载链接和初始化
目录 简介 加载 运行时常量池 类加载器 链接 验证 准备 解析 初始化 总结 简介 有了java class文件之后,为了让class文件转换成为JVM可以真正运行的结构,需要经历加载,链接和初始化 ...
- Java类的加载 链接 初始化
原文地址 Java类的加载.链接和初始化.Java字节代码的表现形式是字节数组(byte[]),而Java类在JVM中的表现形式是java.lang.Class类的对象.一个Java类从字节代码到能够 ...
- <JVM中篇:字节码与类的加载篇>04-再谈类的加载器
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...
- java虚拟机规范-加载、链接与初始化
前言 java虚拟机是java跨平台的基石,本文的描述以jdk7.0为准,其他版本可能会有一些微调.java代码本身并不能为jvm识别,实际上在jvm中的表现形式为Class对象,一个java类从字节 ...
- JVM 类的加载机制
在对类的实例化之前.JVM 一般会先进行初始化 主要经过如下几个阶段: 1.加载 类加载的第一阶段,类加载时机有两个: 1.预加载:当虚拟机启动时,会预加载 ...
- 24.类的加载机制和反射.md
目录 1类的加载连接和初始化 1.1类的加载过程 1.2类的加载器 1.2.1类的加载机制 1类的加载连接和初始化 1.1类的加载过程 类的加载过程简单为分为三步:加载->连接->初始化 ...
- 类的加载classload和类对象的生成
在Java中最重要的可以说就是类的加载了.不论我们编写的功能多么复杂,或是多么简单,永远逃离不开的,就是将这个类从class文件加载到JVM中来. 类的加载过程 首先我们要了解一下类的加载过程,包括: ...
- 透过现象看本质:Java类动态加载和热替换
摘要:本文主要介绍类加载器.自定义类加载器及类的加载和卸载等内容,并举例介绍了Java类的热替换. 最近,遇到了两个和Java类的加载和卸载相关的问题: 1) 是一道关于Java的判断题:一个类被首次 ...
- Java类的加载、链接和初始化
一.Java的类加载机制回顾与总结: 我们知道一个Java类要想运行,必须由jvm将其装载到内存中才能运行,装载的目的就是把Java字节代码转换成JVM中的java.lang.Class类的对象.这样 ...
随机推荐
- PHP simplexml_load_file() 函数
实例 转换 XML 文件为 SimpleXMLElement 对象,然后输出对象的键和元素: <?php高佣联盟 www.cgewang.com$xml=simplexml_load_file( ...
- luogu P4284 [SHOI2014]概率充电器 期望 概率 树形dp
LINK:概率充电器 大概是一个比较水的题目 不过有一些坑点. 根据期望的线性性 可以直接计算每个元件的期望 累和即为答案. 考虑统计每一个元件的概率的话 那么对其有贡献就是儿子 父亲 以及自己. 自 ...
- Android中的LruCache的原理和使用
Android中的LruCache的原理和使用 LruCache,虽然很多文章都把LRU翻译成"最近最少使用"缓存策略,但Android中的LruCache真的如此吗? 答案是No ...
- Hadoop学习之第一个MapReduce程序
期望 通过这个mapreduce程序了解mapreduce程序执行的流程,着重从程序解执行的打印信息中提炼出有用信息. 执行前 程序代码 程序代码基本上是<hadoop权威指南>上原封不动 ...
- intel:spectre&Meltdown侧信道攻击(二)
上面一篇介绍了spectre&meltdown基本原理和简单的demo方案,今天继续学习一下该漏洞发现团队原始的POC:https://spectreattack.com/spectre.pd ...
- 开源后端数据校验插件Validate.Net,类似Validate.js
介绍 Validate.Net将Validate.js移植到.Net平台,可以更方便.更快捷的校验实体内属性值是否合法.内置多种常规数据校验规则(校验必填.校验字符串长度区间.校验最大最小值.校验值区 ...
- 【CF600E】Lomset gelral 题解(树上启发式合并)
题目链接 题目大意:给出一颗含有$n$个结点的树,每个节点有一个颜色.求树中每个子树最多的颜色的编号和. ------------------------- 树上启发式合并(dsu on tree). ...
- 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(13.A)- LPSPI NOR启动时间(RT1170)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1170 1bit SPI NOR恢复启动时间. 本篇是i.MXRT1170启动时间评测第三弹了,前两篇分别给大家评 ...
- Pytorch_第七篇_深度学习 (DeepLearning) 基础 [3]---梯度下降
深度学习 (DeepLearning) 基础 [3]---梯度下降法 Introduce 在上一篇"深度学习 (DeepLearning) 基础 [2]---神经网络常用的损失函数" ...
- JDBC回顾
回顾JDBC,完成查询 1 什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使 ...