加载(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_infoCONSTANT_Float_infoCONSTANT_Long_info, or CONSTANT_Double_info结构

类的加载,链接和初始化——1运行时常量池(来自于java虚拟机规范英文版本+本人的翻译和理解)的更多相关文章

  1. JVM详解之:类的加载链接和初始化

    目录 简介 加载 运行时常量池 类加载器 链接 验证 准备 解析 初始化 总结 简介 有了java class文件之后,为了让class文件转换成为JVM可以真正运行的结构,需要经历加载,链接和初始化 ...

  2. Java类的加载 链接 初始化

    原文地址 Java类的加载.链接和初始化.Java字节代码的表现形式是字节数组(byte[]),而Java类在JVM中的表现形式是java.lang.Class类的对象.一个Java类从字节代码到能够 ...

  3. <JVM中篇:字节码与类的加载篇>04-再谈类的加载器

    笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机) 同步更新:https://gitee.com/vectorx/NOTE_JVM https://codechina.cs ...

  4. java虚拟机规范-加载、链接与初始化

    前言 java虚拟机是java跨平台的基石,本文的描述以jdk7.0为准,其他版本可能会有一些微调.java代码本身并不能为jvm识别,实际上在jvm中的表现形式为Class对象,一个java类从字节 ...

  5. JVM 类的加载机制

    在对类的实例化之前.JVM 一般会先进行初始化 主要经过如下几个阶段: 1.加载                       类加载的第一阶段,类加载时机有两个: 1.预加载:当虚拟机启动时,会预加载 ...

  6. 24.类的加载机制和反射.md

    目录 1类的加载连接和初始化 1.1类的加载过程 1.2类的加载器 1.2.1类的加载机制 1类的加载连接和初始化 1.1类的加载过程 类的加载过程简单为分为三步:加载->连接->初始化 ...

  7. 类的加载classload和类对象的生成

    在Java中最重要的可以说就是类的加载了.不论我们编写的功能多么复杂,或是多么简单,永远逃离不开的,就是将这个类从class文件加载到JVM中来. 类的加载过程 首先我们要了解一下类的加载过程,包括: ...

  8. 透过现象看本质:Java类动态加载和热替换

    摘要:本文主要介绍类加载器.自定义类加载器及类的加载和卸载等内容,并举例介绍了Java类的热替换. 最近,遇到了两个和Java类的加载和卸载相关的问题: 1) 是一道关于Java的判断题:一个类被首次 ...

  9. Java类的加载、链接和初始化

    一.Java的类加载机制回顾与总结: 我们知道一个Java类要想运行,必须由jvm将其装载到内存中才能运行,装载的目的就是把Java字节代码转换成JVM中的java.lang.Class类的对象.这样 ...

随机推荐

  1. PHP simplexml_load_file() 函数

    实例 转换 XML 文件为 SimpleXMLElement 对象,然后输出对象的键和元素: <?php高佣联盟 www.cgewang.com$xml=simplexml_load_file( ...

  2. luogu P4284 [SHOI2014]概率充电器 期望 概率 树形dp

    LINK:概率充电器 大概是一个比较水的题目 不过有一些坑点. 根据期望的线性性 可以直接计算每个元件的期望 累和即为答案. 考虑统计每一个元件的概率的话 那么对其有贡献就是儿子 父亲 以及自己. 自 ...

  3. Android中的LruCache的原理和使用

    Android中的LruCache的原理和使用 LruCache,虽然很多文章都把LRU翻译成"最近最少使用"缓存策略,但Android中的LruCache真的如此吗? 答案是No ...

  4. Hadoop学习之第一个MapReduce程序

    期望 通过这个mapreduce程序了解mapreduce程序执行的流程,着重从程序解执行的打印信息中提炼出有用信息. 执行前 程序代码 程序代码基本上是<hadoop权威指南>上原封不动 ...

  5. intel:spectre&Meltdown侧信道攻击(二)

    上面一篇介绍了spectre&meltdown基本原理和简单的demo方案,今天继续学习一下该漏洞发现团队原始的POC:https://spectreattack.com/spectre.pd ...

  6. 开源后端数据校验插件Validate.Net,类似Validate.js

    介绍 Validate.Net将Validate.js移植到.Net平台,可以更方便.更快捷的校验实体内属性值是否合法.内置多种常规数据校验规则(校验必填.校验字符串长度区间.校验最大最小值.校验值区 ...

  7. 【CF600E】Lomset gelral 题解(树上启发式合并)

    题目链接 题目大意:给出一颗含有$n$个结点的树,每个节点有一个颜色.求树中每个子树最多的颜色的编号和. ------------------------- 树上启发式合并(dsu on tree). ...

  8. 痞子衡嵌入式:恩智浦i.MX RT1xxx系列MCU启动那些事(13.A)- LPSPI NOR启动时间(RT1170)

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是恩智浦i.MX RT1170 1bit SPI NOR恢复启动时间. 本篇是i.MXRT1170启动时间评测第三弹了,前两篇分别给大家评 ...

  9. Pytorch_第七篇_深度学习 (DeepLearning) 基础 [3]---梯度下降

    深度学习 (DeepLearning) 基础 [3]---梯度下降法 Introduce 在上一篇"深度学习 (DeepLearning) 基础 [2]---神经网络常用的损失函数" ...

  10. JDBC回顾

    回顾JDBC,完成查询 1 什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库.原来我们操作数据库是在控制台使 ...