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内存分析工具得出的结果符合我们的预期。
若有收获,请记得三连发,分享,点赞,在看
Java中的String类占用多大的内存相关推荐
- java string占用内存_Java中String到底占用多大的内存空间?
写在前面 对于Java中的String类占用多大的内存空间这个问题,是最近面试中问的比较多的一个问题.很多小伙伴的回答的都不是很正确,有说不占空间的,有说1个字节的,有说2个字节的,有说3个字节的,有 ...
- 【JAVA SE】java中的String类
目录 String类 什么是String类? String类的定义方式 String的内部 如何求字符串长度呢? String类对象的比较 字符串查找 总结charAt 字符串转化 数字与字符串之间的 ...
- Java中的String类为什么不可变
1.什么是不可变? java角度来讲就是说成final的. String不可变如下图: 假设给字符串s赋值为abcd,第二次重新赋值为abcdef,这时候并不是在原内存地址上修改数据,而是重新指向一个 ...
- 搞定Java中的string类
Copyright©Stonee String类在日常的编程工作中所用甚多,这里就string的常用方法和面试题做些记录和说明 1. 概述 看这么一行代码:String str = "abc ...
- 第五章 Java中的String类和StringBuffer(上)
为什么不从第一章开始记录? 因为,博主最近在刷"蓝桥杯"的算法题,题目中遇到了许多和字符串相关的题目. 比如:要求程序对用户输入的串进行处理.具体规则如下: 1. 把每个单词的首 ...
- java中的string类和ArrayList常用方法
Java中String类和ArrayList集合常用方法 String类常用方法 获取字符串的长度 方法很简单,很多数组都是使用这个方法来遍历数组中的元素,直接上代码: //获取字符串的长度 publ ...
- Java中的String类
首先String对象的内容是不可变的,也就是说,String对象在创建出来以后,其中的内容就不可改变了. 1.int length():这个方法用来返回字符串的长度,` String str=&quo ...
- 关于Java中的String类
我们知道String声明的字符串是不能被改变的.那么如果我们使用下面的语句: String str = "Hello" ; str = str + "World!&quo ...
- Java中,String类字符串拼接 用concat方法 和直接用“+”连接符拼接的区别
在String类中,字符串拼接既可以使用concat方法,也可以直接用连接符进行连接,那么两者有什么相同点和不同点呢,下面小编带大家通过代码一起来看一下. concat方法的使用:public Str ...
最新文章
- Google联手Facebook 要在AI研究上搞什么大事?
- SQLer:无需编程语言即可将SQL查询转换为RESTful API的工具
- windows c语言能分配多少内存,Windows下C语言程序的内存布局(内存模型)
- 微信公众平台----带参数二维码生成和扫描事件
- Linux 系统管理员工具集
- Python之Idel利器jupyter notebook
- Catalyst 6509交换机配置方案
- “七层架构”---理论篇
- Go语言爬虫项目将结果写入MySql数据库
- python-day19-面向对象进阶-加载顺序,命名空间,组合(实现松耦合)
- 验证登录信息是否合法
- poj 1815(最小割、割集)
- sci的figure怎么做_一文看懂SCI论文中都有哪几种Figure
- Java字符串查找第一个不重复字符_java如何实现获取字符串中第一个出现不重复的字符...
- linux ftp命令下载目录,linux命令行下的ftp 多文件下载和目录下载
- 用plsql导出oracle,使用PLSQL进行Oracle数据导入导出[转]
- 微信小程序倒计时功能
- 什么是信道编码?信道编码比较
- java毕业设计校园实习管理系统mybatis+源码+调试部署+系统+数据库+lw
- 计算机视觉开篇---读史可以明智