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

网站推广的方案设计怎么写网站关键词设置技巧

网站推广的方案设计怎么写,网站关键词设置技巧,做跨境电商网站的意义,北京 公司网站制作JVM系列整体栏目 内容链接地址【一】初识虚拟机与java虚拟机https://blog.csdn.net/zhenghuishengq/article/details/129544460【二】jvm的类加载子系统以及jclasslib的基本使用https://blog.csdn.net/zhenghuishengq/article/details/129610963【三】运行时私有区域之虚拟机栈…JVM系列整体栏目 内容链接地址【一】初识虚拟机与java虚拟机https://blog.csdn.net/zhenghuishengq/article/details/129544460【二】jvm的类加载子系统以及jclasslib的基本使用https://blog.csdn.net/zhenghuishengq/article/details/129610963【三】运行时私有区域之虚拟机栈、程序计数器、本地方法栈https://blog.csdn.net/zhenghuishengq/article/details/129684076【四】运行时数据区共享区域之堆、逃逸分析https://blog.csdn.net/zhenghuishengq/article/details/129796509【五】运行时数据区共享区域之方法区、常量池https://blog.csdn.net/zhenghuishengq/article/details/129958466【六】对象实例化、内存布局和访问定位https://blog.csdn.net/zhenghuishengq/article/details/130057210【七】执行引擎解释器、JIT即时编译器https://blog.csdn.net/zhenghuishengq/article/details/130088553 深入理解执行引擎解释器、JIT即时编译器 一深入理解执行引擎1执行引擎的概述2Java代码编译和执行的过程2.1解释器和编译器2.2机器码、指令、汇编语言、高级语言2.3解释器和编译器工作机制重点2.4JIT编译器的热点代码和热点探测2.5方法调用计数器和回边计数器2.5.1方法调用计数器2.5.2回边计数器 2.6编译器和解释器设置 一深入理解执行引擎 1执行引擎的概述 在JVM整个体系中执行引擎属于第三层主要用来执行具体的字节码文件。本文主要探讨的就是这个执行引擎。 执行引擎是Java虚拟机核心组成的一部分“虚拟机” 是一个相对于 “物理机” 的一个概念这两种机器都有执行代码的能力其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统的层面上的而虚拟机的执行引擎是由软件自行实现的因此可以不受物理条件制约的指令集与执行引擎的结构体系能够执行那些不被硬件直接支持的格式。java虚拟机可以理解成一个抽象的计算机相较于真正的物理机而言java虚拟机的执行效率会略慢于物理机。 JVM的主要任务是负责装载字节码到其内部但字节码并不能够直接运行在操作系统上面因为字节码指令并非等价于本地机器指令他内部包含的仅仅是一些能够被JVM识别的字节码指令等信息。如下图所示这些字节码指令不能直接在操作系统上解释执行而是需要现通过jvm虚拟机来执行这些字节码指令。 因此执行引擎的主要作用就是将字节码指令解释成或者编译成对应平台上面的本地机器指令 简单的来说JVM中的执行引擎充当了将高级语言翻译成机器语言的翻译者。 执行引擎在执行过程中其需要的具体的字节码指令完全依赖于程序计数器每当完成一项操作指令之后程序计数器就会更新下一条需要被执行的指令地址。在方法的执行全过程中执行引擎有可能会通过存储在局部变量表的对象引用准确的的获取存储在Java堆中的对象实例信息以及通过对象头中的元数据指针定位到目标对象的类型信息。 2Java代码编译和执行的过程 大部分的程序代码在转换成物理机的目标代码或者虚拟机能执行的指令集之前都需要经历过几下几个步骤 前面的黄线流程代表的就是将 .java 文件编译成 .class 文件属于是前端编译 绿色部分属于解释器解释执行的过程即逐行翻译、解释、执行的过程 蓝色部分属于是JIT即时编译器编译性阶段属于是后端编译。 2.1解释器和编译器 解释器当Java虚拟机启动的时候会根据预定义的规范对字节码采用逐行解释的方式执行将每条字节码文件中的内容翻译成对应平台的本地机器指令 JIT编译器jit又名Just In Time Compiler , 就是直接将源代码编译成和本地平台相关的机器语言。 在java语言中是既可以通过解释器来执行代码也可以通过编译器来执行代码的这二者都可以达到相同的目的并且这二者以合作的方式相辅相成取长补短以最合适的方法让Java内部执行的效率更高。JVM虚拟机不仅仅是针对于Java语言只要遵循Jvm虚拟机规范的语言都可以使用JVM虚拟机解释执行。 如上图将不同的语言通过统一处理生成对应的字节码文件然后通过虚拟机中的解释器或者JIT即时编译器对这些字节码进行解释执行然后翻译成对应的字节码指令最后将这些指令全部存储在方法区的CodeCache中。 2.2机器码、指令、汇编语言、高级语言 1机器码 各种用二进制编码方式表示的指令叫做 机器指令码 如通过01010101 这种二进制的方式进行编码最开始人们就用它编写程序这就是 机器语言。机器语言虽然可以被计算机接收但是和人们的语言差别太大不易被人家理解和记忆用它变成也容易出错。用它编写的程序一经输入计算机CPU直接读取运行因此和其他语言的程序执行速度最快。机器指令和CPU紧密相关因此不同类型的CPU所对应的机器指令也就不同。 2指令 由于机器码是由0和1的二进制组成可读性实在是太差于是人们发明了指令。指令就是把机器码特定的 0和1 序列简化成了对应的指令如mov和inc等可读性好。但是由于不同的硬件平台执行同一个操作其对应的字节码可能会不同所以不同硬件平台的同一种指令对应的机器码也可能不同。在不同的硬件平台各自支持各自的指令每个平台所支持的指令总和称之为对应平台的 指令集。 3汇编语言 又由于指令的可读性差于是又发明了这个汇编语言。在汇编语言中用助记符代替机器指令的操作码用地址符号代替指令或者操作数的地址。在不同的硬件平台汇编语言对应着不同的机器语言指令集通过汇编过程转换成机器指令由于计算机只认识指令码所以用汇编语言编写的程序还必须翻译成机器指令码计算机才能识别。 4高级语言 高级语言比上述语言接近人的语言如当今流行的c或者c当计算机执行高级语言的时候仍然需要把程序解释或者编译成机器指令码完成这个过程的程序就叫做解释程序或者编译程序。因此不管是汇编语言还是这个高级语言都需要最终生成这个机器指令然后将这个机器指令放在CPU上面操作最终解释执行。 字节码属于是一种中间状态的二进制代码他比机器码更加抽象需要直译器转译后才能成为机器码与硬件环境无关可以直接通过编译器或者虚拟机器将源码编译成字节码。 2.3解释器和编译器工作机制重点 解释器真正意义上所承担的角色就是一个 “运行时的翻译者”就是将字节码中的内容翻译成对应平台的本地机器指令执行。每当一条字节指令被解释执行完成后接着再根据 程序计数器 中记录的下一条需要被执行的字节码指令执行解释操作。 在JVM平台中也对解释器进行了优化采用了一种JIT 的即时编译的技术目的是避免函数被解释执行而是将整个函数体编译成机器码每次函数执行时只执行编译后的编译码即可这种方式大大的提升了执行效率。 在hotspot虚拟机中JIT即时编译器的速度远快于解释器并且将字节码指令直接生成机器指令存储在这个方法区的CodeCache中缓存起来比这个解释器逐行翻译的效率高很多。因此在今天Java程序的运行性能早以脱胎换骨已经可以达到和c/c程序一较高下的地步。 但是即使这个jit即时编译器的速度很快在HotSpot虚拟机中依旧保留了这个解释器原因是JIT即时编译器虽然效率很高但是需要一定的时间编译成机器码才能继续工作。但是这个编译器在程序启动之后可以立马进行工作省去编译的时间立即执行。 所以综上两点在程序启动的时候JIT需要编译那么就由解释器来执行程序待JIT即时编译器编译成机器码之后再由这个JIT即时编译器来完成这样就能让整个执行引擎发挥最大的效率。因此二者合作共存才能让效率最大化。 2.4JIT编译器的热点代码和热点探测 Java语言的编译器其实是一段不太确定的操作过程因为他可能是一指前端编译器(编译器的前端.java文件编译成 .class文件)的过程也可能是指后端的编译器(JIT编译器将字节码转换成机器码)的过程还有可能是指静态提前编译器直接把 .java 文件编译成本地机器代码的过程。 在使用这个JIT编译器的时候需要判断代码被调用执行的频率对于需要被编译为本地代码的字节码被称为热点代码 JIT编译器在运行时对那些频繁被调用的热点代码会做出深度优化将其直接编译为对应平台的本地机器指令以提升Java程序的执行性能。 热点代码 指的是一个被多次调用的方法或者是一个方法体内部循环次数较多的循环体都可以被称为热点代码。因此可以通过JIT编译器译为本地机器指令由于这种编译方式发生在方法的执行过程中因此也被称为栈上替换。 热点探测方式而是否可以成为这个热点代码主要是依靠这个热点探测功能HotSpot虚拟机主要采用的热点探测方式是基于计数器的热点探测。HotSpot虚拟机又将每个方法建立两个不同类型的计数器分别是方法调用计数器和回边计数器方法调用计数器用于统计方法的调用次数回边计数器用于统计循环体的执行次数。 2.5方法调用计数器和回边计数器 在JIT的热点探测中主要是通过计数器的方式来实现对代码的探测计数器主要分为方法调用计数器和回边计数器。 2.5.1方法调用计数器 这个计数器主要用于统计方法被调用的次数它的默认阈值在Client模式下是1500次在Server模式下是10000次超过这个阈值就会触发JIT编译。这个阈值也可以通过虚拟机参数 -XX:CompileThreshold进行设置。当一个方法被调用的时候会先检查这个方法是否存在被JIT编译过的版本如果存在则优先使用编译后的本地代码来执行如果不存在则将此方法的调用计数器值加1然后判断 方法调用计数器和回边计数器 值的和是否超过方法调用计数器的阈值如果已经超过阈值那么将会向即时编译器提交一个该方法的代码编译请求。 如上图所示在调用方法时会先判断该代码是否已经编译如果已经编译则直接通过这个JIT即时编译器将机器码生成对应的本地机器码指令如果未编译则将方法调用计数器加1随后回去判断是否超过阈值如果超过阈值则会提交编译请求通过JIT即时编译器进行动态编译然后将编译后的机器指令缓存在CodeCache中如果未超过阈值那么继续通过解释器解释执行。 在JVM内部对调用的次数也做了一定的限制并不是说一直对调用的次数进行类加而是在一段时间内记录方法调用的次数当超过一定的时间限度如果方法调用的次数依旧没有达到这个阈值那么方法的调用计数器就会进行一个 衰减 的过程每次衰减一半这段衰减的过程被称为方法统计的 半衰周期 进行衰减的动作是虚拟机在垃圾收集的时候顺便进行的可以使用虚拟机参数 -XX:-UseCounterDecay 来关闭或者开启热度衰减因此只要系统运行的时间足够长那么绝大多数的方法都会编译成本地代码。同时也可以通过参数 -XX:CounterHalfLifeTime 设置半衰周期的时间单位是s 2.5.2回边计数器 主要是统计一个方法中的循环体的执行次数在字节码中遇到流控流向后跳转的指令称为 “回边” 。 和方法调用计数器一样会先判断一下该代码是否已经编译如果未编译则回边计数器的值加1然后去判断将当前累加的值和方法调用计数器的值进行累加是否超过阈值如果超过则使用JIT编译器否则依旧使用解释器执行。 2.6编译器和解释器设置 上述可知在HotSpot虚拟机中存在解释器和编译器如通过以下命令可以得知当前虚拟机采用的是一种混合的方式共同执行程序。 java -version除了这种之外也可以通过显式的命令为Java虚拟机指定只由其中一种执行程序如可以通过以下这个命令设置只使用解释器执行程序 java -Xint -version或者可以通过以下命令只设置使用编译器来执行程序但是如果编译出现问题解释器会接入执行 java -Xcomp -version当然上面这两种需要在特殊的场景下使用需要变回混合使用 java -Xmixed -version除了可以通过这个命令行设置之外也可以通过这个虚拟机参数就行设置其代码如下通过虚拟机的不同参数设置可以得到以下答案纯解释需要花8666ms纯编译只需要花2ms混合使用也是1-2ms因此选择这个混合是最佳的同时也可以知道使用这个纯编译器的时间远远小于这个纯解释型。 /**** -Xint : 8666ms* -Xcomp2ms* -Xmixed: 2ms* author zhenghuisheng* date : 2023/4/11*/ public class C {public static void main(String[] args) {long start System.currentTimeMillis();test();long end System.currentTimeMillis();System.out.println((end - start) ms);}public static void test(){int k 0;for (int i 0; i 1000000; i) {for (int j 0; j 1000; j) {k i j;}}} }在虚拟机设置那里修改对应的参数即可。 而在HotSpot虚拟机中内嵌有两个JIT的编译器分别是Client Compiler和Server Compiler但是在绝大多数的情况下这两个编译器被称为C1编译器和C2编译器。 -client 运行在Client模式下对字节码进行可靠和简单的优化耗时短 -server运行在Server模式下对字节码进行耗时长的优化、激进优化效率更高 C1编译器的优化策略主要有方法内联、去虚拟化、冗余消除 C2编译器的优化策略主要有标量替换、栈上分配、同步消除
http://www.w-s-a.com/news/3458/

