当前位置: 首页 > 知识库问答 >
问题:

Java中字符串的内存使用

夏奕
2023-03-14

我在Java中有一个包含字符串的对象。我很好奇字符串的内存使用是如何工作的。我试图优化我的程序的内存使用,应用程序将有大约10000个这样的对象。对于像“Hello World”这样的字符串,内存使用量是多少?

共有1个答案

邓驰
2023-03-14

Java每个字符使用两个字节*,因此需要将字符数乘以2才能得到大致的近似值。除了“有效负载”的存储之外,您还需要考虑分配给字符串引用的空间(通常等于目标体系结构上指针的大小)、字符串长度的空间(即int)和缓存的哈希代码的空间(即另一个int)。

因为“Hello World”有11个字符长,所以我估计它的大小在32位指针的计算机上为2*11+4+4+4=34字节,或者在64位指针的计算机上为2*11+8+4+4=38字节。

注意:这个估计值没有考虑字符串常量的影响。当一个字符串被存储时,所有对被存储字符串的引用共享相同的有效负载,因此每个被存储字符串的附加实例的额外内存是一个引用的大小(即目标体系结构上的指针大小)。

 类似资料:
  • 问题内容: 我正在使用 map [string] string 优化代码,其中 map 的值仅为“ A”或“ B”。因此,我认为显然, map [string] bool 更好,因为该地图可容纳约5000万个元素。 结果是: 在测试时,我发现有些奇怪,为什么带有很长字符串的 a2 使用8个字节,就像 一个 只有一个字母一样? 问题答案: 不会递归地进入数据结构,它只是报告传递的值的“浅”大小。引用

  • 问题内容: 我有大量的名称-值对(大约100k),我需要将它们存储在某种高速缓存(例如哈希映射)中,其中值是一个平均大小约为30k字节的字符串。 现在我知道一个事实,大量的值具有完全相同的字符串数据。为了避免多次分配相同的字符串数据,我想以某种方式重用以前分配的字符串,从而减少内存消耗。另外,这需要相当快。即,不能一一扫描所有先前分配的值。 关于如何解决此问题的任何建议? 问题答案: 千万 不能

  • 问题内容: 我的长字符串不适合屏幕的宽度。例如。 为了使阅读更容易,我想到了用这种方式编写它- 但是,我意识到第二种方法使用字符串连接,并会在内存中创建5个新字符串,这可能会导致性能下降。是这样吗 还是编译器足够聪明,以至于我只需要一个字符串就可以了?我如何避免这样做? 问题答案: 我意识到第二种方法使用字符串连接,并将在内存中创建5个新字符串,这可能会导致性能下降。 不,不会。由于这些是字符串文

  • 每个人都知道这一点。Net framework字符串对象直接存储在堆内存中 我只是想弄清楚里面是否有保留的记忆。Net字符串框架。在java中,有一个为字符串保留的内存,称为SCMP(字符串常量内存池),在这里字符串被初始化和垃圾收集,就像堆内存中的其他对象一样。

  • 我在做一个作业,我得到了下面这个问题。 使用方法创建的字符串对象存储在内存中的哪里? 在恒定池中 在堆上(新操作员对象的区域)

  • 我最近读了很多关于字符串内存分配的文章,但找不到任何细节,如果在Java8中情况相同的话。 在Java8中,像这样的字符串会使用多少内存空间?我使用64位版本。