【JVM】Class结构之常量池】的更多相关文章

常量池 主要包括下面2类: 字面量(Literal):如int,double,String等: 符号引用(Symbolic Reference): 符号引用 类和接口的全限定名: 字段的名称和描述符: 方法的名称和描述符: 当虚拟机运行时,需要从常量池中获取对应的符号引用,再在类创建时或运行时解析.翻译到具体的内存地址之中: 常量池的项目类型(常量类型) 常量池中常量项的结构总表 说明: 下图中的tag值即上图中的标志值 解析Class文件指令 javap -verbose xxxx 其中xxx…
JVM高级特性与实践(五):实例探究Class类文件 及 常量池 JVM高级特性与实践(六):Class类文件的结构(访问标志,索引.字段表.方法表.属性表集合) JVM高级特性与实践(七):九大类字节码指令集(实例探究 )…
一.虚拟机的构成 虚拟结主要由运行时数据区.执行引擎.类加载器三者构成: 而我们所说的JVM内存模型指的就是运行时数据区,下面具体分析一下运行时数据区: 二.运行时数据区组成和各个区域的作用 我们看到运行时数据区可以分为线程共享和线程不共享两部分,其中堆内存和方法区线程共享,本地方法栈.虚拟机栈.程序计数器线程不共享. 接下来我们介绍每一个区域的作用: 2.1.程序计数器 程序计数器(Program Counter Register),也有称作为PC寄存器.想必学过汇编语言的朋友对程序计数器这个…
基本特性: 方法区的一部分,在方法去中分配,加载泪或者接口后就创建运行时常量区. class文件每一个类或接口的常量池表(constant_pool table)的运行时表现形式, 包括编译期的数值字面量和运行期的方法或者字段引用 ref:class文件结构…
其他博友的不同理解方式:  http://hi.baidu.com/boywell/item/d5ee5b0cc0af55c875cd3cfd 我们先来看一个类 public class javaPTest { /**常量池 * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String i1 = "hello"; String i2="wo…
面试题:String a = "ab"; String b = "a" + "b"; a == b 是否相等 面试考察点 考察目的: 考察对JVM基础知识的理解,涉及到常量池.JVM运行时数据区等. 考察范围: 工作2到5年. 背景知识 要回答这个问题,需要搞明白两个最基本的问题 String a="ab",在JVM中发生了什么? String b="a"+"b",底层是如何实现? JV…
一.intern()定义及使用 相信绝大多数的人不会去用String类的intern方法,打开String类的源码发现这是一个本地方法,定义如下: public native String intern(); 文档告诉我们该方法返回一个字符串对象的内部化引用.关于native方法详解见native关键字(本地方法). java调用so动态链接库 java.lang.String.intern():返回一个保留池字符串,就是一个在全局字符串池中有了一个入口.如果以前没有在全局字符串池中,那么它就会…
JVM(Java Virtual Machine)在研究JVM的过程中会发现,其实JVM本身就是一个计算机体系结构,很多原理和我们平时的硬件.微机原理.操作系统都有十分相似的地方,所以学习JVM本身也是加深自我对计算机结构认识的一个很好的途径. 虽然平时我们用的大多是Sun(已被Oracle收购)JDK提供的JVM,但是JVM本身是一个规范,所以可以有多种实现,除了Hotspot外,还有诸如Oracle的JRockit.IBM的J9也都是非常有名的JVM. 一.JVM结构 下图展示了JVM的主要…
引言   本文将介绍常量池 与 装箱拆箱机制,之所以将两者合在一起介绍,是因为网上不少文章在谈到常量池时,将包装类的缓存机制,java常量池,不加区别地混在一起讨论,更有甚者完全将这两者视为一个整体,给初学者带来不少困扰,我就是过来的.同时,也因为包装类的缓存 与 字符串常量池的思想是一样的,很容易混淆,但是实现方式是不一样的. 一.常量池 在介绍常量池前,先来介绍一下常量.字面常量.符号常量的定义. 常量 可分为 字面常量(也称为直接常量)和 符号常量. 字面常量: 是指在程序中无需预先定义就…
1,java内存模型简介 <深入理解java虚拟机>里将java内存分为如下五个模块: 堆-堆是所有线程共享的,主要用来存储对象. 其中,堆可分为:新生代和老年代两块区域.使用NewRatio参数来设定比例.对于年轻代,一个Eden区和两个Suvivor区,使用参数SuvivorRatio来设定大小: Java虚拟机栈/本地方法栈-线程私有的,主要存放局部变量表,操作数栈,动态链接和方法出口等: pc寄存器(程序计数器)-同样是线程私有的,记录当前线程编译class文件的行号指示器,为线程之间…