0903【JVM】
JVM知识
努力的阳光蓝孩
学习一时爽,一直学习一直爽
展开
-
【深入理解Java 虚拟机之 即时编译器】0221 运行时数据区域
一、运行时数据区1、Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是依赖用户线程的启动和结束而建立和销毁。二、程序计数器1、介绍A: 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。B: 在Java虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需原创 2020-10-23 08:42:12 · 185 阅读 · 0 评论 -
【深入理解Java 虚拟机之 即时编译器】1151 深入理解Graal编译器
一、历史背景1、Graal虚拟机以及Graal编译器仍在实验室中尚未商用,但未来其有望代替或成为HotSpot下一代技术基础。Graal编译器最初是在Maxine虚拟机[插图]中作为C1X编译器[插图]的下一代编译器而设计的,所以它理所当然地使用于Java语言来编写。2、2012年,Graal编译器从Maxine虚拟机项目中分离,成为一个独立发展的Java编译器项目。3、Graal编译器在JDK 9时以Jaotc提前编译工具的形式首次加入到官方的JDK中,从JDK 10起,Graal编译器可以替换服务原创 2020-10-20 08:26:12 · 592 阅读 · 0 评论 -
【深入理解Java 虚拟机之 即时编译器】后段程序编译与代码优化 思维导图
原创 2020-10-20 07:46:51 · 110 阅读 · 0 评论 -
【深入理解Java 虚拟机之 即时编译器】1141 编译器优化技术
一、概述1、编译器的目标虽然是做由程序代码翻译为本地机器码的工作,但其实难点并不在于能不能成功翻译出机器码,输出代码优化质量的高低才是决定编译器优秀与否的关键。二、优化技术概览1、OpenJDK的官方Wiki上,HotSpot虚拟机设计团队列出了一个相对比较全面的、即时编译器中采用的优化技术列表。2、即时编译器对这些代码优化变换是建立在代码的中间表示或者是机器码之上的,不是直接在Java源码上去做的。3、各种编译器一般都会把内联优化放在优化序列最靠前的位置。三、四种代表性优化技术学习1、原创 2020-10-19 07:41:14 · 280 阅读 · 0 评论 -
【深入理解Java 虚拟机之 即时编译器】1124 查看分析即时编译结果
一、概述1、Java虚拟机的即时编译过程对用户和程序都是完全透明的,虚拟机是通过解释来执行代码还是通过编译来执行代码,对于用户来说并没有什么影响(对执行结果没有影响,速度上会有显著差别),大多数情况下用户也没有必要知道。但是HotSpot虚拟机还是提供了一些参数用来输出即时编译和某些优化措施的运行状况,以满足调试和调优的需要。二、查看1、要知道某个方法是否被编译过,可以使用参数-XX:+PrintCompilation要求虚拟机在即时编译时将被编译成本地代码的方法名称打印出来。VM option '原创 2020-10-18 20:57:17 · 247 阅读 · 0 评论 -
【深入理解Java 虚拟机之 即时编译器】1123 编译过程
一、编译过程1、默认条件A: 编译器还未完成编译之前,都仍然将按照解释方式继续执行代码。(方法调用的标准编译请求 、栈上替换的编译请求)B: 编译动作则在后台的编译线程中进行。C: 可以通过参数-XX:-BackgroundCompilation来禁止后台编译,后台编译被禁止后,当达到触发即时编译的条件时,执行线程向虚拟机提交编译请求以后将会一直阻塞等待,直到编译过程完成再开始执行编译器输出的本地代码。二、客户端编译器(三段式编译器)1、一个平台独立的前端将字节码构造成一种高级中间代原创 2020-10-16 08:55:02 · 273 阅读 · 0 评论 -
【深入理解Java 虚拟机之 即时编译器】1122 编译对象与触发条件
1、热点代码A: 被多次调用的方法,被多次执行的循环体。2、栈上替换方法的栈帧还在栈上,方法就被替换了 => 针对循环体热点代码3、“热点探测”(Hot Spot Code Detection)知道某段代码是不是热点代码,是不是需要触发即时编译,这个行为。A: 基于采样的热点探测(Sample Based Hot Spot Code Detection) => 很难精确地确认一个方法的热度(受外间因素影响)虚拟机会周期性地检查各个线程的调用栈顶,如果发现某个(或某些原创 2020-10-15 08:57:13 · 180 阅读 · 0 评论 -
【JVM】05 Java 代码的运行过程
一、了解程序编译1、 C 语言程序的编译结果; 最左列是偏移;中间列是给机器读的机器码;最右列是给人读的汇编代码0x00:55push rbp0x01:48 89 e5mov rbp,rsp0x04:48 83 ec 10sub rsp,0x100x08:48 8d 3d 3b 00 00 00lea rdi,[rip+0x3b]2、Java 版本的编译最左列是偏移;中间列是给虚拟机读的机器码;最右列是给人读的代码0x0原创 2020-09-28 20:55:26 · 135 阅读 · 0 评论 -
【JVM】04 区分栈的指令集架构和寄存器的指令集架构
一、反编译java 文件 # cd demo01/target/classes/com/haoxiansheng/demo01/testDay01 # javap -v StackStruTest 二、1、类方法public class StackStruTest { public static void main(String[] args) { int i =2 + 3; }}2、反编译后的文件Classfile /Users/flame/Git/原创 2020-09-24 09:25:21 · 180 阅读 · 0 评论 -
【JVM】01 JVM 与 Java 初识
一、介绍1、JVM 百度百科与维基百科解释维基百科百度百科2、JVM 文档下载地址oracle.comhttps://docs.oracle.com/en/java/javase/15/?二、为是么要学JVM为什么运行着的线上系统突然卡死,系统无法访问,甚至直接 OOM?想解决线上 JVM GC 问题,但却无从下手新项目上线,对各种 JVM 参数设置一脸茫然,直接默认吧,然后就 JJ了1、懂的JVM 内部的内存结构、工作机制、是设计搞扩展性应用和诊断运行原创 2020-09-23 09:19:00 · 96 阅读 · 0 评论 -
【JVM】02 之 jconsole使用
命令行执行# jconsole双击连接自己的服务老年代区Eden 区幸存者区线程堆栈信息当前应用加载的类VM 信息原创 2020-09-10 23:06:45 · 126 阅读 · 0 评论 -
【JVM】01之 jvisualvm使用
1、控制台输入jvisualvm2、连接对应应用3、JVM 参数-XX:TieredStopAtLevel=1-Xverify:none-Dspring.output.ansi.enabled=always-Dcom.sun.management.jmxremote-Dspring.jmx.enabled=true-Dspring.liveBeansView.mbeanDomain-Dspring.application.admin.enabled=true-javaagen原创 2020-09-10 23:00:36 · 117 阅读 · 0 评论 -
安装jvisualvm 插件 检查代理设置或稍后重试。服务器目前可能不可用。 您可能还需要确保防火墙不会阻塞网络通信。 您的高速缓存可能已过期。请单击“检查更新”以刷新内容。
https://github.com/visualvm/visualvm.src/releases/download/1.3.9/com-sun-tools-visualvm-modules-jconsole.nbm中出现网络问题检查代理设置或稍后重试。服务器目前可能不可用。 您可能还需要确保防火墙不会阻塞网络通信。 您的高速缓存可能已过期。请单击“检查更新”以刷新内容。1、检查自己的java 版本java -version2、找到对应版本http://visualvm.github.io/原创 2020-09-10 22:50:13 · 3279 阅读 · 10 评论