Pattern.compile 是否缓存?

2022-09-04 06:31:52

这可能是一个实现细节,但对于Oracle和IBM JDK来说,至少是缓存编译的模式,还是我们作为应用程序开发人员需要自己执行编译模式的缓存?


答案 1

据我所知,从代码(JDK 6)来看,它不做缓存,但一旦构造,Pattern对象可以缓存在应用程序端并在多个线程之间共享。标准模式似乎是将其分配给最终的静态变量:

private static final Pattern p = Pattern.compile(",");

答案 2

我不相信结果是缓存的,并且在代码文档中没有证据表明这种行为。当然,自己实现这样的缓存是相对微不足道的,但是我会对这种缓存有益的用例感兴趣。

在下面的注释和 String.split() 中,有一种不同的方法,因为代码对琐碎的 1 或 2 个字符模式与更复杂的正则表达式采用不同的路径。但它似乎仍然没有缓存。