gpt4 book ai didi

java - 设置最大堆大小是否会影响字符串池大小?

转载 作者:行者123 更新时间:2023-12-01 19:27:34 25 4
gpt4 key购买 nike

我有一个 Java 应用程序,它的内存使用情况很奇怪,我注意到内存消耗明显高于最大堆大小(Xmx800m,使用情况是1.4g)。

在此之前最近的变化之一是使用中的唯一字符串大幅增加,所以我想也许我使用的许多字符串在堆外使用了大量内存 - 这可能吗?

我正在运行 java 11。

编辑:

例如,在this article中它提到:

When we create a String object using the new() operator, it always creates a new object in heap memory. On the other hand, if we create an object using String literal syntax e.g. “Baeldung”, it may return an existing object from the String pool, if it already exists.

给人以 2 个不同区域的印象 - 堆和字符串池。

最佳答案

在JDK中,包含内部字符串的字符串池由两部分组成:

  1. 哈希表,在堆外分配并包含对内部字符串的引用。该内存区域在 native 内存跟踪报告中显示为“字符串表”。
  2. 内部字符串内容。这些是 Java 堆中的常规 java.lang.String 对象。

因此,字符串池有堆内部分和堆外部分。堆外部分通常较小,但如果应用程序创建过多的内部字符串,它仍然可能占用大量额外内存。

使用Native Memory Tracking查找字符串表消耗的内存量。

参见this answer查找该进程可能比 -Xmx 占用更多内存的其他原因。

关于java - 设置最大堆大小是否会影响字符串池大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61042987/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com