字符串在java中可以保存的最大数据量是多少?

2022-09-01 12:55:36

我知道这可能是一个非常没有兴趣的问题,但我没有找到任何可靠的资源来获取这些信息。

在Android应用程序中,我试图通过继续向字符串附加更多数据来保存数据。最后,当用户关闭应用程序或点击“保存按钮”时,我将其记录到数据.csv文件中。

我想知道一个简单的字符串在java中可以保存多少数据?,以便在String数据类型耗尽分配的内存时应用程序不会崩溃。顺便说一句,我试图对我的应用程序进行压力测试,无论我在一个字符串中存储多少数据,它似乎都可以正常运行。

阿迪特


答案 1

String 类的 length() 方法返回一个 int 值时,该方法返回的最大长度将是 Integer.MAX_VALUE,即 2^31 - 1(或大约 20 亿)。

因此,理论上,您可以拥有一个包含 2,147,483,647 个字符的字符串。我不认为你需要更多。

但是,正如@TedHopp在评论中指出的那样,并在他的答案中发布,Android系统限制了您的堆空间,低至16 MB。因此,您实际上永远无法达到理论极限,并且将使用400-6400万个字符范围内的字符串达到最大值。


答案 2

这可能会受到应用程序可用的堆大小的限制。这可能因手机型号和运营商/电话生产商而异。对于Android设备,此处的答案列出了各种手机型号的最大堆大小;它们的范围从 16 到 256 MB。

请注意,Java 将字符串存储为 UTF-16 代码,因此每个字符占用两个字节。无论是直接追加字符串还是使用StringBuilder(好得多),您偶尔都需要两倍的内存:一个用于存储现有字符串,另一个用于在需要扩展时存储新的字符串/缓冲区。

综合考虑,最大字符串长度可能是400万到6400万个字符,具体取决于手机(远低于理论最大值231-1)。


推荐