重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
Java的常量池通常分为两种:静态常量池和运行时常量池
创新互联的客户来自各行各业,为了共同目标,我们在工作上密切配合,从创业型小企业到企事业单位,感谢他们对我们的要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。专业领域包括成都网站制作、网站设计、外贸网站建设、电商网站开发、微信营销、系统平台开发。静态常量池:class文件中的常量池,class文件中的常量池包括了字符串(数字)字面值,类和方法的信息,占用了class文件的大部分空间。
运行时常量池:JVM在完成加载类之后将class文件中常量池载入到内存中,并保存在方法区中。平时我们所讲的常量池就是指方法区中的运行时常量池。其相对于CLass文件常量池的另外一个重要特征是具备动态性,Java语言并不要求常量一定只有编译期才能产生,也就是并非预置入CLass文件中常量池的内容才能进入方法区运行时常量池,运行期间也可能将新的常量放入池中,这种特性被开发人员利用比较多的就是String类的intern()方法。
程序计数器:是程序执行的流水线,指示下一条该执行哪条命令。
本地方法栈:JVM调用操作系统方法使用的栈。
虚拟机栈:JVM执行java代码所使用的栈
虚拟机堆:存放对象的地方,在java程序中new出来的对象都存放在堆中。
方法区:存放了常量、类信息、静态变量,可以理解为class文件在内存中存放的位置。
常量池的好处:
常量池是为了避免频繁的创建和销毁对象而影响系统性能,其实现了对象的共享。
例如字符串常量池,在编译阶段就把所有的字符串文字放到一个常量池中。
1.节省内存空间:常量池中的所有字面值相同的字符串常量合并,只占用一个空间
2.节省运行时间:在进行字符串比较时,==比equals()要快。对于两个引用变量,只用==判断引用是否相等,也就可以判断实际值是否相等。
==对于基本数据类型和对象代表的含义是不同的。
对于基本数据类型:==比较的是基本数据类型的数值对于对象:==比较的是对象在内存中的内存地址
8种基本数据类型的包装类和常量池
Java中基本数据类型的包装类大部分都实现了常量池技术,即Byte,Short,Integer,Long,Character,Boolean。
Integer i1 = 40; Integer i2 = 40; System.out.println(i1==i2);//true