为什么要有字符串常量池?
我们在开发中,用到的最多的对象,那肯定是 String 了!
作为使用率最高的对象,java 对其做了两方面的优化。
一方面是使用方式的优化,一方面是性能优化。
使用方式的优化体现在,虽然String 是对象,但可以用 new 来创建。
String s1 = "abc";
String s2 = new String("abc");
我们可以直接使用双引号来创建String 对象,这种方式称为字面量。
两种方式是有区别的。这就是我们接下来要说的java 对 String 做的性能优化。
当我们按照常规方式来创建对象时,即使两个属性完全一致,也会创建多个对象。
Person p1 = new Person(18);
Person p2 = new Person(18);
System.out.pritnln(p1 = p2); // false
如果我们不想这样浪费资源。可以声明静态常量public static final Person PERSON = new Person(18);
但是我要是复用 10000个无规律的对象,难道声明 10000 个静态常量吗?
这时可以将对象放在一个容器中,用的时候再获取。
这就是对象池!
对象池就像一个缓存,可以有效的避免资源重复创建,
一个项目中用到的 String ,或者是框架,包,用到的String 真是太多了。这么高的使用频率和使用数量,碰到相同的字符串,概率不可谓不大。
如果不复用,可想而知,这是多么大的资源浪费啊!
针对这一情况,JVM 就提供了字符串常量池
它存在于堆中,当我们用字面量来创建字符串时,字符串常量池会将其对象引用进行保存。
后面如果创建重复的字符串,字符串常量池就会,直接将池中的引用进行返回。
后面,我们还会看到,各种各样的池,比如线程池,连接池,
池类技术都是为了节省资源和提高性能
本文来自博客园,作者:走马!,转载请注明原文链接:https://www.cnblogs.com/zou-ma/p/16188136.html