文章目录

  • Pre
  • class常量池
    • 字面量
    • 符号引用
    • 运行时常量池

Pre

JVM - 深入剖析字符串常量池

JVM - 基本类型的包装类和对象池


class常量池

Class常量池我们可以理解为是Class文件中的资源仓库。

Class文件中主要由两大部分

  • 类的版本、字段、方法、接口等描述信息外,
  • 常量池(constant pool table),用于存放编译期生成的各种字面量(Literal)和符号引用(Symbolic References)

我们来看下我们天天打交道的class文件十六进制的样子 大致如下

基本含义

通常都是 javap 来生成可读的字节码文件来查看。

或者在idea中装个 jclasslib插件 查看

这里面主要是两个东西; 字面量和符号引用


字面量

么错 就是你想的那个意思: 由字母、数字等构成的字符串或者数值常量 。

比如

int a = 1;
int b = 2;
String c = "artisan";
String d = "art123";

符号引用

符号引用是编译原理中的概念,是相对于直接引用来说的。主要包括了以下三类常量:

  • 类和接口的全限定名
  • 字段的名称和描述符
  • 方法的名称和描述符

刚刚上面的代码

a、b 、c、d就是字段名称,就是一种符号引用,

类的全限定名也是符号引用,

类中的方法名称,()是一种UTF8格式的描述符,这些都是符号引用。


运行时常量池

class常量池现在是静态信息,只有到运行时被加载到内存后,这些符号才有对应的内存地址信息,这些常量池一旦被装入内存就变成运行时常量池,对应的符号引用在程序加载或运行时会被转变为被加载到内存区域的代码的直接引用,也就是我们说的动态链接了。

举个例子哈,methodA()这个符号引用在运行时就会被转变为methodA()方法具体代码在内存中的地址,主要通过对象头里的类型指针去转换直接引用。


JVM - Class常量池 || 运行时常量池相关推荐

  1. JVM 内存模型:运行时常量池

    1. 前言 最近研究Java基础知识.发现Java运行时常量池和String字符串有些一些细节的地方,值得我们注意的地方,最为一个Java开发人员对于这种java基本特性和JVM虚拟机的内存模型我们需 ...

  2. JVM常量池最全详解-常量池/运行时常量池/字符串常量池/基本类型常量池,看这一篇就够了

    JVM常量池最全详解-常量池/运行时常量池/字符串常量池/基本类型常量池,看这一篇就够了! 常量池详解 1. 字面量和符号引用 1.1 字面量 1.2 符号引用 2. 常量池vs运行时常量池 3. 常 ...

  3. JVM详解之:运行时常量池

    文章目录 简介 class文件中的常量池 运行时常量池 静态常量详解 String常量 数字常量 符号引用详解 String Pool字符串常量池 总结 简介 JVM在运行的时候会对class文件进行 ...

  4. 02.字符串常量池 ? class常量池? 运行时常量池?

    java对象创建流程: 简介: 这几天在看Java虚拟机方面的知识时,看到了有几种不同常量池的说法,然后我就去CSDN.博客园等上找资料,里面说的内容真是百花齐放,各自争艳,因此,我好好整理了一下,将 ...

  5. Java中几种常量池(字符串常量池, Class常量池, 运行时常量池)的区别与联系

    简介: 这几天在看Java虚拟机方面的知识时,看到了有几种不同常量池的说法,然后我就去CSDN.博客园等上找资料,里面说的内容真是百花齐放,各自争艳,因此,我好好整理了一下,将我自认为对的理解写下来与 ...

  6. [JVM]了断局:常量池 VS 运行时常量池 VS 字符串常量池

    一.前言 最近在看JVM, 常量池, 运行时常量池,字符串常量池 这个看的有点懵. 整理一下. class常量池 是在编译的时候每个class都有的. 在编译阶段,存放的是常量的 符号引用 .    ...

  7. 详解JVM常量池、Class常量池、运行时常量池、字符串常量池(心血总结)

    写在前面:博主是一位普普通通的19届双非软工在读生,平时最大的爱好就是听听歌,逛逛B站.博主很喜欢的一句话花开堪折直须折,莫待无花空折枝:博主的理解是头一次为人,就应该做自己想做的事,做自己不后悔的事 ...

  8. jvm中方法区和常量池详解_Java常量池(静态常量池与运行时常量池)

    1.什么是常量 用final修饰的成员变量表示常量,值一旦给定就无法改变! final修饰的变量有三种:静态变量.实例变量和局部变量,分别表示三种类型的常量. Java中的常量池,实际上分为两种形态: ...

  9. python中常量池和堆_JVM详解之:运行时常量池

    简介 JVM在运行的时候会对class文件进行加载,链接和初始化的过程.class文件中定义的常量池在JVM加载之后会发生什么神奇的变化呢?快来看一看吧. class文件中的常量池 之前我们在讲cla ...

最新文章

  1. Spring Boot 2.x基础教程:使用 ECharts 绘制各种华丽的数据图表
  2. 【mac开发.NET】No installed provisioning profiles match the installed iOS signing identities
  3. 最短路的几种算法及其优化(模板)
  4. mysql delete temporary denied_这些错误是什么意思?djang中的mysql
  5. MFC之CString与const char* string 转换
  6. laravel报错:MassAssignmentException
  7. Java之switch的控制语句详解
  8. android 按钮列表,android – 如何使按钮看起来像列表
  9. 各大牛逼讲师的经典Jquery精品视频教程,大放送啦!!!(包括手机移动端JqueryWeb开发)!!!...
  10. python获取当前路径
  11. 利用BioEdit做多序列一致性比对
  12. mysql实验考试_正在数据库实验考试,跪求SQL代码
  13. docker file详细介绍
  14. SEO流量变现,看这个项目就够了!
  15. SOFA BOLT源码解析之设计要点-线程模型
  16. linux下载流量和上传流量,通过linux的tc工具简单实现上传和下载的流量控制
  17. ROS学习笔记-多机器人通信(1)-实现两台机器通信
  18. 实战PyQt5: 156-QChart图表之更换图表主题
  19. 数据处理之连续数据离散化
  20. debian系统怎么连接服务器,zh_CN/SystemPrinting

热门文章

  1. DialogFragment 全屏显示
  2. ubuntu 18.04 安装 opencv3.4.1 以及 opencv_contrib 3.4.1] 亲测可用
  3. tf.clip_by_value
  4. pythonsvm图像分类_python图像处理之sift-kmeans-SVM图像分类
  5. [Solved] UnicodeDecodeError: ‘utf-8’ codec can’t decode byte 0xff in position 0: invalid start byte
  6. 医学图像~脑分类数据fMRI, voxel
  7. 语音识别(一):特征抽取~1.1 抽样(sampling)和量化(quantization)
  8. torchvision 笔记:transforms.Normalize()
  9. python爬虫应用实战-如何爬取表情进行斗图?丰富你的表情库
  10. R语言实战应用-lightgbm 算法优化:不平衡二分类问题(附代码)