Java中的String类占用多大的内存
写在前面
对于Java中的String类占用多大的内存空间这个问题,是最近面试中问的比较多的一个问题。很多小伙伴的回答的都不是很正确,有说不占空间的,有说1个字节的,有说2个字节的,有说3个字节的,有说不知道的,更让人哭笑不得的是竟然还有人说是2的31次方。那如果真是这样的话,服务器的内存空间还放不下一个字符串呀!作为程序员的我们,可不能闹这种笑话呀。今天,我们就一起来聊聊Java中的String到底占用多大的内存空间!
Java对象的结构
首先,我们来下Java对象在虚拟机中的结构,这里,以HotSpot虚拟机为例。
Java中的String类型
空String占用的空间
这里,我们以Java8为例进行说明。首先,我们来看看String类中的成员变量。
非空String占用的空间
如果String字符串的长度大于0的话,我们也可以得出String占用内存的计算公式,如下所示。
验证结论
可以看到,使用Jprofiler内存分析工具的结果为:321MB + 96632KB,约等于417MB。之所以使用Jprofiler内存分析工具得出的结果比我们计算的大些,是因为在程序实际运行的过程中,程序内部也会生成一些字符串,这些字符串也会占用内存空间!!
所以,使用Jprofiler内存分析工具得出的结果符合我们的预期。
摘抄自网络,便于检索查找。