java虚拟机
sugar-foxs
这个作者很懒,什么都没留下…
展开
-
java虚拟机字节码执行引擎之解释执行
java语言中,Javac编译器完成了程序代码经过词法分析,语法分析到抽象语法树,再遍历语法树生成线性的字节码指令流的过程.这一部分动作是在java虚拟机外部完成的,而解释器是在虚拟机内部的,Java程序的编译是半独立的实现.解释器负责对Javac编译器输出的指令流进行解释执行.java中指令流基本上是一种基于栈的指令集架构,指令流中的指令大部分都是零地址指令,依赖操作数栈进行工作.解释器原创 2017-07-02 17:10:20 · 690 阅读 · 0 评论 -
java虚拟机字节码执行引擎之运行时栈帧结构
在Java虚拟机规范中制定了虚拟机字节码执行引擎的概念模型,这个概念模型成为各种虚拟机执行引擎的统一外观.在不同的虚拟机实现里,执行引擎在执行java代码时可能会有解释执行和编译执行两种选择,也有可能两者兼备.但所有的执行引擎的外观都是一样的:输入的是字节码文件,处理过程是字节码解析的等效过程,输出的是执行结果.本章先讲解用于支持虚拟机进行方法调用和方法执行的数据结构:栈帧栈帧存储了方原创 2017-07-02 12:41:21 · 338 阅读 · 0 评论 -
java编译器之前端编译器
java的编译器其实有三种,一种是前端编译器,负责把*.java文件转变为*.class文件.一种是后端运行期编译器,负责把字节码转变为本地机器码.了最后一种是静态提前编译器,直接把*.java文件编译成本地机器码.下面先说前端编译器Javac编译器,大家最熟悉的过程,运行程序之前都会先编译代码.Javac编译器不像HotSpot虚拟机那样使用c++语言实现,它是由java语言编写的程序.原创 2017-07-02 17:17:35 · 1137 阅读 · 0 评论 -
了解java内存模型
一,由于计算机的内存和处理器的计算能力有很大的差距,所以在内存和处理器之间加入一层高速缓存作为缓冲,来解决处理器与内存的速度矛盾:将运算需要使用的数据从内存复制到高速缓存之中,提升运算速度,运算结束之后再将数据同步回内存,这样处理器就不需要等待缓慢的内存读写了。但是,这时出现一个新的问题:缓存一致性问题。这就需要一种协议保证数据一致性了,这类协议有MSI、MESI、MOSI及Dragon原创 2017-02-21 16:49:50 · 295 阅读 · 0 评论 -
java虚拟机字节码执行引擎之方法调用
方法调用阶段唯一的任务是确定被调用方法的版本,即调用哪一个方法.一切方法调用在Class文件里面存储的都只是符号引用,不是方法在实际运行时内存布局中的入口地址,需要在类加载期间,甚至到运行期间才能确定目标方法的之间引用.1,非虚方法的调用称为解析,在类加载阶段将符号引用解析为该方法的直接引用. 非虚方法:静态方法,私有方法,实例构造器,父类方法,被final修饰的方法. 解原创 2016-11-17 11:09:10 · 507 阅读 · 0 评论 -
java虚拟机的内存分配策略
1,对象优先分配在Eden区大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机执行一次Minor GC。GC后剩下的对象如果无法放入Survivor区,通过分配担保进入老年代。2,大对象直接进入老年代大对象是指需要大量连续内存空间的对象。可以通过设置-XX:PretenureSizeThreshold来决定超过多大的对象会直接进入老年代。原创 2017-07-09 15:40:34 · 234 阅读 · 0 评论 -
java虚拟机的垃圾回收算法
1,哪些内存需要回收?判定哪些对象需要回收,对象存活判定算法有两种:1,引用计数算法:给对象添加一个引用计数器,对象每被引用一次,引用计数器值就加一,引用失效减一,任何时刻当计数值为0的对象就是不能再被使用的。这个方法有循环引用的问题.2,可达性分析算法:对象和GC Roots之间有引用链时便是可达的,当不可达时,对象便可被回收。2,可作为GCRoots的对象:1,原创 2017-07-02 12:33:58 · 238 阅读 · 0 评论 -
java虚拟机之类加载机制
虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是java虚拟机的类加载机制。这是会思考两个问题:一,什么时候会进行类加载?在Java中,类型的加载是在程序运行期间完成的,而且是按需加载,只会加载一次,以后从虚拟机的class实例的缓存中获取。二,用什么去加载?类原创 2017-07-22 00:01:58 · 228 阅读 · 0 评论 -
java虚拟机运行时数据区域
以下是《深入理解Java虚拟机》部分内容:java虚拟机内存主要分为5部分,分别是程序计数器,虚拟机栈,本地方法栈,堆,方法区,下面将逐一详细描述。1,程序计数器线程私有,即每个线程都会有一个,线程之间互不影响,独立存储。代表着当前线程所执行字节码的行号指示器。2,虚拟机栈线程私有,其生命周期和线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建...原创 2017-08-11 16:12:05 · 171 阅读 · 0 评论