Java当中的常量池 在Java虚拟机jvm中,内存分布为:虚拟机堆,程序计数器,本地方法栈,虚拟机栈,方法区. 程序计数器是jvm执行程序的流水线,是用来存放一些指令的,本地方法栈是jvm操作系统方法所使用的栈,而虚拟机栈是用来执行程序代码的栈,在方法区中有类变量,类信息,方法信息,常量池(符号的引用,以表的形式存在的),堆是虚拟机执行程序代码的所用的堆. 常量?是一旦给定了值就无法改变的量,用final修饰的成员变量为常量. 什么是class文件常量池? 我们知道在class文件中,有类的版…
一.引子 在各种教科书和博客中这三者经常被引用,今天复习到内存区域,想起常量池中就是存着字面量和符号引用,其实这三者并不是只在java中才有,各个语言中都有类似的定义,所以做一下总结,以示区分. 二.例子 先举一个简单的例子,就很容易看懂接下来的定义了. int a; //变量 final int b = 10; //b为常量,10为字面量 string str = “hello world!”; // str 为变量,hello world!为字面量 三.各定义以及区分 3.1 变量 有些数据…
运行时常量池是方法区的一部分.class中除了有类的版本,字段,方法,接口等描述信息外,还有一项信息是常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容将在类加载后存放在方法区的运行时常量池中. Java虚拟机对class文件的每一部分(自然也包括常量池)的格式都有严重的规定,每一个字节用于存储哪种数据都必须符合规范上的要求,这样才会被虚拟机认可,装载和执行.但对于运行时常量池,Java虚拟机规范中没有做任何细节的要求.一般来说,除了保存class文件中描述的符号引用外,还会把翻译出来…
1.Integer的常量池 看下面一段代码: package cn.qlq.test; public class ArrayTest { public static void main(String[] args) { Integer i1 = new Integer(1); Integer i2 = new Integer(1); System.out.println(i1.hashCode()); System.out.println(i2.hashCode()); System.out.p…
前言 很多朋友Java的字符串常量池的概念困扰了很长一段时间,最近研究了一下jvm指令码,终于对它有了大概的了解. 在展示案例前,我们需要先搞清楚一个概念,众所周知,jvm的内存模型由程序计数器.虚拟机栈.本地方法栈.堆.元空间(方法区).直接内存组成. 今天我们谈到的概念只和虚拟机栈.堆.元空间(方法区)有关. 先举个例子说明两种关于字符串最基本的使用情况: String s ="abc":在编译期间,会将等号右边的"abc"常量放在常量池中,在程序运行时,会将s…
01-JS中字面量与变量 一.直接量(字面量) 字面量:英语叫做literals,也做直接量,看见什么,它就是什么. (一)数字的字面量 数字的字面量,就是这个数字自己,并不需要任何的符号来界定这个数字. 例如:数字8 就是数字8,没有代表其他值,这就是字面量(需要注意数字也有进制问题) 1.整数 JS中,数字的整数字面量可以有三种进制: 10进制:普通的数字就是十进制 8进制:如果以0.0o.0O开头数字字面量是八进制,八进制只包括数字0-7 16进制:如果以0x,0X开头数字字面量是十六进制…
分享一篇博客:https://blog.csdn.net/yfqnihao/article/details/8289363,本篇有部分参考这篇博客!!! 还是继续说一下java虚拟机,为什么呢?因为我随意翻着别人的博客一不小心看到有关jvm的一点新的东西,挺有趣的,就按照我的理解分享一下: 还记得以前学过一首诗,“看成岭侧成峰,远近高低各不同”,这一句诗的内在含义有的时候真的会让你猛然惊醒,进而如获至宝!的确,有的时候换一个角度看问题,你会发现不一样的世界. 我们平常学java的时候肯定涉及到了…
在class文件中,“常量池”是最复杂也最值得关注的内容. Java是一种动态连接的语言,常量池的作用非常重要,常量池中除了包含代码中所定义的各种基本类型(如int.long等等)和对象型(如String及数组)的常量值还,还包含一些以文本形式出现的符号引用,比如: 类和接口的全限定名: 字段的名称和描述符: 方法和名称和描述符. 在C语言中,如果一个程序要调用其它库中的函数,在连接时,该函数在库中的位置(即相对于库文件开头的偏移量)会被写在程序中,在运行时,直接去这个地址调用函数: 而在Jav…
Java中的字面常量(区别于final创建的有名常量)通常会保存在常量池中,常量池可以理解为像堆一样的内存区域.但是常量池有一个特性就是,如果常量池中已存在该常量将不会再次为该常量开辟内存 还是看个程序: package reverse; public class Reverse { public static void main(String[] args) { String s1="张汉青"; String s2="张汉青"; String s3=new Str…
 Integer a=Integer.valueOf(100); Integer b=Integer.valueOf(100); System.out.println(a==b); Double d1=Double.valueOf(100); Double d2=Double.valueOf(100); System.out.println(d1==d2);    为什么包装类 Ingeter两个值就相等 Double的就不相等了呢 在给Integer赋值时,实际上是自动装箱的过程,也就是调用了…