深入探索Java常量池
Java的常量池通常分为两种:静态常量池和运行时常量池
静态常量池:class文件中的常量池,class文件中的常量池包括了字符串(数字)字面值,类和方法的信息,占用了class文件的大部分空间。
运行时常量池:JVM在完成加载类之后将class文件中常量池载入到内存中,并保存在方法区中。平时我们所讲的常量池就是指方法区中的运行时常量池。其相对于CLass文件常量池的另外一个重要特征是具备动态性,Java语言并不要求常量一定只有编译期才能产生,也就是并非预置入CLass文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中,这种特性被开发人员利用比较多的就是String类的intern()方法。
程序计数器:是程序执行的流水线,指示下一条该执行哪条命令。
本地方法栈:JVM调用操作系统方法使用的栈。
虚拟机栈:JVM执行java代码所使用的栈
虚拟机堆:存放对象的地方,在java程序中new出来的对象都存放在堆中。
方法区:存放了常量、类信息、静态变量,可以理解为class文件在内存中存放的位置。
常量池的好处:
常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。
例如字符串常量池,在编译阶段就把所有的字符串文字放到一个常量池中。
节省内存空间:常量池中的所有字面值相同的字符串常量合并,只占用一个空间
节省运行时间:在进行字符串比较时,==比equals()要快。对于两个引用变量,只用==判断引用是否相等,也就可以判断实际值是否相等。
==对于基本数据类型和对象代表的含义是不同的。
对于基本数据类型:==比较的是基本数据类型的数值对于对象:==比较的是对象在内存中的内存地址
8种基本数据类型的包装类和常量池
Java中基本数据类型的包装类大部分都实现了常量池技术,即Byte,Short,Integer,Long,Character,Boolean。
Integer i1 = 40;Integer i2 = 40; System.out.println(i1==i2);//true
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
深入探索Java常量池
下载Word文档到电脑,方便收藏和打印~