相关疑难解决方法(0)

何时在Java中使用StringBuilder

通常认为StringBuilder在Java中使用字符串连接通常是优选的.总是这样吗?

我的意思是:创建一个StringBuilder对象的开销,调用append()方法,最后toString()已经小了,然后将现有的字符串与+运算符连接两个字符串,或者只建议更多(超过两个)字符串?

如果有这样的阈值,它依赖于什么(可能是字符串长度,但以哪种方式)?

最后,您是否会交换+串联的可读性和简洁性,以便StringBuilder在较小的情况下(如两个,三个或四个字符串)的性能?

StringBuilder过时的Java优化技巧以及Java都市神话中,人们提到明确使用常规连接已经过时了.

java string performance

341
推荐指数
6
解决办法
27万
查看次数

为什么将类定义为final会改善JVM性能?

引自http://sites.google.com/site/gson/gson-design-document:

为什么Gson中的大多数课程都被标记为最终?

虽然Gson通过提供可插拔序列化器和反序列化器提供了相当可扩展的架构,但Gson类并未专门设计为可扩展.提供非最终类将允许用户合法地扩展Gson类,然后期望该行为在所有后续修订中工作.我们选择通过将类标记为final来限制这样的用例,并等到出现良好的用例以允许扩展性.标记类final也有一个很小的好处,即为Java编译器和虚拟机提供额外的优化机会.

为什么会这样?[如果我猜测:JVM知道类是最终的,它不维护方法覆盖表?还有其他原因吗?]

性能有什么好处?

这是适用于频率实例化的类(POJO?)还是适用于持有静态方法(实用类)的类?

定义为final的方法在理论上也可以提高性能吗?

有什么影响吗?

谢谢你,马克西姆.

java optimization performance jvm final

42
推荐指数
2
解决办法
1万
查看次数

关于程序员/开发人员的JVM内部的规范性参考

标题很好地反映了我的问题.我想知道有关JVM(不仅仅是HotSpot,但显然是开始的地方)如何实现或处理特定功能的问题是否有良好的资源或跳跃点?我不是在寻找JLSJVM规范中的东西- 我知道先去那里.

例如:在尝试理解性能问题时,我们经常进行的对话不是关于规范的内容,而是实际实现中的当代最佳实践.例如,有一些城市神话说"最终类在Java中表现更好,因为JVM可以内联或以其他方式优化这些东西." 是否有一般资源我们可以转向以评估这些浮动的声明?

我通过HotSpot特定的参考资料回答了我自己的问题.其他供应商的产品呢?小型JVM的细节?多核细节?平台细节,如果它们有所作为?其他JVM语言的细节?

只是为了避免一些潜在的抱怨:1)这不是寻找过早的优化(事实上,更好地理解平台应该劝阻受过良好教育的开发人员!); 2)我知道Java程序员应该专注于漂亮,可移植,随处运行的代码,但对于我们中的许多人而言,平台细节最终会引起关注!

这是通过对一些有用的意见启发的具体问题托尔比约恩Ravn的安德森.我很高兴收集一些其他更有用的例子,超出我上面引用的例子,以激发人们可能想要这些资源的原因.

在SO一些有趣的相关问题:尾部调用优化的JVM,杀手JVM功能,优化,都将是无用的明天,JVM实现之间的差异.

编辑添加: 我将答案提供给所提及的最佳个人参考,或者提供指向网站的指针(可能是为了回答这个问题而建立的),最好地集中/编目JVM实施智慧和实际后果.客户语言和开发人员.

java jvm jvm-languages

12
推荐指数
1
解决办法
1428
查看次数

巨大的XML文件到文本文件

我有一个巨大的XML文件(15 GB).我想将XML文件中的"text"标记转换为单个页面.

示例XML文件:

<root>
    <page>
        <id> 1 </id>
        <text>
        .... 1000 to 50000 lines of text
        </text>
    </page>
    ... Like wise 2 Million `page` tags
</root>
Run Code Online (Sandbox Code Playgroud)

我最初使用DOM解析器,但它会抛出JAVA OUT OF MEMORY(有效).现在,我使用STAX编写了JAVA代码.它运作良好,但性能非常慢.

这是我写的代码:

 XMLEventReader xMLEventReader = XMLInputFactory.newInstance().createXMLEventReader(new FileInputStream(filePath));
    while(xMLEventReader.hasNext()){
      xmlEvent = xMLEventReader.nextEvent();

    switch(xmlEvent.getEventType()){
    case XMLStreamConstants.START_ELEMENT:
    if( element == "text")
      isText    = true;
    break;
    case XMLStreamConstants.CHARACTERS:
      chars = (Characters) xmlEvent;
      if(! (chars.isWhiteSpace() || chars.isIgnorableWhiteSpace()))
               if(isText)
              pageContent += chars.getData() + '\n';
      break;
    case XMLStreamConstants.END_ELEMENT:
      String elementEnd = (((EndElement) xmlEvent).getName()).getLocalPart();
      if( elementEnd == "text" ) …
Run Code Online (Sandbox Code Playgroud)

java xml

9
推荐指数
1
解决办法
581
查看次数

Java最佳实践 - 在一行上进行大数学计算?

我想知道声明多个不需要的变量以使我的代码更具可读性是否合适.以下哪个片段的编码更好?它计算两个质量之间的力.

    // 1
    double dx = xPos - b.xPos;
    double dy = yPos - b.yPos;
    double r = Math.sqrt(dx*dx + dy*dy);
    double F = G * mass * b.mass / (r*r);

    // 2
    double Fx = G * mass * b.mass / Math.pow( Math.sqrt(Math.pow(2,xPos-b.xPos) + Math.pow(2,yPos-b.yPos)), 2);
Run Code Online (Sandbox Code Playgroud)

如何平衡可读性和性能?是否可以在一行中完成评论好吗?

(我意识到Math.pow(Math.sqrt(在第二个例子中可以删除,但这只是一个例子)

java math code-readability

3
推荐指数
1
解决办法
682
查看次数