java - Java中的巨大字符串表

标签 java string

我有一个关于在应用程序内存中存储大量字符串的问题。我需要从文件加载并存储大约 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/

相关文章:

java - 正则表达式 "("和 ")"是必要的吗?

java - 从实体列表中获取@OneToMany的有效方法

c - C中字符串的所有可能组合

c++ - 使用 c_str() 返回的指针删除动态分配的 std::string 是否会导致 C++ 中的内存泄漏?

Java,计算字符串时的逻辑错误

java - 亚马逊网络服务 - API 网关

java - 代号一 SQLite 数据问题

java - 是否有可能违反规则: If the super class method declares an exception then subclass overridden method cannot declare parent exception?

c - LuaJit FFI 从 C 函数返回字符串到 Lua?

.net - 如何从 VB.NET 中的枚举中获取描述?