【发布时间】:2016-10-28 22:02:49
【问题描述】:
我们即将发布一个网站,该网站一次最多可显示 500 张图片,这些图片存储在亚马逊上。由于 url 使用“http”而不是“https”存储在我们的数据库中,因此每次检索图像 url 时,我都需要将“http”替换为“https”。这是当前代码:
static Pattern p = Pattern.compile("http");
Matcher m = p.matcher(urlSmall);;
String secureUrlSmall = m.replaceFirst("https");
return secureUrlSmall;
我担心的是,创建这么多 String 对象会占用 Java 堆空间。例如,是否有更好的解决方案涉及 StringBuilder?
【问题讨论】:
-
使用
StringBuilder和Matcher的区别在哪里?两者都建立了一个新的String。不管你使用哪一个,因为两者都会用新的String-Objects 污染堆。而且我怀疑对数据库中的值进行简单更新会那么复杂。 -
我非常怀疑这是否重要(与您网站上的其他事情相比,例如与数据库交谈或将 HTML 发送到浏览器)。 FWIW,您不必涉及模式匹配器,一个简单的
return urlSmall.replace("http://", "https://");应该可以。 -
这在我看来是合理的,使用
StringBuilder仍然需要转换为String。 -
return语句的存在表明m是一个本地 变量。因此,匹配器对象将被实例化、使用,然后立即释放,使其可用于垃圾回收。据推测,弦乐也将同样短暂。我在这里看不到任何可能“吃掉”堆空间的东西。 -
在数据库中更新您的网址不是更有意义吗?为什么要保留不正确的 url 并在 Java 中每次更新?
标签: java regex memory jvm heap-memory