java虚拟机
afgawrg
这个作者很懒,什么都没留下…
展开
-
java虚拟机基础知识(一):运行时数据区分析与虚拟机对象分配,布局,访问过程
一、运行时数据区域线程共享数据区:方法区,堆线程隔离数据区:虚拟机栈,本地方法栈,程序计数器1、程序计数器【线程私有】:可看作是当前线程所执行的字节码的行号指示器。----当线程执行的是java方法,计数器记录的是正在执行的虚拟机字节码指令的地址----当线程执行的是Native方法,计数器值则为空此内存区域是唯一一个在java虚拟机规范中没有规定任何OutOfM...原创 2019-03-07 12:17:47 · 140 阅读 · 0 评论 -
java虚拟机基础知识(二):对象存活判断与引用分类
一、对象是否存活1、判断方法1)引用计数算法:给对象添加一个引用计数器,每当有一个地方引用它时,计数器值加1;当引用失效时,计数器值减1;任何时刻计数器为0的对象就是不可能再被使用的。存在问题:很难解决对象间相互循环引用的问题2)可达性分析算法:通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有...原创 2019-03-07 12:26:38 · 165 阅读 · 0 评论 -
java虚拟机基础知识(三):垃圾收集算法与垃圾收集器
一、垃圾收集算法 1)标记-清除算法:标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象 ----主要不足:一个是效率问题,标记和清除两个过程的效率都不高;另一个是空间问题,标记清除之后会产生大量不连续的内存碎片 2)复制算法:将可用内存容量分为大小相等的两块,每次只使用其中一块。当这一块的内存用完了,就将还存活的对象复制到另外一块上面,...原创 2019-03-07 12:32:04 · 103 阅读 · 0 评论 -
java虚拟机基础知识(四):类文件结构与字节码指令简介
一、Class类文件的结构Class文件是一组以8位字节为基础单位的二进制流,整个Class文件中存储的内容几乎全部是程序运行的必要数据,采用一种类似于C语言结构体的伪结构来存储数据,这种伪结构只有两种数据类型:无符号数和表。----无符号数属于基本的数据类型----表是由多个无符号数或者其他表作为数据项构成的复合数据类型=============下图来源《深入理解java虚拟机》...原创 2019-03-07 22:49:01 · 223 阅读 · 0 评论 -
java虚拟机基础知识(五):虚拟机类加载过程详解与类加载器
一、概述1、类加载机制: 虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化(三者都在程序运行期间完成),最终形成可以被虚拟机直接使用的java类型2 、类加载的过程类从被加载到内存到卸载出内存的生命周期:加载,验证,准备,解析(统称为连接),初始化,使用和卸载二、类加载过程详解1、加载 加载阶段虚拟机完成的事情:1)通过一个...原创 2019-03-07 23:45:17 · 453 阅读 · 0 评论 -
java虚拟机基础知识(六):虚拟机字节码执行引擎
一:概述 执行引擎:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果二: 运行时栈帧结构 栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构 栈帧存储了局部变量表,操作栈,动态连接,返回地址等1) 局部变量表 局部变量表是一组变量值存储空间,用于存放方法参数和方法内部定义的局部变量,最小单位是变量槽(...原创 2019-03-07 23:56:46 · 160 阅读 · 0 评论 -
java虚拟机基础知识(七):早期(编译期)优化
一、概述编译期:1)前端编译器:*.java文件转变为*.class文件 2)后端运行期编译器(JIT):字节码转变为机器码 3)静态提前编译器(AOT):*.java文件编译成本地机器代码二、 javac编译器编译过程的3个过程:1)解析与填充符号表过程(词法语法分析;输入到符号表)...原创 2019-03-08 00:03:12 · 114 阅读 · 0 评论 -
java虚拟机基础知识(八):晚期(运行期)优化
即时编译器(JIT编译器):运行时,虚拟机将会把热点大吗编译成与本地平台相关的机器码,并进行各种层次的优化一、Hotspot虚拟机内的即时编译器1)解释器与编译器共存的架构:当程序需要迅速启动和执行的时候,解释器可以首先发挥作用,省去编译的时间,立即执行;在程序运行后,编译器把越来越多的代码编译成本地代码,可以获取更高的执行效率;内存资源限制较大—使用解释执行节约内存,反之用编译执行提升效...原创 2019-03-08 00:20:35 · 186 阅读 · 0 评论