我正在分析一个应用程序,并注意到char[]
使用了52%(195MB)的内存,String
使用了20%。这是一个有很多依赖关系的大型项目,我刚看到它,所以我有几个相关的问题可以帮助我开始:
String s = "some text"
是否会创建一个char []?
我注意到有数百String s = new String("some text")
没有明显的理由。这是罪魁祸首吗?
答案 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。