分析Java char []和Strings

时间:2011-10-25 09:49:06

标签: java string memory-leaks profiling

我正在分析一个应用程序,并注意到char[]使用了52%(195MB)的内存,String使用了20%。这是一个有很多依赖关系的大型项目,我刚看到它,所以我有几个相关的问题可以帮助我开始:

String s = "some text"是否会创建一个char []?

我注意到有数百String s = new String("some text")没有明显的理由。这是罪魁祸首吗?

1 个答案:

答案 0 :(得分:10)

  

String s =“some text”是否创建了char []?

这不会创建任何对象。

  

我注意到有数百个String s = new String(“some text”)没有明显的原因。这是罪魁祸首吗?

这将创建String的副本,并可能创建char [](两个对象)。仅当String表示另一个字符串的子字符串时才会获取副本。

我会确保你有一个支持-XX:+UseCompressedStrings的Java版本。默认情况下,这在Java的更高版本中是开启的,并允许JVM使用byte[]而不是char[]一半大小。

然而,这些天400 MB并不是那么大,购买更多内存可能是最简单的解决方案。只需120美元即可获得16 GB。