我有一个关于在应用程序内存中存储大量字符串的问题.我需要从文件中加载大约5百万行,每行最多255个字符(url),但大多数是〜50.我有时需要搜索其中一个.是否有可能在~1GB的RAM上运行这个应用程序?
将
ArrayList <String> list = new ArrayList<String>();
Run Code Online (Sandbox Code Playgroud)
工作?
据我所知,java中的String是用UTF-8编码的,这给了我巨大的内存使用量.是否可以使用ANSI编码的字符串来生成这样的数组?
这是使用参数运行的控制台应用程序
java -Xmx1024M -Xms1024M -jar "PServer.jar" nogui
Run Code Online (Sandbox Code Playgroud)
Pet*_*rey 10
-XX:+UseCompressedStrings默认情况下,最新的JVM支持存储仅在内部使用ASCII作为byte []的字符串.
列表中有几GB的文本不是问题,但从磁盘加载可能需要一段时间(很多秒)
如果平均URL是50个字符,这些字符是ASCII,每个字符串有32个字节的开销,则5个条目可以使用大约400 MB,这对于现代PC或服务器来说并不多.