当前位置: 首页 > 面试题库 >

是否支持在HotSpot JVM中删除压缩字符串?

邵骁
2023-03-14
问题内容

在此Oracle页面Java HotSpot VM
Options上
,它列出-XX:+UseCompressedStrings为可用,并且默认情况下处于启用状态。但是,在Java
6更新29中,默认情况下它处于关闭状态,而在Java 7更新2中,它报告警告。

Java HotSpot(TM) 64-Bit Server VM warning: ignoring option UseCompressedStrings; support was removed in 7.0

有人知道删除此选项的想法吗?

-mx2g在Java 6 update 29中,使用时,此示例花费了4.541秒,而启用了选项则花了5.206秒关闭了它。很难看出它会影响性能。

注意:Java 7 update 2需要2.0 G,而Java 6 update 29不带压缩字符串需要1.8 GB,带压缩字符串仅需要1.0 GB。


问题答案:

最初,添加此选项是为了提高SPECjBB性能。增益的增加是由于处理器和DRAM之间的内存带宽要求降低。与在char []中使用char相比,在byte
[]中加载和存储字节会消耗1/2带宽。

但是,这是有代价的。代码必须确定内部数组是byte []还是char []。这会花费CPU时间,并且如果工作负载不受内存 带宽的
限制,则可能导致性能下降。由于增加了复杂性,因此还有代码维护的价格。

由于没有足够多的类似于生产的工作负载显示出可观的收益(也许SPECjBB除外),因此删除了该选项。

这有另一个角度。该选项减少了堆的使用。对于适用的字符串,它将这些字符串的内存使用量减少1/2。取消期权时未考虑该角度。对于内存 容量
受限的工作负载(即必须在有限的堆空间下运行,GC需要花费大量时间),此选项可能会很有用。

如果可以找到足够的内存 容量来 限制生产型工作负载以证明该选件的合理性,则该选件 可能 会被带回。

编辑3/20/2013:
平均服务器堆转储使用String上25%的空间。大多数字符串都是可压缩的。如果重新引入该选项,则可以节省一半的空间(例如〜12%)!

编辑3/10/2016: 与压缩字符串相似的功能在JDK 9 JEP254中又回来了。



 类似资料:
  • 问题内容: 这在Microsoft SQL Server的T-SQL上是有效的语法,但在SQLite中则无效,在SQLite中是否有相同的替代语法? 问题答案: 通常,将整个联接移到一个子查询中,该子查询查找要删除的行的主键: 如果您有复合主键,则可以使用rowid代替: 如果您有复合主键,并且将该表创建为WITHOUT ROWID 表,则必须将联接重写为相关子查询:

  • 我有一个web应用程序(ruby on rails),它发送一些YAML作为隐藏输入字段的值。 现在我想减小发送到浏览器的文本的大小。什么是传输最少数据的最有效的无损压缩形式?我可以在服务器端承担额外的压缩和解压缩成本。

  • 寻找Apache Commons Compress的替代压缩java库(https://Commons.Apache.org/proper/commons-compress/)。当试图读取使用“enhanced_deflated”(即deflate64)压缩的zip条目时,Commons Compress会引发错误。下面是抛出异常的示例摘录。 下面是堆栈跟踪的相关部分: unsupportedZi

  • 问题内容: 我怀疑这是否是加密,但是找不到更好的短语。 我需要像这样传递一个长查询字符串: 查询字符串不包含任何敏感信息,因此在这种情况下我并不真正担心安全性。只是…好,太长且太丑陋。是否有一个库函数可以让我将查询字符串编码/加密/压缩为类似于md5()的结果(类似于,总是32个字符串),但是可以解码/解密/解压缩? 问题答案: 基本前提是非常困难的。在URL中传输任何值意味着您只能使用ASCII

  • 问题内容: 我使用GZIPOutputStream或ZIPOutputStream压缩了一个字符串(我string.length()小于20),但是压缩后的结果比原始字符串长。 在某个站点上,我发现一些朋友说这是因为我的原始字符串太短,GZIPOutputStream可用于压缩较长的字符串。 因此,有人可以帮我压缩字符串吗? 我的功能是这样的: 更新: 问题答案: 压缩算法几乎总是具有某种形式的空

  • 问题内容: 我在想办法也无法在Java中解压缩String时遇到麻烦。这是我要学习的基本Java类,因此只需要基本命令,没有什么花哨的地方。它能够输入的目标 在命令提示符下,它将打印(就像它压缩参数字符串一样)。 另一个目标是输入 它将打印(就像它将解压缩参数String一样)。减压是我遇到的问题。这是我的代码,非常感谢我得到的任何帮助。 问题答案: Quick Code for you..