当前位置: 首页 > news >正文

微信网站平台怎么建立怎么做网站的内部链接

微信网站平台怎么建立,怎么做网站的内部链接,网站建站的尺寸,手机模板网站下载java字符连接字符串数组最近有人问我这个问题–在Java中使用运算符连接字符串是否对性能不利#xff1f; 这让我开始思考Java中连接字符串的不同方法#xff0c;以及它们如何相互对抗。 这些是我要研究的方法#xff1a; 使用运算符 使用StringBuilder 使用StringBuffer… java字符连接字符串数组 最近有人问我这个问题–在Java中使用运算符连接字符串是否对性能不利 这让我开始思考Java中连接字符串的不同方法以及它们如何相互对抗。 这些是我要研究的方法 使用运算符 使用StringBuilder 使用StringBuffer 使用String.concat() 使用String.join String.join新增功能 我还尝试了String.format()但是它是如此缓慢以至于我暂时不在本文中介绍。 在继续之前我们应该分离两个用例 将两个字符串串联在一起作为一个调用例如在日志消息中。 由于这只是一个电话您可能会认为性能几乎不是问题但结果仍然很有趣并且可以阐明该主题。 在一个循环中连接两个字符串。 在这里性能更是一个问题尤其是当循环很大时。 我最初的想法和问题如下 运算符是用StringBuilder实现的因此至少在连接两个String的情况下它应产生与StringBuilder类似的结果。 幕后到底发生了什么 在所有类的设计目的都是为了连接Strings并取代StringBuffer之后StringBuilder应该是最有效的方法。 但是与String.concat相比创建StringBuilder的开销是多少 StringBuffer是连接字符串的原始类–不幸的是其方法是同步的。 确实不需要同步随后它被不同步的StringBuilder代替。 问题是JIT是否优化了同步 String.concat应该适用于2个字符串但是在循环中是否可以正常工作 String.join比StringBuilder具有更多的功能如果我们指示它使用空的定界符来连接String它将如何影响性能 我要解决的第一个问题是运算符的工作方式。 我一直都知道它在幕后使用了StringBuilder但是要证明这一点我们需要检查字节码。 如今 查看字节码最简单的方法是使用JITWatch 这是一个非常出色的工具旨在了解JIT如何编译您的代码。 它有一个很棒的视图您可以在其中与字节码如果要转到该级别还可以是机器码并排查看源代码。 这是一个非常简单的方法plus2的字节码我们可以看到确实在第6行上创建了一个StringBuilder并附加了变量a第14行和b第18行。 我认为将其与StringBuffer的手工使用进行比较会很有趣因此我创建了另一个方法build2结果如下。 此处生成的字节码不如plus方法那么紧凑。 StringBuilder存储在变量高速缓存中第13行而不是仅留在堆栈上。 我不知道为什么会这样但是JIT也许可以做到这一点我们将不得不看看时机如何。 无论如何如果用plus运算符和StringBuilder将2个字符串连接在一起的结果显着不同那将是非常令人惊讶的。 我写了一个小型的JMH测试来确定不同方法的执行方式。 首先让我们看一下两个Strings测试。 参见下面的代码 package org.sample;import org.openjdk.jmh.annotations.*; import org.openjdk.jmh.infra.Blackhole;import java.util.UUID; import java.util.concurrent.TimeUnit;Warmup(iterations 5, time 1, timeUnit TimeUnit.SECONDS) Measurement(iterations 5, time 1, timeUnit TimeUnit.SECONDS) Fork(1) State(Scope.Thread) public class LoopStringsBenchmark {private String[] strings;Setuppublic void setupTest(){strings new String[100];for(int i 0; i100; i) {strings[i] UUID.randomUUID().toString().substring(0, 10);}}Benchmarkpublic void testPlus(Blackhole bh) {String combined ;for(String s : strings) {combined combined s;}bh.consume(combined);}Benchmarkpublic void testStringBuilder(Blackhole bh) {StringBuilder sb new StringBuilder();for(String s : strings) {sb.append(s);}bh.consume(sb.toString());}Benchmarkpublic void testStringBuffer(Blackhole bh) {StringBuffer sb new StringBuffer();for(String s : strings) {sb.append(s);}bh.consume(sb.toString());}Benchmarkpublic void testStringJoiner(Blackhole bh) {bh.consume(String.join(, strings));}Benchmarkpublic void testStringConcat(Blackhole bh) {String combined ;for(String s : strings) {combined.concat(s);}bh.consume(combined);} } 结果如下 显而易见的赢家是String.concat。 毫不奇怪因为它不必为每次调用创建StringBuilder / StringBuffer而付出性能损失。 虽然确实需要每次都创建一个新的String这将在以后变得很重要但是对于连接两个Sting的非常简单的情况它更快。 另一点是尽管产生了额外的字节码但正如我们预期的那样plus和StringBuilder是等效的。 StringBuffer仅比StringBuilder慢一点这很有趣这表明JIT必须做一些魔术来优化同步。 下一个测试将创建一个100个字符串的数组每个字符串包含10个字符。 基准测试比较了将100个字符串连接在一起的不同方法所花费的时间。 参见下面的代码 这次的结果看起来完全不同 在这里加号方法确实遭受了损失。 每当您遍历循环时创建StringBuilder的开销就会减少。 您可以在字节码中清楚地看到这一点 您可以看到每次执行循环时都会创建一个新的StringBuilder第30行。 JIT应该发现这一点并能够对其进行优化是有争议的但是事实并非如此使用变得非常慢。 同样StringBuilder和StringBuffer的性能完全相同但是这次它们都比String.concat快。 String.concat在循环的每次迭代中创建新的String所付出的代价最终会增加并且StringBuilder变得更加高效。 给定可以添加到此方法的所有其他功能String.join的效果非常好但是正如预期的那样对于纯串联而言它不是最佳选择。 摘要 如果要在单行代码中连接字符串则我将使用运算符因为它最易读并且对于单个调用而言性能实际上并不重要。 还要提防String.concat因为您几乎肯定会需要执行空值检查 而其他方法则不需要这样做。 在循环中连接字符串时应使用StringBuilder。 您可以使用StringBuffer但我不一定在所有情况下都信任JIT来像基准测试中那样高效地优化同步。 我的所有结果都是使用JMH取得的并且都带有通常的健康警告 。 翻译自: https://www.javacodegeeks.com/2015/02/optimum-method-concatenate-strings-java.htmljava字符连接字符串数组
http://www.zqtcl.cn/news/790040/

