当前位置: 首页 > 知识库问答 >
问题:

是否打算对现有的Java平台类(JEP360)进行彻底改造?

闻人飞翼
2023-03-14

Brian Goetz最近在InfoQ上的一篇文章中提到,使stringfinal产生了问题:

我们为这种张力付出代价的一个很好的例子是String;String是不可变的,因此String不能公开扩展,这对于平台的安全性是非常重要的--但是实现具有多个子类型会非常方便。(解决这一问题的成本是相当高的;紧凑的字符串通过对仅由Latin-1字符组成的字符串进行特殊处理,提供了显著的占用空间和性能改进,但是如果String是一个密封类而不是一个final类,那么这样做就会容易得多,成本也会低得多。)

他还提到,使finalsealed向后兼容:

这是一个二进制和源代码兼容的更改,使现有的final类密封。对一个尚未控制所有实现的非final类进行封存,既不兼容二进制,也不兼容源代码。

是否打算回到Java平台中的一些final类,并使它们成为sealed,以获得性能优势(即,使用几个Performation实现,使stringsealed而不是final)?

共有1个答案

鲜于阳
2023-03-14

您要求预测未来,但这听起来有点像您希望有很多类从性能调优中受益。此外,如果需要改进,并不是需要进行密封,而是使用string(例如,string)可以使事情变得更容易。现在密封string就不像10年前密封时那样有用了。

string一直是一种非常特殊和重要的情况,正因为如此,即使在没有密封类的情况下,也对其进行了广泛的调优(或取消调优):内部、共享字符数组、压缩和紧凑字符串。这样做总是有很好的动机,因为从任何内存转储中都可以很清楚地看出,string(或者更确切地说,它的内部char[],在以后的版本中是byte[])是应用程序中占用最多内存的东西。

您认为有一个最终的类真的应该调优,还是您只是假设这些类不是Performanct?或者您希望对代码库进行某种形式的一般性清理,这可能会导致非常低的ROI(考虑到您需要进行更改以获得很可能很少的性能改进,但您需要进行大量的测试)。

此外,其他重要的非字符串类也以不同的方式进行了调优,您有了整数缓存、JVM固有特性和许多其他东西,因此密封并不是主要的(甚至是次要的)性能工具。

 类似资料:
  • 问题内容: 我正在使用Netbeans 6.7。在安装Netbeans之前,我首先安装了Java 1.5。当我安装Netbeans时,它将Java 1.5作为默认版本。然后我在机器上安装了Java 1.6。我不仅需要将Netbeans的默认JDK更改为1.6,不仅要将其更改为特定项目,还要将整个Netbeans应用程序更改为1.6。 问题答案: 您可以通过修改配置文件来更改JDK for Netb

  • 问题内容: TensorFlow图通常从输入到输出逐渐构建,然后执行。查看Python代码,操作的输入列表是不可变的,这表明不应修改输入。这是否意味着无法更新/修改现有图形? 问题答案: TensorFlow类是 仅追加的 数据结构,这意味着您可以在执行图的一部分后将节点添加到图,但不能删除或修改现有节点。由于TensorFlow在您调用时仅执行必要的子图,因此图中没有冗余节点(尽管它们将继续消耗

  • 问题内容: 我在运行于多台计算机上的应用程序中使用Java,并且所有计算机都需要获得相同的数学运算结果。使用Java的浮点原语是否安全?还是应该只使用定点数学库? 问题答案: 一般而言,不。但是,您可以使用表达式: 在FP-strict表达式中,所有中间值都必须是浮点值集或double值集的元素,这意味着所有FP-strict表达式的结果必须是IEEE 754算法对使用单格式和双格式表示的操作数预

  • 问题内容: 我想开发一个跨平台的应用程序。 Java是跨平台的吗?我的意思是,我可以在Windows中开发Java应用程序并在Mac OS X和Linux中使用它吗? 如果是,怎么办? 我发现用Java编写的应用程序有两个安装文件,一个用于Windows,另一个用于Mac。 这使我感到困惑。 任何插图或建议将不胜感激。 问题答案: Java是跨平台的吗? 从某种意义上说,Java是跨平台的, 即已

  • 本文向大家介绍windows10彻底关闭自动更新【绝对可行】,包括了windows10彻底关闭自动更新【绝对可行】的使用技巧和注意事项,需要的朋友参考一下 以下三步必须全做: 1、服务里禁用Windows Update 2、将服务里的Windows Update的恢复设置为无操作 3、删除自动更新的触发器(这个很重要,否则过一段时间自动更新还是会打开的) “Win键 + R”>> 在运行框中输入“

  • 问题内容: 我需要在与另一个Java应用程序分开的JVM中调用.jar文件,它非常占用CPU,因此应以后台优先级运行,以免影响系统的其余部分。有没有跨平台的方法可以做到这一点? 问题答案: 简单的答案是,没有可移植的方法来更改Java中进程的优先级。(线程-是,进程-否。) 如果您的Java应用程序需要启动一个新的JVM来运行CPU密集型应用程序,那么很可能它不是完全可移植的。例如,通常需要提供j