
JVM
wzsyf
学习
展开
-
Java内存区域
1、1、程序计数器。在JVM中是一块较小的内存空间,可以看作是当前线程执行的字节码的行号指示器。字节码解释器工作时就是通过改变计数器的值来选取下一条需要执行的字节码指令。2、Java虚拟机栈。线程私有,它的生命周期和线程相同。每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表,操作数栈,动态链接,方法出口等信息。每个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈...原创 2019-07-09 17:49:07 · 102 阅读 · 0 评论 -
JVM字节码执行引擎之运行时栈帧结构
1、执行引擎是Java虚拟机最核心的组成部分之一。虚拟机是一个相对于物理机的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的,而虚拟机的执行引擎则是由自己实现,因此可以自行制定指令集与执行引擎的体系结构,并且能够执行那些不被硬件直接支持的指令集格式。2、在Java虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,这个概念模型成为各种虚拟...原创 2019-07-17 11:07:08 · 295 阅读 · 0 评论 -
Class类文件的结构
1、"与平台无关"最终实现在操作系统的应用层:Sun公司及许多虚拟机公司发布了许多可以运行在各种不同平台上的虚拟机,这些虚拟机都可以载入和执行同一种平台无关的字节码,从而实现程序的一次编写到处执行。各种不同平台的虚拟机与所有平台都统一使用的程序存储格式—字节码(ByteCode)是构成平台无关性的基石。...原创 2019-07-11 18:19:58 · 178 阅读 · 0 评论 -
JVM字节码执行引擎之方法调用
1、方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程。在程序运行时,进行方法调用是最普遍、最频繁的操作,Class文件编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行时内存布局中的入口地址(相当于之前的直接引用)。2、解析。所有方法调用中的目标方法在C...原创 2019-07-18 10:59:14 · 161 阅读 · 0 评论 -
类加载器
1、虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类。实现这个动作的代码模块称为“类加载器”。2、类与类加载器。...原创 2019-07-15 15:26:09 · 119 阅读 · 0 评论 -
虚拟机类加载时机与类加载过程
编译器将Java代码编译为Class文件,在Class文件中描述的各种信息,最终都需要加载到虚拟机中之后才能运行和使用。而虚拟机如何加载这些Class文件,Class文件中的信息进入到虚拟机后会发生什么变化,这些是下面要记录的内容。1、虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。...原创 2019-07-14 20:11:07 · 142 阅读 · 0 评论 -
JVM内存分配与回收策略
1、对象优先在Eden分配。大多数情况下,对象在新生代的Eden区分配。当Eden区没有足够的空间进行分配时,虚拟机将发起一次Minor GC。1.1、新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为Java对象大多都具有朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也比较快。1.2、老年代GC(Full GC):指发生在老年代的GC,出现了Major GC,经常...原创 2019-07-09 17:47:38 · 192 阅读 · 0 评论 -
JVM垃圾收集器
1、HotSpot的算法实现。1.1、枚举根节点。如果虚拟机要全局进行检查引用,会消耗大量的时间。可达性分析进行时还要进行GC停顿。可达性分析必须要保证 在一致性的快照中进行,一致性是指在整个分析期间整个执行系统看起来就像被冻结在某个时间节点上,不可以出现分析过程中对象引用还在不断的发生变化的情况。这点是导致GC进行时必须停顿所有的Java执行线程(Stop The World)。当所有线程都停...原创 2019-07-09 17:48:09 · 110 阅读 · 0 评论 -
JVM垃圾收集算法
1、判断对象是否存活。1.1、引用计数法:给对象添加一个引用计数器,每当对象有引用计数器就加一,引用失效计数器就减一。任何时刻计数器为0的对象就是不能再被使用的对象,即要回收的对象。引用计数法的缺点是不能解决对象之间相互循环引用的问题。1.2、可达性分析算法。通过一系列称为"GC Roots"的对象作为起始点,从这些节点开始向下搜索,搜索走过的路径成为引用链,当一个对象到GC Roots没有任...原创 2019-07-09 17:48:34 · 96 阅读 · 0 评论 -
JVM之Java内存模型与线程
1、由于计算机的存储设备与处理器的运算速度有几个数量级的差距,所以现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲:将运算需要使用到的数据复制到缓存中,让运算能快速进行,当运算结束后再从缓存同步回内存之中,这样处理器就无须等待缓慢的内存读写了。2、基于高速缓存的存储交互很好地解决了处理器与内存的速度矛盾,但是也为计算机系统带来更高...原创 2019-07-19 19:55:29 · 169 阅读 · 0 评论