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

电视网站免费大全thinkphp 大型网站开发

电视网站免费大全,thinkphp 大型网站开发,源码网站取名,阿里云wordpress帮助优质博文#xff1a;IT-BLOG-CN 一、简介 JIT与AOT的区别#xff1a; 两种不同的编译方式#xff0c;主要区别在于是否处于运行时进行编译。 JIT:Just-in-time动态(即时)编译#xff0c;边运行边编译#xff1a;在程序运行时#xff0c;根据算法计算出热点代码#xf… 优质博文IT-BLOG-CN 一、简介 JIT与AOT的区别 两种不同的编译方式主要区别在于是否处于运行时进行编译。 JIT:Just-in-time动态(即时)编译边运行边编译在程序运行时根据算法计算出热点代码然后进行JIT实时编译这种方式吞吐量高有运行时性能加成可以跑得更快并可以做到动态生成代码等但是相对启动速度较慢并需要一定时间和调用频率才能触发JIT的分层机制。JIT缺点就是编译需要占用运行时资源会导致进程卡顿。 AOT:Ahead Of Time指运行前编译预先编译AOT编译能直接将源代码转化为机器码内存占用低启动速度快。无需runtime运行直接将runtime静态链接至最终的程序中但无运行时性能加成不能根据程序运行情况做进一步的优化AOT缺点就是在程序运行前编译会使程序安装的时间增加。 JIT即时编译指的是在程序的运行过程中将字节码转换为可在硬件上直接运行的机器码并部署至托管环境中的过程。而AOT编译指的则是在程序运行之前便将字节码转换为机器码的过程。 .java - .class - (使用jaotc编译工具) - .so程序函数库,即编译好的可以供其他程序使用的代码和数据二、JIT 在HotSpot虚拟机中内置了两种JIT分别为C1编译器和C2编译器这两个编译器的编译过程是不一样的。 【1】C1编译器C1编译器是一个简单快速的编译器主要的关注点在于局部性的优化适用于执行时间较短或对启动性能有要求的程序也称为Client Compiler。 【2】C2编译器C2编译器是为长期运行的服务器端应用程序做性能调优的编译器适用于执行时间较长或对峰值性能有要求的程序也称为Server Compiler例如服务器上长期运行的Java应用对稳定运行就有一定的要求。JDK 6开始定义服务器级别的机器是至少有两个CPU和2GB的物理内存才开启C2 【3】分层编译 在Java8中默认开启分层编译在1.8之前分层编译默认是关闭的。在Java7之前需要根据程序的特性来选择对应的JIT虚拟机默认采用解释器和其中一个编译器配合工作。 分层编译将JVM的执行状态分为了5个层次 【1】第 0 层程序解释执行默认开启性能监控功能Profiling如果不开启可触发第二层编译 【2】第 1 层可称为C1编译将字节码编译为本地代码进行简单、可靠的优化不开启Profiling 【3】第 2 层也称为C1编译开启Profiling仅执行带方法调用次数和循环回边执行次数profiling的C1编译 【4】第 3 层也称为C1编译执行所有带Profiling的C1编译 【5】第 4 层可称为C2编译也是将字节码编译为本地代码但是会启用一些编译耗时较长的优化甚至会根据性能监控信息进行一些不可靠的激进优化。 mixed mode代表是默认的混合编译模式除了这种模式外我们还可以使用-Xint参数强制虚拟机运行于只有解释器的编译模式下这时JIT完全不介入工作也可以使用参数-Xcomp强制虚拟机运行于只有JIT的编译模式下。如下 如果只想开启C2可以关闭分层编译-XX:-TieredCompilation如果只想用C1可以在打开分层编译的同时使用参数-XX:TieredStopAtLevel1 C1、C2和C1C2分别对应client、server和分层编译。C1编译速度快优化方式比较保守C2编译速度慢优化方式比较激进。C1C2在开始阶段采用C1编译当代码运行到一定热度之后采用G2重新编译。 参数-XX:ReservedCodeCacheSize N(其中N是为特定编译器提供的默认值)主要设置热点代码缓存codecache的大小。如果缓存不够则JIT无法继续编译并且会去优化比如编译执行改为解释执行由此性能会降低。同时可以通过java -XX:PrintCodeCache查看codecache的使用情况 C:/Users/Administrator java -XX:PrintCodeCache CodeCache: size245760Kb used1165Kb max_used1165Kb free244594Kbbounds [0x000000010be1b000, 0x000000010c08b000, 0x00000011ae1b000]total_blobs293 nmethods48 adapters159compilation: enable相关参数 参数默认值说明-XX:InitialCodeCacheSize2555904240M默认的CodeCache区域大小单位为字节-XX:ReservedCodeCacheSize251658240240MCodeCache区域的最大值单位为字节-XX:CodeCacheExpansionSize6553664KCodeCache每次扩展大小单位为字节-XX:ExitOnFullCodeCachefalse当CodeCache区域满了的时候是否退出JVM-XX:UseCodeCacheFlushingfalse是否在关闭JIT编译前清除CodeCache-XX:MinCodeCacheFlushingInterval30刷新CodeCache的最小时间间隔 单位为秒-XX:CodeCacheMinimumFreeSpace512000当CodeCache区域的剩余空间小于参数指定的值时停止JIT编译。剩余的空间不会再用来存放方法的本地代码, 可以存放本地方法适配器代码-XX:CompileThreshold10000指定方法在在被JIT编译前被调用的次数-XX:OnStackReplacePercentage140该值为用于计算是否触发OSROnStackReplace编译的阈值 如何判断热点代码 【1】基于采样的热点探测 主要是虚拟机会周期性的检查各个线程的栈顶若某个或某些方法经常出现在栈顶那这个方法就是“热点方法”。优点是实现简单。缺点是很难精确一个方法的热度容易受到线程阻塞或外界因素的影响。 【2】基于计数器的热点探测(典型应用-Hotspot) 主要就是虚拟机给每一个方法甚至代码块建立了一个计数器统计方法的执行次数超过一定的阀值则标记为此方法为热点方法。Hotspot使用的基于计数器的热点探测方法。然后使用了两类计数器方法调用计数器和回边计数器。当方法计数器和回边计数器之和超过方法计数器阈值时就会触发JIT编译器。 【3】方法调用计数器 方法调用计数器用于统计方法被调用的次数默认阈值在C1模式下是1500次在C2模式在是10000次可通过-XX: CompileThreshold来设定而在分层编译的情况下-XX: CompileThreshold指定的阈值将失效此时将会根据当前待编译的方法数以及编译线程数来动态调整。 【4】回边计数器 回边计数器用于统计一个方法中循环体代码执行的次数在字节码中遇到控制流向后跳转的指令称为“回边”Back Edge该值用于计算是否触发C1编译的阈值在不开启分层编译的情况下C1默认为13995C2默认为10700可通过-XX: OnStackReplacePercentageN来设置而在分层编译的情况下-XX: OnStackReplacePercentage指定的阈值同样会失效此时将根据当前待编译的方法数以及编译线程数来动态调整。 回边计数器阈值计算规则 1、C1模式下CompileThreshold*OnStackReplacePercentage/100;即方法调用计数器阈值*OSR比率/100; 2、C2模式下CompileThreshold*OnStackReplacePercentage-InterpreterProfilePercentage/100即方法调用计数器阈值*OSR比率 - 解释器监控比率/100; JIT优化 JIT编译运用了一些经典的编译优化技术来实现代码的优化主要有两种方法内联和逃逸分析。 【1】方法内联 方法内联的优化行为就是把目标方法的代码复制到发起调用的方法之中避免发生真实的方法调用。方法内联不仅可以消除调用本身带来的性能开销还可以进一步触发更多的优化。 private int add1(int s1, int s2, int s3, int s4) {return add2(s1s2) add2(s3s4);}private int add2(int s1, int s2) {return s1s2;} // 方法内联后的代码private int add(int s1, int s2, int s3, int s4) {return s1s2s3s4;}提高方法内联的策略调整参数写小方法使用static、final关键字不用出现方法继承没有额外的类型检查就可能发生内联 【2】锁消除 如果是在单线程环境下JIT编译会对这个对象的方法锁进行锁消除jdk1.8默认开启。例如 //-XX:-EliminateLocks 先关闭锁消除 再打开 执行此段代码100万次查看差别很大public static String getString(String s1, String s2) {StringBuffer sb new StringBuffer();sb.append(s1);sb.append(s2);return sb.toString();}【3】标量替换 逃逸分析证明一个对象不会被外部访问如果这个对象可以被拆分的话当程序真正执行的时候可能不创建这个对象可以直接创建它的成员变量来代替前提要开启逃逸分析jdk1.8默认开启逃逸分析-XX:DoEscapeAnalysis; -XX:EliminateAllocations开启标量替换jdk1.8默认开启。 public void foo() {Person info new Person ();info.name queen;info.age 18; }//逃逸分析后代码会被优化(标量替换)为 public void foo() {String name queen;int age 18; }三、AOT 优点 Java虚拟机加载已经预编译成二进制库可以直接执行。不必等待及时编译器的预热减少Java应用给人带来“第一次运行慢” 的不良体验。在程序运行前编译可以避免在运行时的编译性能消耗和内存消耗。可以在程序运行初期就达到最高性能程序启动速度快。运行产物只有机器码打包体积小。 缺点 由于是静态提前编译不能根据硬件情况或程序运行情况择优选择机器指令序列理论峰值性能不如JIT没有动态能力同一份产物不能跨平台运行。第一种即时编译JIT是默认模式Java Hotspot虚拟机使用它在运行时将字节码转换为机器码。后者提前编译AOT由新颖的GraalVM编译器支持并允许在构建时将字节码直接静态编译为机器码。 现在正处于云原生降本增效的时代Java相比于Go、Rust等其他编程语言非常大的弊端就是启动编译和启动进程非常慢这对于根据实时计算资源弹性扩缩容的云原生技术相冲突Spring6借助AOT技术在运行时内存占用低启动速度快逐渐的来满足Java在云原生时代的需求对于大规模使用Java应用的商业公司可以考虑尽早调研使用JDK17通过云原生技术为公司实现降本增效。 Graalvm Spring6支持的AOT技术底层通过GraalVM支持Spring也对GraalVM本机映像提供了一流的支持。GraalVM是一种高性能JDK旨在加速用Java和其他JVM语言编写的应用程序的执行同时还为JavaScript、Python和许多其他流行语言提供运行时。GraalVM提供两种运行 Java应用程序的方法在HotSpot JVM上使用Graal即时JIT编译器或作为提前AOT编译的本机可执行文件。GraalVM的多语言能力使得在单个应用程序中混合多种编程语言成为可能同时消除了外部调用成本。GraalVM向HotSpot Java虚拟机添加了一个用Java编写的高级即时JIT优化编译器。 GraalVM具有以下特性 【1】一种高级优化编译器它生成更快、更精简的代码需要更少的计算资源 【2】AOT本机图像编译提前将Java应用程序编译为本机二进制文件立即启动无需预热即可实现最高性能 【3】Polyglot编程在单个应用程序中利用流行语言的最佳功能和库无需额外开销 【4】高级工具在Java和多种语言中调试、监视、分析和优化资源消耗 Native Image 目前业界除了这种在JVM中进行AOT的方案还有另外一种实现Java AOT的思路那就是直接摒弃JVM和C/C一样通过编译器直接将代码编译成机器代码然后运行。这无疑是一种直接颠覆Java语言设计的思路那就是GraalVM Native Image。它通过C语言实现了一个超微缩的运行时组件Substrate VM基本实现了JVM的各种特性但足够轻量、可以被轻松内嵌这就让Java语言和工程摆脱JVM的限制能够真正意义上实现和C/C一样的AOT编译。这一方案在经过长时间的优化和积累后已经拥有非常不错的效果基本上成为Oracle官方首推的Java AOT解决方案。 Native Image是一项创新技术可将Java代码编译成独立的本机可执行文件或本机共享库。在构建本机可执行文件期间处理的Java字节码包括所有应用程序类、依赖项、第三方依赖库和任何所需的JDK类。生成的自包含本机可执行文件特定于不需要JVM的每个单独的操作系统和机器体系结构。 Native Image 构建过程 下载GraalVM 并配置环境变量将JAVA_HOME修改为graalvm的位置并将Path修改为graalvm的bin位置。 变量名JAVA_HOME 变量值D:\graalvm-ce-java17-22.3.0检查是否安装成功 C:/Users/Administratorjava -version openjdk version 17.0.5 2023-10-32 OpenJDK Runtime Environment GraalVM CE 22.3.0 (build 17.0.58-jvmci-22.3-b08) OpenJDK 64-Bit Server VM GraalVM CE 22.3.0 (build 17.0.58-jvmci-22.3-b08, mixed mode, sharing)通过gu install native-image安装native-image插件并通过gu list检查版本 C:/Users/Administratorgu install native-image ...... C:/Users/Administratorgu list ...... native-image 22.3.0 Native Image Early adopter对比 通过javac xx.java和native-image xx构建文件其中包含了SVM和JDK各种库后的大小虽然相比C/C的二进制文件来说体积偏大但是对比完整JVM来说可以说是已经是非常小了。 相比于使用JVM运行Native Image的速度要快上不少cpu占用也更低一些从官方提供的各类实验数据也可以看出Native Image对于启动速度和内存占用带来的提升是非常显著的
http://www.tj-hxxt.cn/news/133708.html

