java虚拟机基础知识

来源:互联网 发布:电脑软件转移工具 编辑:程序博客网 时间:2024/05/16 08:36

JDK未来的功能规划:Lambda项目(Lambda表达式,函数式编程(函数式编程的优点是程序天然的适合并行运行))、Jigsaw项目(虚拟机模块化支持,但是业界其实再用OSGi   ),动态语言支持(以后更流行混合式编程,Jython等,但是这方面还有很多不足,c++Java是静态语言)

运行时数据区域:

程序计数器:java的多线程是通过线程轮流切换并分配处理器执行时间的方式来实现的。为了切换后能回到正确的位置,每条线程都需要有一个独立的程序计数器,独立存储,这类区域为“线程私有”的内存。

Java虚拟机栈也是线程私有的,它的生命周期与线程相同

JVMDalvik区别:1.Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式DEXDalvik Executable),JVM是基于栈的,而DVM于寄存器(基于寄存器的好处是编译的时候,花费的时间更短,在其他各方面性能上也有很大的提升).dex格式是专为Dalvik设计的一种压缩格式,可以减少整体文件尺寸,提高I/o操作的类查找速度所以适合内存和处理器速度有限的系统。 
2.Java SE程序中的Java类会被编译成一个或者多个字节码文件(.class)然后打包到JAR文件,而后Java虚拟机会从相应的CLASS文件和JAR文件中获取相应的字节码;Android应用虽然也是使用Java语言进行编程,但是在编译成CLASS文件后,还会通过一个工具(dx)将应用所有的 CLASS文件转换成一个DEX文件,而后DVM会从其中读取指令和数据。 
3.DVM依赖于Linux内核的一些功能,如线程和底层内存管理机制。所以DVM只能运行在Android操作系统上,JVM并不依赖其他外部条件,所以它可以运行在各种平台之上。

栈的概念:栈是线程独有的,保存其运行状态和局部自动变量的(所以多线程中局部变量都是相互独立的,不同于类变量)。栈在线程开始的时候初始化(线程的Start方法,初始化分配栈),每个线程的栈互相独立。每个函数都有自己的栈,栈被用来在函数之间传递参数。操作系统在切换线程的时候会自动的切换栈,就是切换SS/ESP寄存器。栈空间不需要在高级语言里面显式的分配和释放。

JVMjava的核心和基础,在java编译器和os平台之间的虚拟处理器。它是一种利用软件方法实现的抽象的计算机基于下层的操作系统和硬件平台,可以在上面执行java的字节码程序。

注:JVMjava虚拟机)包括解释器,不同的JDK虚拟机是相同的,解释器不同。

Java字节码的两种执行方式

1、即时编译方式:解释器先将字节码编译成机器码,然后再执行该机器码。

2、解释执行方式:解释器通过每次解释并执行一小段代码来完成Java字节码程序的所有操作。

 (编译器: 是JDK来编译java代码,将其转化成java虚拟机(jre)所能解析的机器码,然后在用jre运行,得出结果所以编译器是在jdk中 jre仅为运行环境)

JVM执行程序的过程 :

I.加载。class文件

II.管理并分配内存

III.执行垃圾收集

JREjava运行时环境)由JVM构造的java程序的运行环境 


0 0
原创粉丝点击