JAVA常量池的作用

对常量池有一定的了解,但是感觉没有直观的明白常量池的作用,如果方法区中没有常量池这块内存空间,程序不也可以照常跑么?这个区域的作用到底是什么呢?

仅说一下我认为比较重要的地方, 如果你去看java 字节码, 会看到这种东西:

 279: invokevirtual #127     // Method java/lang/Throwable.addSuppressed:Ljava/lang/Throwable;)V

127 即代表 此class中的一个常量池元素, 如果你去看jvm spec7:

invokevirtual … Description The unsigned indexbyte1 and indexbyte2 are used to construct an index into the run-time constant pool of the current class (§2.6), where the value of the index is (indexbyte1 << 8) | indexbyte2. The run-time constant pool item at that index must be a symbolic reference to a method (§5.1), which gives the name and descriptor (§4.3.3) of the method as well as a symbolic reference to the class in which the method is to be found.

简单说, jvm正是使用 常量池元素 “Method java/lang/Throwable.addSuppressed:Ljava/lang/Throwable;)V” 找到需要调用的 class和方法.

  • mybatis的一个sql问题
  • lucene 检索做到输入一个 “甲” 将甲相关的都检索出来 并且如果 有 “甲" 这个字段 那他排到最前
  • 怎么在服务端(TV)写一串代码 可以扫面到连接在同一WiFi中的手机客户端
  • SpringBoot在Eclipse内能够运行,但是部署在Tomcat8上启动时会有一个logback的异常
  • Java中使用XSD校验XML的问题
  • 对于浏览器后退的控制
  • 中文乱码问题
  • 请解释一下下面的接口中方法的参数
  • 分布式项目工程之间的依赖
  • 怎么在android实现无网络不能打开软件?具体看图【急】
  • Java后台把数据用json发到手机端,里面是map存放的,必须要说明数据的类型?