
Java虚拟机
文章平均质量分 69
qq_26268527
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
我看Java虚拟机(1)---Java简介(标配)和Java内存管理概述(空间)
先过下Java简介,然后内存管理Java简介有一下几点新认识:学习Java虚拟机目标:认清技术本质,才有资格去定义程序的质量Java技术体系:JDK(Java程序设计语言,API,虚拟机),class文件格式,第三方类库发展方向:模块化(eg:OSGI),混合语言(eg:JIN),balalala。。编译JDK,没来及做,错过就以后补吧! 好,标配写完收工!Java内存管理(概述)扯淡:原创 2015-11-24 22:52:04 · 240 阅读 · 0 评论 -
我看Java虚拟机(0)
学习了周志明老师的《深入理解Java虚拟机》,谨以此文章记录下我的所学所思。 由于习惯于全局到局部,所以我先呈现的是对Java虚拟机总体的一个把握,然后在一步一步解剖每个部分,话不多说,进入正题。总体分为空间和时间方面的知识: 空间:虚拟机工作的整个过程中,其使用到的内存状态变化; 时间:虚拟机工作流程,即虚拟机如何一步一步将代码转换到机器可执行的过程。 好了各位看官(假装自己是名博),引子原创 2015-11-24 20:48:00 · 266 阅读 · 0 评论 -
我看Java虚拟机(2)---Java虚拟机内存区域详解
虚拟机内存区域的组成直接上图: 程序计数器:对于Java方法,用来选取下一条要执行的字节码;对于本地方法,值为空。线程独有虚拟机栈:执行Java方法,每一层都是一个栈帧,栈帧包括局部变量表、操作数栈、动态链接和方法出口等信息。线程独有本地方法栈:执行Native方法,sun HotSpot将其与虚拟机栈合二为一。堆:存放对象实例。堆分为新生代和老生代,新生代分为Eden区和两个Survivor原创 2015-11-24 23:14:19 · 469 阅读 · 0 评论 -
我看Java虚拟机(3)---类文件结构
存储两种数据:无符号数和表。 魔数:4字节,识别文件,后缀是会被改变的,所以识别class文件是靠这四个字节。 版本号:2字节次版本号+2字节主版本号 常量池:2字节常量池中存放数据的个数len+len个常量顺序放置;11种数据类型1-12表示,标号2缺省(具体我也不知道为什么) 访问标志:2字节 类索引,父类索引,接口索引集合:2字节+2字节+若干字节,都索引向常量池的数据 字段数原创 2015-11-29 10:10:14 · 306 阅读 · 0 评论 -
我看Java虚拟机(4)---Javac编译器
编译过程分为三个部分:解析与填充符号表插入式注解处理器的注解处理过程分析和字节码的生成解析与填充符号表词法语法分析,生成抽象语法树(AST,Abstract Syntax Tree); 填充符号表注解处理器该部分可以操作上一步生成的语法树,修改一次,解析和填充符号表重新做一次,直到注解处理器再没有对语法树进行修改为止。 《深入理解Java虚拟机》本部分内容原创 2015-11-29 16:25:46 · 455 阅读 · 0 评论 -
我看Java虚拟机(5)---虚拟机加载机制
经过上节的讲解,我们已经知道了Java代码——》字节码的过程,产生了字节码,下一步就是将字节码读入虚拟机,虚拟机将该部分分为七个步骤: 加载->验证->准备->解析->初始化->使用->卸载 我们主要研究前5步。加载读入二进制字节流,并不限定是class文件,可以是zip,jar,网络获取或者其他。将字节流代表的静态结构转换为方法区的运行时数据结构在堆中创建代表这个类的java.lang.原创 2015-11-29 21:50:17 · 428 阅读 · 0 评论 -
我看Java虚拟机(6)---虚拟机字节码执行
栈帧是虚拟机栈中的栈元素,栈帧存储方法的局部变量表,操作数栈,动态链接和方法返回地址信息,附加信息。局部变量表:局部变量表单位成为变量槽(Slot),一个Slot存储32位以内的数据类型,对于long和double,64位,可分为两个Slot存储,由于虚拟机栈是线程独有的,所以这么存储是安全的。 Slot是复用的,当某一Slot数据超出作用范围,它就可以被复用。 对于实例方法,局部变量表索引为0原创 2015-11-29 22:08:59 · 338 阅读 · 0 评论 -
我看Java虚拟机(7)---解释器和JIT编译器
Java是被定为为解释性语言,JIT编译器并不是强制需要的,也并非所有的虚拟机都是用解释器+编译器的并存架构。但主流的商用虚拟机如Hotspot、J9等都采用这种并存的架构。解释器和编译器比较解释器优点:省去编译时间,启动速度快 编译器优点:对代码进行优化,执行效率高 两种方式的优点各为对方的缺点。即解释器的缺点是执行效率低下,编译器的缺点是启动速度慢。很容易理解。Java虚拟机由于Java虚拟原创 2015-12-20 14:09:04 · 2445 阅读 · 0 评论 -
我看Java虚拟机(8)---高效并发
内存模型和线程由于处理器的速度与存储和通讯子系统之间的速度相差太大,所以出现了并发和缓存等技术,来减弱这种差距。 本节简要介绍Java内存模型,volatile变量。Java内存模型每个线程都会保持一个工作内存,线程对于变量的操作,都在工作内存中进行,操作完成之后,再刷新至主内存。其模型如下:内存操作:lock(锁定)unlock(解锁)read(读取)load(载入)use(使用)a原创 2015-12-20 16:54:10 · 522 阅读 · 0 评论