相关文章:

  • 无锡网站设计厂家一建十个专业含金量排名
  • 网站刷链接怎么做成都高度网站技术建设公司
  • flash网站模板怎么用xml网站地图生成
  • 英文网站优化群晖wordpress中文
  • saas建站平台源码济南品牌网站建设公司
  • 网站建设一般是用哪个软件网站百度
  • 企业建站的作用是什么南宁公司网站开发
  • 厦门网站建设及维护门户网站开发视频教学
  • 可以做兼职的网站有哪些自动点击器永久免费版
  • 建购物网站怎么建呀网站怎么做中英文交互
  • 网站建设费用计入无形资产做网站用的主机
  • 佛山企业网站建设平台沈阳网站建设培训班
  • 河南企业网站优化外包网站怎么做来流量
  • 网站建设的参考文献网站设计网页的优缺点
  • WordPress多站點支付插件内江市网站建设培训
  • 做做网站已更新动漫制作专业需要学什么
  • dfv印花图案设计网站网站建设应该应聘什么岗位
  • 网站后台管理系统模板下载专业网站推广的公司哪家好
  • 克拉玛依市建设局网站网页设计板式重构
  • 网站新闻专题怎么做湖南营销型网站建设 要上磐石网络
  • 阿里云发布网站成都轨迹公布
  • php网站源码架构谷歌站群系统
  • 潮州网站seowordpress 调用置顶文章
  • 做带会员后台的网站用什么软件旅游网站建设资金请示
  • 商品网站怎么做wordpress 表情拉长
  • 商城网站设计费用网络公司怎样推广网站
  • 视频公司的网站设计工图网
  • 免费快速网站十八个免费的舆情网站