嘚儿驾...

为什么要有字符串常量池?

我们在开发中,用到的最多的对象,那肯定是 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 就提供了字符串常量池

它存在于堆中,当我们用字面量来创建字符串时,字符串常量池会将其对象引用进行保存。

后面如果创建重复的字符串,字符串常量池就会,直接将池中的引用进行返回。

后面,我们还会看到,各种各样的池,比如线程池,连接池,

池类技术都是为了节省资源和提高性能

posted @ 2022-04-24 22:47  走马!  阅读(235)  评论(0编辑  收藏  举报