JVM
哥的拽你不懂
这个作者很懒,什么都没留下…
展开
-
前端编译优化
三类编译产品:前端编译器:JDK 的 Javac ,Eclipse JDT 中的增量式编译器;即时编译器:HotSpot虚拟机的 C1 ,C2 编译器,Graal 编译器;提前编译器:JDK 的 Jaotc,GNU Cmplier for the Java一、Javac 编译器(1)Javac 的源码与调试编译过程大致分为一个准备过程和三个处理过程:准备过程:初始化插入式注解处理器。解析与填充符号表过程,包括语法语义分析:将源代码的字符流转变为标记集合,构造出抽象语法树。填充符号.原创 2020-06-12 19:53:25 · 144 阅读 · 0 评论 -
虚拟机字节码执行引擎
不同虚拟机实现中,执行引擎在执行字节码得时候通常会有解释执行和编译执行两种选择,也可能两者兼具,还有可能同时包含几个不同级别得即使编译器一起工作得执行引擎,但是所有 Java 虚拟机得执行引擎输入,输出都是一致得:输入的是字节码二进制流,处理过程是字节码解释执行的等效过程,输出的是执行结果;一、运行时栈帧结构java 虚拟机以方法作为最基本的执行单元,栈帧则是支持虚拟机进行方法调用和方法执行背后的数据结构,它也是虚拟机运行时数据区域中虚拟机栈的栈元素,每一个栈帧都包括了局部变量 ,操作数栈,动态.原创 2020-06-11 20:12:27 · 89 阅读 · 0 评论 -
虚拟机类加载机制解析
一、类加载的时机(1)类加载的步骤一个类型从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期都将经历加载,验证,准备,解析,初始化,使用和卸载七个阶段,其中验证,准备,解析三个部分统称为连接。(2)类加载的顺序加载,验证,准备,初始化和卸载这五个阶段的顺序是确定的,而解析阶段在某种情况下可以在初始化阶段之后再开始,这是为了支持 Java 语言的运行时绑定特性。重要的一点是:这些阶段都是互相交叉地混合进行,会在一个阶段执行的过程中调用,激活另一阶段。初始化阶段:有六种情况必须立原创 2020-06-08 20:05:56 · 115 阅读 · 0 评论 -
Class 类文件结构解析
一、Class 类文件结构Class 文件是一组以 8 个字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑的排列在文件中,中间没有任何分隔符,这使得 Class 文件中存储的内容几乎全是程序运行的必要的数据,没有空隙存在。Class 文件格式采用一种类似于 C 语言结构体的伪结构来存储数据,这种微结构只有两种数据类型:无符号数:属于基本的数据结构,以 u1,u2,u4,u8 来分别表示 1 个字节, 2 个字节 , 34个字节 ,8 个字节的无符号数,无符号数可以用来描述数字,引索引用,原创 2020-06-06 08:49:08 · 192 阅读 · 0 评论 -
虚拟机性能监控工具和故障处理工具
一、基础故障处理工具其主要是用来监视虚拟机的运行状态和进行故障处理,根据可用性个授权的不同可以分为三类:1 . 商业授权工具:主要是 JMC (Java Mission Control)及它要用到的 JFE。2 . 正式支持工具:属于被长期支持的工具,不同版本和 JDK 之间会存在差异,3 . 实验性工具:这类工具在在使用说明中被声明是 “ 没有技术支持的 ” 并且是实验性质的,可转正,也可消失。JDK开发团队采用 Java 语言来实现故障处理工具的原因:当应用程序被部署到生产环境中后,原创 2020-06-05 10:02:29 · 146 阅读 · 0 评论 -
常见的垃圾回收算法和垃圾收集器
从如何判断消亡的角度出发,垃圾收集算法可分为:“ 引用计数式垃圾收集 ” 和 “ 追踪式垃圾收集 ” 。也被称为: “直接垃圾收集 ” 和 “ 间接垃圾收集 ” 。(1)分代收集理论大多数商业虚拟机都遵循分代收集的理论,它建立在两个假说之上:弱分代假说:绝大多数对象都是朝生夕灭的。强分代假说:熬过越多次垃圾收集过程的对象越难被回收。跨代引用假说:跨代引用相对于同代来说仅占极少数。前两条假说共同奠定了多款常用的垃圾收集器的统一设计原则:垃圾收集器应该将 Java 堆划分出不同的区域.原创 2020-05-25 13:00:24 · 244 阅读 · 0 评论 -
如何判断一个对象已经死亡?
一、判断对象是否已经死亡的方法(1)引用计数法基本思路:在一个对象中添加一个引用计数器,每当有一个地方引用他时,计数器的值就加一;当引用失效时,计数器减一;任何时刻计数器为零的对象是不可能再被使用的(对象已死亡)。弊端:需要配合大量额外处理才能保证正确的工作,例如:对象之间的循环引用(2)可达性分析算法基本思路:通过一系列称为 “GC Roots” 的跟对象为起始节点集,从这些结点开始,根据引用关系乡下搜索,搜索过程所走过的路径称为 “引用链” ,如果某个对象到 GC Roots 间没有原创 2020-05-22 10:49:53 · 632 阅读 · 0 评论 -
虚拟机中对象的创建
一、对象的创建1. Java创建对象的四种方式(1)通过 new 语句来实例化一个对象;(2)通过反射机制创建对象;(3)通过 clone()方法(复制)创建对象;(4)通过反序列化的方式创建;2.虚拟机创建对象的过程(1)当虚拟机遇到一条字节码 new 指令时,首先检查这个指令的参数是否能在常量池中找到一个类的符号引用,并且检查这个符号引用代表的类是否被加载,解析,初始化过,如果没有,就必须先执行类加载过程;(2)虚拟机为新生对象分配内存空间有如下两种分配方式:指针碰撞原创 2020-05-10 08:44:47 · 187 阅读 · 0 评论 -
Java运行时数据区域都有哪些部分
一、Java运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为多个数据区域,有的区域区域随着虚拟机进程的启动而一直存在,有些则是随着用近乎线程的启动和结束而建立和销毁。(1)程序计数器程序计数器可以看作是当前线程所执行的字节码行号指示器,也是程序控制流的指示器,用来完成分支,循环,跳转,异常处理,线程恢复等基础操作,每条线程都有自己独立的程序计数器,所以称它...原创 2020-05-07 10:40:52 · 400 阅读 · 0 评论 -
各个JDK版本的新特性
一、各个JDK版本的新特性(1)JDK 5 :1 . 自动装箱2 . 泛型3 . 动态注释4 . 枚举5 . 可变长参数6 . 遍历循环7 . 改进了 Java 的内存模型8 . 提供了 java.until.concurrent 并发包(2)JDK 6 :1 . 提供了动态语言的支持( 通过内置 Mozilla JavaScript Rhion 引擎实现 )2 ....原创 2020-04-25 19:38:12 · 256 阅读 · 0 评论