
JVM
文章平均质量分 91
XuJiaoJie
这个作者很懒,什么都没留下…
展开
-
JVM之字节码执行引擎
概述在Java中,编译器讲源代码转成字节码,那么字节码如何被执行的呢?这就涉及到了JVM的字节码执行引擎,执行引擎负责具体的代码调用及执行过程。就目前而言,所有的执行引擎的基本一致: 1. 输入:字节码文件 2. 处理:字节码解析 3. 输出:执行结果。物理机的执行引擎是由硬件实现的,和物理机的执行过程不同的是虚拟机的执行引擎由于自己实现的。运行时栈帧结构每一个线程都有一个栈,也就是前文中提到原创 2017-10-19 21:55:37 · 760 阅读 · 0 评论 -
JVM之晚期(运行期)优化
概述Java程序在运行的期间,可能会有某个方法或者代码块的运行特别频繁时,就会把这些代码认定为“热点代码”。为了提高热点代码的执行效率,在运行时JVM会将这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler,JIT编译器)。解释器与编译器事实上,现在许多主流的商用虚拟机,都同时包含有解释器与编译器,解释器与编译器两原创 2017-11-07 19:23:01 · 444 阅读 · 0 评论 -
JVM之内存运行时区域
JVM数据区域java虚拟机所管理的内存将会包括以下几个运行时数据区域: 程序计数器程序计数器是一块较小的空间,它可以看做是当前线程所执行的字节码的行号指令器。字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。每条线程都有一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区原创 2017-10-14 15:47:12 · 371 阅读 · 0 评论 -
JVM之垃圾收集器与内存分配策略
对象已死吗在堆里面存放着java世界几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就是要确定这些对象哪些还“存活”,哪些已经“死去”引用计数算法给对象中添加一个引用计数器,每当有一个地方引用它的时候,计数器就加1,;当引用失效时,计数器就减1;任何时刻计数器为0的对象就是不可能再被使用的。java虚拟机中没有选用引用计数算法是来管理内存,其中最主要的原因是它很难解决对象之间互相循环引用的原创 2017-10-14 15:50:14 · 398 阅读 · 0 评论 -
JVM之早期(编译器)优化
概述JVM的编译器可以分为三个编译器: 1. 前端编译器:把.java转变为.class的过程。如Sun的Javac、Eclipse JDT中的增量式编译器(ECJ)。 2. JIT编译器:把字节码转变为机器码的过程,如HotSpot VM的C1、C2编译器。 3. AOT编译器:静态提前编译器,直接将*.java文件编译本地机器代码的过程。本节讲述的仅限于第一类编译过程Javac编译器Jav原创 2017-10-24 21:14:05 · 491 阅读 · 1 评论 -
JVM之类文件结构
概述实现语言无关性的基础仍然是虚拟机和字节码存储格式。虚拟机不和包括Java在内的任何语言绑定,它与“Class”文件这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机指令集和符号表以及若干其它辅助信息。Java语言中的各种变量、关键字和运算符号的语义最终都是有多条字节码指令组合而成,因此字节码命令所能提供的语义描述能力肯定会比Java语言本身更加强大。Class类文件结构任何一个原创 2017-10-16 21:18:35 · 381 阅读 · 0 评论 -
JVM之类加载机制
类加载过程类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和卸载(Unloading)7个阶段。其中准备、验证、解析3个部分统称为连接(Linking)。如图所示: 加载、验证、准备、初始化和卸载原创 2017-10-16 21:22:45 · 331 阅读 · 0 评论 -
JVM之内存模型与线程
内存一致性协议由于CPU执行速度很快,而从内存读取数据和向内存写入数据的过程跟CPU执行指令的速度比起来要慢的多,因此如果任何时候对数据的操作都要通过和内存的交互来进行,会大大降低指令执行的速度。因此在CPU里面就有了高速缓存。当程序在运行过程中,会将运算需要的数据从主存复制一份到CPU的高速缓存当中,那么CPU进行计算时就可以直接从它的高速缓存读取数据和向其中写入数据,当运算结束之后,再将高速缓存原创 2017-11-13 19:27:05 · 392 阅读 · 0 评论 -
JVM之线程安全与锁优化
线程安全当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的;java 语言中的线程安全java中各种操作共享的数据分为以下5类:不可变, 绝对线程安全, 相对线程安全,线程兼容,线程对立; * 不可变对象 该对象一定是线程安全的,无论是对象的方法实原创 2017-11-13 19:27:42 · 401 阅读 · 0 评论