为什么需要常量池计数器

83 阅读1分钟

constant_pool_count (常量池计数器)

  • 由于常量池的数量不固定,时长时短,所以需要放置两个字节来表示常量池容量计数值。
  • 常量池容量计数值(u2类型):从1开始,表示常量池中有多少项常量。即constant_pool_count=1表示常量池中有0个常量项。
  • Demo的值为:

常量池计数器1.png 其值为0x0016,掐指一算,也就是22。

需要注意的是,这实际上只有21项常量。索引为范围是1-21。为什么呢?

通常我们写代码时都是从0开始的,但是这里的常量池却是从1开始,因为它把第0项常量空出来了。这是为了满足后面某些指向常量池的索引值的数据在特定情况下需要表达“不引用任何一个常量池项目”的含义,这种情况可用索引值0来表示。

int[] arr = new int[10];
arr[0];
arr[1];
 
ar[10 - 1];