我有一个关于在应用程序内存中存储大量字符串的问题。我需要从文件加载并存储大约 500 万行,每行最多 255 个字符(url),但大部分是 ~50。有时我需要搜索其中一个。是否可以在 ~1GB 的 RAM 上运行此应用程序?
将
ArrayList <String> list = new ArrayList<String>();
工作?
据我所知,java 中的字符串是用 UTF-8 编码的,这让我占用了大量内存。是否可以用 ANSI 编码的字符串制作这样的数组?
这是带参数运行的控制台应用程序:
java -Xmx1024M -Xms1024M -jar "PServer.jar" nogui
最佳答案
最新的 JVM 默认支持 -XX:+UseCompressedStrings
,它在内部存储仅使用 ASCII 作为 byte[] 的字符串。
List 中有几 GB 的文本不是问题,但从磁盘加载可能需要一段时间(很多秒)
如果平均 URL 是 50 个 ASCII 字符,每个字符串有 32 字节的开销,则 5 M 条目可能使用大约 400 MB,这对于现代 PC 或服务器来说并不多。
关于java - Java中的巨大字符串表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7378142/