下面就要讲代码到底是怎么执行的。在讲源码之前,我们看看从流程角度到底是怎么运行的。image.pngimage.png执行引擎的概述执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构关系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是
下面就要讲代码到底是怎么执行的。在讲源码之前,我们看看从流程角度到底是怎么运行的。image.pngimage.png执行引擎的概述执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构关系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是
背景本人Java开发工程师一枚,主攻后端,需要搭建一套Prometheus+Grafana的监控系统,采用企业微信告警通知。在网上各种查阅资料的同时,发现很多资料都大致相通且不完整,踩坑无数,经过多日钻研后,最终完成了整个搭建任务,特此记录下整个安装操作过程,希望能帮助各位。同时也请各位大神指导并提出意见,在此只能傻瓜式的记录下操作过程,如果有幸有哪位运维大神看到,还请指正不足之处,感激不尽[抱拳]一、Prometheus下载安装Promethus官网下载地址:https://prometheus.io/download/image.pngXshell连接服务器依次执行以下命令:进入local
背景本人Java开发工程师一枚,主攻后端,需要搭建一套Prometheus+Grafana的监控系统,采用企业微信告警通知。在网上各种查阅资料的同时,发现很多资料都大致相通且不完整,踩坑无数,经过多日钻研后,最终完成了整个搭建任务,特此记录下整个安装操作过程,希望能帮助各位。同时也请各位大神指导并提出意见,在此只能傻瓜式的记录下操作过程,如果有幸有哪位运维大神看到,还请指正不足之处,感激不尽[抱拳]一、Prometheus下载安装Promethus官网下载地址:https://prometheus.io/download/image.pngXshell连接服务器依次执行以下命令:进入local
内存区域程序计数器、虚拟机栈、本地方法栈这三个是线程私有的;堆、方法区是线程公有的;程序计数器:记录线程走到字节码的哪一行;虚拟机栈:由栈帧组成,每个栈帧包含局部变量表、操作数栈、动态链接、方法返回地址,当执行到一个方法的时候,就会把这个方法以栈帧形式压入栈本地方法栈:与虚拟机栈差不多,只不过这个栈是给本地方法用的堆:堆的垃圾回收算法常用的是分代回收法,所以堆被划分出新生代,老年代;方法区:1.7之前方法区的实现是永久代,会存储已被虚拟机加载的类信息、字段信息、方法信息、常量、静态变量、即时编译器编译后的代码缓存等数据。****1.8之后方法区的实现变成了元空间,字符串常量池和静态变量等移出到
内存区域程序计数器、虚拟机栈、本地方法栈这三个是线程私有的;堆、方法区是线程公有的;程序计数器:记录线程走到字节码的哪一行;虚拟机栈:由栈帧组成,每个栈帧包含局部变量表、操作数栈、动态链接、方法返回地址,当执行到一个方法的时候,就会把这个方法以栈帧形式压入栈本地方法栈:与虚拟机栈差不多,只不过这个栈是给本地方法用的堆:堆的垃圾回收算法常用的是分代回收法,所以堆被划分出新生代,老年代;方法区:1.7之前方法区的实现是永久代,会存储已被虚拟机加载的类信息、字段信息、方法信息、常量、静态变量、即时编译器编译后的代码缓存等数据。****1.8之后方法区的实现变成了元空间,字符串常量池和静态变量等移出到
一、类文件1、结构:ClassFile{u4magic;//魔数,用于确定文件类型u2minor_version;//副版本号u2major_version;//主版本号,代表JDK版本,如:0034,十进制为52,表示JDK8u2constant_pool_count;//常量池数量cp_infoconstant_pool[constant_pool_count-1];//常量池u2access_flags;//标记,识别类是class还是接口;是否是public;是否是abstract;是否是final等u2this_class;//当前类u2super_class;//父类u2inter
一、类文件1、结构:ClassFile{u4magic;//魔数,用于确定文件类型u2minor_version;//副版本号u2major_version;//主版本号,代表JDK版本,如:0034,十进制为52,表示JDK8u2constant_pool_count;//常量池数量cp_infoconstant_pool[constant_pool_count-1];//常量池u2access_flags;//标记,识别类是class还是接口;是否是public;是否是abstract;是否是final等u2this_class;//当前类u2super_class;//父类u2inter
垃圾回收随着程序的运行,内存中的实例对象、变量等占据的内存越来越多,如果不及时进行回收,会降低程序运行效率,甚至引发系统异常,JVM会自动完成垃圾回收工作,主要包括:MinorGC/YoungGC:针对新生代的垃圾收集;MajorGC/OldGC:针对老年代的垃圾收集。FullGC:针对整个Java堆以及方法区的垃圾收集Java堆区可以划分为新生代和老年代,新生代又可以进一步划分为Eden区、Survivor1区、Survivor2区。具体比例参数的话,可以看一下这张图。垃圾回收原理一般情况下,新创建的对象都会被分配到Eden区(一些大对象特殊处理),这些对象经过第一次MinorGC后,如果仍
垃圾回收随着程序的运行,内存中的实例对象、变量等占据的内存越来越多,如果不及时进行回收,会降低程序运行效率,甚至引发系统异常,JVM会自动完成垃圾回收工作,主要包括:MinorGC/YoungGC:针对新生代的垃圾收集;MajorGC/OldGC:针对老年代的垃圾收集。FullGC:针对整个Java堆以及方法区的垃圾收集Java堆区可以划分为新生代和老年代,新生代又可以进一步划分为Eden区、Survivor1区、Survivor2区。具体比例参数的话,可以看一下这张图。垃圾回收原理一般情况下,新创建的对象都会被分配到Eden区(一些大对象特殊处理),这些对象经过第一次MinorGC后,如果仍