相关文章:

  • 各种网站建设报价石家庄网站建设公司
  • 哪家手表网站上海网站建设收费标准
  • 海南住房与建设厅网站建企业网站多少钱
  • 营销型网站建设需要备案吗django做网站
  • 网站建设捌金手指花总十二凡科建站登录界面
  • 网站建设方案书生鲜WordPress程序主题转为app
  • 城建公司建设网站基础资料制作网页网站哪个好用
  • 长沙网站建设哪家公司好如何做新闻自动采集网站
  • 做网站都需要准备什么凡科做网站类型应该做哪个
  • 大学制作网站怎么做景区网站如何建设
  • 四川炜航建筑公司网站有口碑的南通网站建设
  • 淄博做网站跟优化合肥网站建设公司哪家好
  • 杭州滨江的网站建设公司韩国比分预测
  • 教育行业建设网站找网站公司做网站用了织梦可以吗
  • 怎么给网站做php后台深圳最新动态实时更新
  • 做打鱼网站网站备案转移
  • 做网站文字怎么围绕图片大连专业模板网站制作公司
  • 如何构建一个成交型网站国内网站建设排名
  • 网站如何做百度百科蓝色大气企业网站模板
  • 网站流量好难做使用网站模板快速建站
  • 运维培训 网站建设东莞虚拟主机
  • 西安做网站企业如何申请网址域名
  • 网站长期建设运营计划书wordpress上传sh文件夹
  • 推广关键词优化有了网站怎么做优化
  • 长春火车站是哪个区seo怎么去优化网站
  • 网站怎么做png阴影企业网站源码哪个最好
  • 郑州企业自助建站nginx wordpress 404
  • 网站推广实践内容做视频的网站
  • 企业网站的建设目的wordpress 股票插件
  • 中山网站建设方案外包请人做网站收费