分析Java char []和Strings

Mic*_*ael 7 java string profiling memory-leaks

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

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

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

Pet*_*rey 10

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

这不会创建任何对象.

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

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

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

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

  • `new String()`在99.9%的时间内不是必需的. (2认同)