写在前面

对于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内存分析工具得出的结果符合我们的预期。

若有收获,请记得三连发,分享点赞在看

Java中的String类占用多大的内存相关推荐

  1. java string占用内存_Java中String到底占用多大的内存空间?

    写在前面 对于Java中的String类占用多大的内存空间这个问题,是最近面试中问的比较多的一个问题.很多小伙伴的回答的都不是很正确,有说不占空间的,有说1个字节的,有说2个字节的,有说3个字节的,有 ...

  2. 【JAVA SE】java中的String类

    目录 String类 什么是String类? String类的定义方式 String的内部 如何求字符串长度呢? String类对象的比较 字符串查找 总结charAt 字符串转化 数字与字符串之间的 ...

  3. Java中的String类为什么不可变

    1.什么是不可变? java角度来讲就是说成final的. String不可变如下图: 假设给字符串s赋值为abcd,第二次重新赋值为abcdef,这时候并不是在原内存地址上修改数据,而是重新指向一个 ...

  4. 搞定Java中的string类

    Copyright©Stonee String类在日常的编程工作中所用甚多,这里就string的常用方法和面试题做些记录和说明 1. 概述 看这么一行代码:String str = "abc ...

  5. 第五章 Java中的String类和StringBuffer(上)

    为什么不从第一章开始记录? 因为,博主最近在刷"蓝桥杯"的算法题,题目中遇到了许多和字符串相关的题目. 比如:要求程序对用户输入的串进行处理.具体规则如下: 1.  把每个单词的首 ...

  6. java中的string类和ArrayList常用方法

    Java中String类和ArrayList集合常用方法 String类常用方法 获取字符串的长度 方法很简单,很多数组都是使用这个方法来遍历数组中的元素,直接上代码: //获取字符串的长度 publ ...

  7. Java中的String类

    首先String对象的内容是不可变的,也就是说,String对象在创建出来以后,其中的内容就不可改变了. 1.int length():这个方法用来返回字符串的长度,` String str=&quo ...

  8. 关于Java中的String类

    我们知道String声明的字符串是不能被改变的.那么如果我们使用下面的语句: String str = "Hello" ; str = str + "World!&quo ...

  9. Java中,String类字符串拼接 用concat方法 和直接用“+”连接符拼接的区别

    在String类中,字符串拼接既可以使用concat方法,也可以直接用连接符进行连接,那么两者有什么相同点和不同点呢,下面小编带大家通过代码一起来看一下. concat方法的使用:public Str ...

最新文章

  1. Google联手Facebook 要在AI研究上搞什么大事?
  2. SQLer:无需编程语言即可将SQL查询转换为RESTful API的工具
  3. windows c语言能分配多少内存,Windows下C语言程序的内存布局(内存模型)
  4. 微信公众平台----带参数二维码生成和扫描事件
  5. Linux 系统管理员工具集
  6. Python之Idel利器jupyter notebook
  7. Catalyst 6509交换机配置方案
  8. “七层架构”---理论篇
  9. Go语言爬虫项目将结果写入MySql数据库
  10. python-day19-面向对象进阶-加载顺序,命名空间,组合(实现松耦合)
  11. 验证登录信息是否合法
  12. poj 1815(最小割、割集)
  13. sci的figure怎么做_一文看懂SCI论文中都有哪几种Figure
  14. Java字符串查找第一个不重复字符_java如何实现获取字符串中第一个出现不重复的字符...
  15. linux ftp命令下载目录,linux命令行下的ftp 多文件下载和目录下载
  16. 用plsql导出oracle,使用PLSQL进行Oracle数据导入导出[转]
  17. 微信小程序倒计时功能
  18. 什么是信道编码?信道编码比较
  19. java毕业设计校园实习管理系统mybatis+源码+调试部署+系统+数据库+lw
  20. 计算机视觉开篇---读史可以明智

热门文章

  1. 计算机组成原理dram例题,计算机组成原理典型例题讲解.doc
  2. 2023西安交通大学软件工程915考研经验帖(初试+复试)
  3. Latex输入罗马数字
  4. 树莓派3B实现软路由过程记录(无线网络通过网线共享给台式机)
  5. 2022-2028年中国锂电池铝塑膜行业市场专项调研及发展策略分析报告
  6. 生活从来不会让你绝望
  7. 实现不同用户登录显示不同页面
  8. python-docx删除段落(含回车符)v202111221750
  9. MP:精神疾病患者和正常发育人群皮层特征的共同模式
  10. 安装jdk14.0.2版本没有jre