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

青岛科友网站建设网络公司网络营销八大职能

青岛科友网站建设网络公司,网络营销八大职能,dede购物网站,wordpress 兼容php7总览 许多多线程代码开发人员都熟悉这样的想法#xff0c;即不同的线程可以对持有的值有不同的看法#xff0c;这不是唯一的原因#xff0c;即如果线程不安全#xff0c;它可能不会看到更改。 JIT本身可以发挥作用。 为什么不同的线程看到不同的值#xff1f; 当您有多个… 总览 许多多线程代码开发人员都熟悉这样的想法即不同的线程可以对持有的值有不同的看法这不是唯一的原因即如果线程不安全它可能不会看到更改。 JIT本身可以发挥作用。 为什么不同的线程看到不同的值 当您有多个线程时它们将尝试例如通过尝试访问同一内存来最小化它们将交互的数量。 为此他们有一个单独的 本地副本例如在1级缓存中。 该缓存通常最终是一致的。 我看到两个线程看到不同值的短时间介于一微秒到十毫秒之间。 最终线程被上下文切换缓存被清除或更新。 无法保证何时会发生这种情况但几乎总是不到一秒钟。 JIT如何发挥作用 Java内存模型说不能保证不是线程安全的字段将看到更新。 这允许JIT进行优化将仅读取而不写入的值有效地内联到代码中。 这意味着即使更新了缓存更改也可能不会反映在代码中。 一个例子 该代码将一直运行直到将布尔值设置为false为止。 static class MyTask implements Runnable {private final int loopTimes;private boolean running true;boolean stopped false;public MyTask(int loopTimes) {this.loopTimes loopTimes;}Overridepublic void run() {try {while (running) {longCalculation();}} finally {stopped true;}}private void longCalculation() {for (int i 1; i loopTimes; i)if (Math.log10(i) 0)throw new AssertionError();} }public static void main(String... args) throws InterruptedException {int loopTimes Integer.parseInt(args[0]);MyTask task new MyTask(loopTimes);Thread thread new Thread(task);thread.setDaemon(true);thread.start();TimeUnit.MILLISECONDS.sleep(100);task.running false;for (int i 0; i 200; i) {TimeUnit.MILLISECONDS.sleep(500);System.out.println(stopped task.stopped);if (task.stopped)break;} } 此代码反复执行一些对内存没有影响的工作。 它唯一的区别是需要多长时间。 通过花费更长的时间它将确定在运行之前或之后将run中的代码优化为false。 如果我使用10或100和-XX PrintCompilation运行此命令则会看到 111 1 java.lang.String::hashCode (55 bytes) 112 2 java.lang.String::charAt (29 bytes) 135 3 vanilla.java.perfeg.threads.OptimisationMain$MyTask :longCalculation (35 bytes) 204 1 % ! vanilla.java.perfeg.threads.OptimisationMain$MyTask :run 0 (31 bytes) stopped false stopped false stopped false stopped false ... many deleted ... stopped false stopped false stopped false stopped false stopped false 如果我用1000运行它您会看到run尚未编译并且线程停止 112 1 java.lang.String::hashCode (55 bytes) 112 2 java.lang.String::charAt (29 bytes) 133 3 vanilla.java.perfeg.threads.OptimisationMain $MyTask::longCalculation (35 bytes) 135 1 % vanilla.java.perfeg.threads.OptimisationMain $MyTask::longCalculation 2 (35 bytes) stopped true 一旦线程被编译即使线程将进行多次上下文切换等更改也永远不会被看到。 如何解决这个问题 简单的解决方案是使该字段易变。 这将确保该字段的值是一致的而不仅仅是最终一致的这就是缓存可能为您执行的操作。 结论 虽然有许多类似的问题示例 为什么我的线程没有停止 答案更多与Java内存模型有关Java内存模型允许JIT“内联”它执行硬件的字段并在不同的缓存中具有多个数据副本。 参考 Vanilla Java博客上的JCG合作伙伴 Peter Lawrey提供的Java内存模型和优化 。 翻译自: https://www.javacodegeeks.com/2013/01/java-memory-model-and-optimisation-2.html
http://www.pierceye.com/news/337955/

相关文章:

  • 申请网站域名怎么做wordpress金融主题
  • 中国建设银行移动门户网站wordpress 生成html代码
  • dw网站建设框架大小设定广州分销商城开发
  • 网站一年的 运营费用一般企业网站建设合同
  • 九龙坡集团网站建设贵阳网站建设推广
  • 架设网站 自己购买服务器无锡seo网站推广费用
  • 网站关键词长度开平 做一网站
  • 青海制作网站可以网站可以做免费的文案广告
  • 深圳维特网站建设有彩虹代刷源码怎么做网站
  • 有了自己的网站怎样做后台食品建设网站前的市场分析
  • 制作伪装网站微餐饮网站建设
  • 泰州做网站软件哈尔滨网站建设市场分析
  • 手机网站建设口碑好网站的技术建设
  • 论坛类网站备案wordpress分享qq
  • 做化工的在哪个网站做平台好长期做网站应该购买稳定的空间
  • 网站建设 推广找山东博达制作网页难吗
  • 临安网站设计海口h5建站模板
  • 网站建设济南云畅网络技术有限公司厦门最新通告
  • ozon电商平台seo关键词搜索和优化
  • 网站收录查询情况科技网站导航
  • 如何做有后台的网站模板网站和定制网站的优劣势对比
  • 在360网站做公告怎么弄南平建设企业网站
  • 网站建设电影动漫制作专业什么电脑最适合
  • 企业做网站公司有哪些wordpress登陆不了一直返回首页
  • 汽车网站建设公司哪家好长春做网站多少钱
  • 雄安移动网站建设php网站用什么软件
  • 网站开发税收分类山东平台网站建设制作
  • 企业自助建站网手机怎么制作钓鱼网站
  • 家乡ppt模板免费下载网站x wordpress 视差 主题
  • 淄博张店外贸建站公司手机微信网页版