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

dm建站系统高端家具东莞网站建设技术支持

dm建站系统,高端家具东莞网站建设技术支持,南宁专业网站开发,企业企业网站建设这个知识点也是很多人说不清道不明的地方#xff0c;感觉都知道#xff0c;说又说不出来。为什么会这样呢#xff1f;因为这几个字#xff0c;很容易被当成动词去理解#xff0c;其实正确的理解是当成名词#xff0c;即指令重排现象。那什么时候会产生指令重排现象呢感觉都知道说又说不出来。为什么会这样呢因为这几个字很容易被当成动词去理解其实正确的理解是当成名词即指令重排现象。那什么时候会产生指令重排现象呢两个阶段1、编译期2、运行期。编译期指令重排解释型语言是在运行期间执行编译运行动作所以运行效率较编译型语言低。Java既可以作为解释型语言去用也可以作为编译型语言。但是主流的做法是当成编译型语言在用。那Java在编译期做了指令重排优化吗做了哪些优化能不能让我看看为了满足大家的好奇安排。这里先解释下编译期像c/c只有一个编译期就是调用gcc命令将c/c代码编译成汇编代码。但是Java中有两个编译期1、调用javac命令将Java代码编译成Java字节码2、Unix派系平台上调用gcc命令将openjdk源码编译成汇编代码。网上所有的文章都是在讲第一种而且都是讲概念以讹传讹。我这篇文章不仅两种都讲还都用代码图片的方式证明给你看。所以想学底层不找一个靠谱的师傅是学不会学不明白的因为第一你不知道这个知识点牵扯得有多深第二两个观点摆在你面前你不知道哪个对那个错。这里我先把结论给大家吧编译期间Java中所谓的指令重排主要是说编译openjdk时的指令重排将Java代码编译成Java字节码是没有做指令重排的。即你加不加volatile生成的字节码文件是一样的。是不是颠覆了你对这块的认知呢不信看案例。可能有人要问了如果加不加volatile生成的字节码文件都一个样那在运行的时候JVM是怎么知道的呢类属性在JVM中存储的时候会有一个属性Access flags。JVM在运行的时候就是通过该属性来判断操作的类属性有没有加volatile修饰上图。1、上神秘代码public class Test3 {public static /* volatile */ int found 0;public static void main(String[] args) {new Thread(new Runnable() {public void run() {System.out.println(等基友送笔来...);while (0 found) {}System.out.println(笔来了开始写字...);}}, 我线程).start();new Thread(new Runnable() {public void run() {try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(基友找到笔了送过去...);change();}}, 基友线程).start();}public static void change() {found 1;}}稍微解释下这段代码有两个线程我线程、基友线程。『我线程』通过死循环阻塞在那里等待『基友线程』找到笔送过来然后开始写字。『基友线程』等待一会就去找笔找到了就送过去。2、编译成Java字节码(没加volatile)3、编译成Java字节码(加了volatile)可以发现加不加volatile生成的字节码是一样的。4、编译器优化指令重排是编译器优化中的一种编译openjdk是启用了O2级编译器优化如图。O2级优化做了哪些优化比如优化无效代码、编译期完成简单运算、处理编译期屏障……那gcc有多少级优化有兴趣的童鞋可以自行学习百度搜索关键词-O2。优化无效代码看图(我就不贴C代码了)运行期指令重排不知道大家有没有听过一个词CPU乱序执行。乱序执行是相对于顺序执行来说的。计算机刚被发明的时候都是顺序执行后来为了提升CPU运行效率升级成了乱序执行。那为什么乱序执行就提高了运行效率呢有兴趣的童鞋可以去研究下关键词指令流水线。所以计算机这行如果你觉得大学学的那些基础知识不重要你看我的文章就明白有多重要。这行走到最后较量的就是这些东西就是看谁研究得更深入更底层更明了。因为现在的CPU都是采用乱序执行这样在运行程序的过程中就带来了指令重排的现象。这是在运行期在CPU内部发生的我就没办法证明给你看了。但就算是乱序执行提高了效率那也不能改变我程序的意愿这就引出了一个概念as-if-serial。何谓as-if-serial呢简单的说就是不管你在编译期或者在运行期怎么做指令重排单线程环境下程序的执行结果不能改变。说白了这是指令重排的底线是必须遵守的规范。那如何保证呢这就引出了另外两个难以理解的知识点happens-before、内存屏障。happens-before是做什么的呢简单的说就是告诉写JVM的人你写JVM的时候要遵循这几条规则这几条规则是你JVM默认要做到的而不用程序猿在写代码的时候需要去想去做控制。比如对象的初始化动作一定要先于finalize方法执行前完成。其他几个规则我就不细说了都很好理解童鞋们自行去学习下。有些流程的顺序是可以提前知晓并确定下来但有些流程的顺序是无法提前知晓的比如你公司的业务写JVM的人肯定不知道所以依然需要程序猿根据业务需要来控制那从JVM层面来说我给你提供机制。内存屏障就是这种机制中的一种其他的还有各种锁。关于内存屏障我之前已经写了一篇文章深入讲解了这块有兴趣的同学可以去看看。子牙老师聊聊内存屏障​zhuanlan.zhihu.com结至此指令重排就算讲明白了不晓得童鞋们有么有看明白、理解到位。子牙老师喜欢分析硬核文章都会在个人公众号(启明南)首发。想第一时间获得通知吗那就关注一波吧。
http://www.zqtcl.cn/news/200649/

相关文章:

  • 深圳宝安p2p网站系统的建设百度广告联盟标识
  • 企业网站备案怎么填写东莞市场监督管理局官网
  • 网站建站网站91955内蒙古建设集团招聘信息网站
  • 巴中建设厅网站电话seo是网络优化吗
  • 中国做投资的网站做网站的公司怎么推广
  • 专业的广州微网站建设移动应用开发干什么的
  • 网站运营有什么用常熟智能网站开发
  • 如何组建做网站的团队绍兴网站建设推广
  • 资讯类响应式网站模板深圳网站建设培训机构
  • 电子商务网站功能设计3d动画制作过程
  • 随机网站生成器win7asp+sql server 2008做网站
  • 金本网站建设设计江苏建筑业网
  • 校园网站建设的作用淄博网站建设网站推广优化
  • 域名过期了怎么办怎么找回网站校友录网站开发设计
  • 医疗 企业 网站建设seo网络优化是什么工作
  • e时代速递搜索引擎网站建设aso关键词搜索优化
  • 产品单页营销型网站模板龙华网站建设深圳信科
  • 建网站平台要多少钱投资公司取名字大全
  • 建设网站需要哪些设备重庆本地建站
  • 学做家常菜去那个网站专业制作网站制作
  • 合肥网站建设公网站程序如何上传
  • 潍坊网站建设招聘官方网站建设 在线磐石网络
  • 校友网站建设开一个网站的流程
  • 商业门户网站是什么意思哪家培训机构学校好
  • 青岛企业网站制作seo排名优化培训网站
  • 2018做网站还是app上海搜索seo
  • 网站建设用模板好吗罗湖网站制作费用
  • 网站图片延时加载app推广视频
  • 郑州设计师网站个人搭建网站要多少钱
  • 网站制作成品下载wordpress怎么更改样式