相关文章:

  • 个人空间网站建设报告建站是什么东西
  • 好看的模板网站建设西安网站模板建站
  • 建设网站二级子页打不开广告设计平面设计培训班
  • 网站公司做网站要多少钱新乡
  • 天津谁做网站莱芜人才网招聘网
  • 学做网站的书籍自己做网站 最好的软件
  • 手机网站专题电商入门视频教程免费
  • aspx网站模板制作网页常用的软件有哪些
  • 网站主关键词湖南网站定制
  • 长沙seo网站排名优化公司进入秦皇岛最新规定
  • 企业网站优化平台宝山北京网站建设
  • 给人做代工的网站加盟代理网
  • 网站建设用dw电脑谷歌浏览器打开是2345网址导航
  • 做外贸一般总浏览的网站太原的网站建设公司哪家好
  • 台州建网站公司wordpress 用微信登陆
  • 广州白云网站建设家在深圳业主
  • 呼和浩特网站建设哪家最便宜?携程旅行网网站策划书
  • 网站建设及相关流程北京网站备案域名
  • 汉字叔叔花了多少钱做网站微商城科技
  • 网站代理被抓html网站开发实战
  • 如何建立免费的网站网站copyright写法
  • 官方网站下载12306合肥有没有做网站的单位
  • 甘露园网站建设网站框架图片
  • 做网站怎样赚卖流量石家庄网站建设联系电话
  • wordpress 图片网站本地免费发布信息网站
  • 建设网站和别人公司重名新乡建设招标投标网站
  • 四川省建设厅网站证想开个网站怎样开公司
  • 做机械一般做那个外贸网站电商软件开发费用
  • 网站外链坏处龙岗网站设计信息
  • 郑州网站建设乙汉狮网络搜索优化网络推广