1. 根据java的字节码格式说明,常量池中每一项的大小不一样的。运行时,若要通过数组索引获取具体的一项时,

必须要经过一定的处理才能根据数组下标进行处理,具体的实现原理实际上就是空间换时间,可以参考kvm的实现:

每一项的定义,采用的是union的定义(会取最大的字节数进行内存分配)

/* Each of these represents one entry in the constant pool */

union constantPoolEntryStruct {

struct {

unsigned short classIndex;

unsigned short nameTypeIndex;

} method; /* Also used by Fields */

CLASS clazz;

INTERNED_STRING_INSTANCE String;

cell *cache; /* Either clazz or String */

cell integer;

long length;

NameTypeKey nameTypeKey;

NameKey nameKey;

UString ustring;

};

2. 常量池的定义:

注意:这里有多少个数组元素,实际上不确定的,这里只是占位而已,具体使用时是通过分配不同的

内存大小实现可变大小。

struct constantPoolStruct {

union constantPoolEntryStruct entries[1];

};

typedef struct constantPoolStruct* CONSTANTPOOL;

ConstantPool = (CONSTANTPOOL)callocPermanentObject(tableSize);

java字节码常量池_java字节码常量池处理说明相关推荐

  1. java中用于运行字节码的命令_Java字节码指令

    1. 简介 Java虚拟机的指令由一个字节长度的.代表着某种特定操作含义的数字(称为操作码)以及跟随其后的零至多个代表此操作所需参数(称为操作数)而构成. 由于Java虚拟机采用面向操作数栈而不是寄存 ...

  2. java线程池_Java 并发编程 线程池源码实战

    作者 | 马启航 杏仁后端工程师.「我头发还多,你们呢?」 一.概述 笔者在网上看了好多的关于线程池原理.源码分析相关的文章,但是说实话,没有一篇让我觉得读完之后豁然开朗,完完全全的明白线程池,要么写 ...

  3. java用的原码还是反码_java 原码 反码 和补码

    --------- 原码.补码.反码 计算机是数字电路设备,由复杂的电子元器件组合而成,一个电子元器件在工作时,可以分为两种状态--高电平和低电平,表示数据用高电平表示1,低电平表示0,而多个电子元器 ...

  4. 用java程序编写原码补码转换_java 原码、反码、补码

    为什么要用? 计算机内部采用二进制表示数值.如十进制数10用二进制数表示为1010.设计算机字长为8,即1Byte.最高位表示符号,0为正,1为负 来看看用原码表示的数在进行加减乘除运算是会有什么问题 ...

  5. java 队列线程池_JAVA工作队列与线程池

    为什么要使用线程池? 诸如 Web 服务器.数据库服务器.文件服务器或邮件服务器之类的许多服务器应用程序都面向处理来自某些远程来源的大量短小的任务.请求以某种方式到达服务器,这种方式可能是通过网络协议 ...

  6. java中数据库连接池_Java中的数据库连接池

    本文译自Baeldung的博客 概述 连接池是一种众所周知的数据库访问模式,主要目的是减少创建数据库连接和读/写数据库操作的开销. 简单来说,连接池本质上就是数据库连接缓存的一种实现方式,可以通过对其 ...

  7. java字节码文件加密_java 字节码加密源码

    java 字节码加密源码 java 2021-2-16 下载地址 https://www.codedown123.com/73152.html java 字节码加密源码,实现对class加密解密 资源 ...

  8. java中的mod运算_Java源码中Integer类位运算分析

    在这里对源码中Integer的部分位运算方法做一个分析解读.同理,可以比较一下其他Number的子类,对位运算部分的设计和性能有一个理解. 在java中,Integer是int类型的包装类型,占4个字 ...

  9. java 字节 16进制_Java字节数组和16进制字符串的互相转化

    背景基础知识: 1.1. "字符"是由数字来表示的 先来重新了解一下计算机是如何处理"字符"的,这个原理是大家必须记住的,特别是在用JAVA写程序的时候,万万不 ...

最新文章

  1. postgresql select for update 多行加锁顺序_insert into select加锁规则补充
  2. libpcap 源代码分析(二)
  3. 数据结构(C语言实现)勘误
  4. c++开发教程之自定义类型的运算
  5. java replaceall删除中括号和内容_「技术文章」《阿里巴巴 Java 开发手册》精华摘要...
  6. RTMP协议发送H.264编码及AAC编码的音视频,实现摄像头直播
  7. MVC.Net: jqueryval错误
  8. Sql server之常用三表联查举例
  9. 堆栈在DNA计算机中的应用,堆栈和二叉树数据结构在DNA计算机中的设计与实现
  10. 用VS开发PHP扩展
  11. Java+selenium 自动化测试--自动化测试模型介绍
  12. 【SpringBoot_ANNOTATIONS】自动装配 04 Aware 注入Spring底层组件 原理
  13. 公摊面积用计算机怎么计算,公摊面积计算(公摊面积计算器)
  14. 当三代测序遇到肿瘤基因组研究
  15. 极米newz6x、极米new z8x和当贝D3X的区别哪个好
  16. 程序员分析:99%的创业公司都不值得加入
  17. Android搜索控件SearchView的用法
  18. 让OpenAi给我写个JS的set对象的笔记和快速去重方法
  19. c mysql 报表_c 数据库报表打印
  20. B01 - 004、配置联网

热门文章

  1. ELK报错expected block end, but found BlockMappingStart
  2. MySQL的show processlist:正在运行的线程
  3. Go的go-sql-driver/mysql
  4. 转盘抽奖(主要:概率和JQ)
  5. java对象数组删除,Java:如何根据条件从数组中删除对象?
  6. ajax请求 禁用缓存,jQuery ajax缓存禁用无法正常工作?
  7. 2020计算机基础知识考试题及答案,2020年计算机二级公共基础知识考试模拟习题及答案...
  8. 模型与logit_基础方法 | 如何用Logit回归模型写论文?
  9. 我python写的闭包为什么效率很低_GitHub - llzhi001/interview_python_practice: interview 面试题 CS-Notes之ME-技术总结...
  10. mysql function select 赋值_MySql 进阶