- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Talk about jvm
大纲
Java和JVM简介
自动内存管理、垃圾回收
虚拟机执行子系统
程序编译和代码优化、JIT
Android Java虚拟机Dalvik
Java与JVM
JVM是Java Virtual Machine
JVM是可以执行Java bytecode的虚拟机
跨平台,一处编写,到处运行
JVM有很多实现,例如:HotSpot,由Sun(Oracle)开发。JRockit,J9 (IBM)等等
运行在JVM之上的不只有Java语言,还可以:Clojure, Groovy, Scala, Jruby, Jython, Rhino等
Next
自动内存管理、垃圾回收
Java内存管理
Java内存管理
Object obj = new Object();
引用
软引用,弱引用,幽灵引用
内存溢出
垃圾回收
引用计数收集器
对象引用遍历
对象引用遍历从一组对象(GC ROOT)开始,沿着整个对象图上的每条链接,递归确定可到达(reachable)的对象。
垃圾收集器算法
标记-清除
标记-压缩
复制
垃圾收集器
分代收集器
垃圾收集器
GC需要停止其他的活动活动。这种方法意味着所有与应用程序相关的工作停止,只有GC运行。
并行的GC,多个线程同时进行GC,其它线程仍然需要停止
并发GC,实现复杂,其它线程最短时间的停止
垃圾收集器
Serial 最基本,最古老的收集器
新生代复制算法,老年代标记整理算法
ParNew Serial多线程版本(新生代)
Parallel Scavenge
Parallel Old (Parallel Scavenge老年代版本)
CMS(Concurrent Mark Sweep)
G1(JDK1.7)
Next
虚拟机执行子系统
class文件结构
class文件结构
虚拟机类加载机制
虚拟机类加载机制
类装载
1)通过一个类的全限定名来获取定义此类的二进制字节流。
2)将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
3)在Java堆中生成一个代表这个类的java.lang.Class对象,作为方法区这些数据的访问入口。
虚拟机类加载机制 链接
验证
是连接阶段的第一步,这一阶段的目的是为了确保Class文件的字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。包含四个阶段的验证过程:文件格式验证、元数据验证、字节码验证和符号引用验证。
准备
此阶段是正式为类变量分配内存并设置类变量初始值的阶段,这些内存都将在方法区中进行分配。进行内存分配的仅包括类变量(被static修饰的变量),而不包括实例变量,实例变量将会在对象实例化时随着对象一起分配在Java堆中。
解析
此阶段是虚拟机将常量池内的符号引用替换为直接引用的过程。符号引用:以一组符号来描述所引用的目标,符号可以是任何形式的字面量,只用使用时能无歧义的定位到目标即可;直接引用:是直接指向目标的指针、相对偏移量或是一个能间接定位到目标的句柄。解析动作主要针对类或接口、字段、类方法、接口方法四类符号引用进行。
虚拟机类加载机制
初始化
类加载过程的最后一步,初始化类变量和其他资源,执行类构造器clinit()方法的过程。
虚拟机字节码执行引擎
栈帧(用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表,操作数栈,动态连接和方法返回地址等信息。)
一个线程中的方法调用链可能很长,很多方法都同时处于执行状态,对于执行引擎来说,活动线程中,只有栈顶的栈帧是有效的,成为Curent Stack Frame。 这个栈帧所关联的方法称为当前方法(Current Method)。执行引擎所运行的所有字节码指令都只针对当前栈帧进行操作。
虚拟机字节码执行引擎
方法调用(方法调用不等于方法执行,其唯一的任务就是确定调用哪一个具体方法。)
静态分派(重载,通过参数的静态类型作为判断依据) P210
动态分派(override,引用指向的对象的具体类型决定了调用的具体目标方法)(实现,方法表)
字节码解释执行引擎
Next
程序编译与代码优化
程序编译
泛型与类型擦除
自动装箱、拆箱与遍历循环
运行时即时编译器JIT
Dalvik
Google实现的Android使用的Java*虚拟机
它可以支持已转换为.dex(即Dalvik Executable)格式的Java应用程序的运行,.dex格式是专为Dalvik设计的一种压缩格式,适合内存和处理器速度有限的系统。
大多数虚拟机包括JVM都是一种堆栈机器,而Dalvik虚拟机则是基于寄存器的。
Dalvik虚拟机有自己的bytecode, 并非使用
文档评论(0)