JVM

1.简介

JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,存在于内存中,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
Java具有跨平台性,可以“一次编译,随处运行”。其原因在于Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。Java虚拟机在执行字节码时,把字节码解释成具体平台上的机器指令执行。

2.组成部分


从这个图中可以看到,JVM内存结构主要包括两个子系统和两个组件。两个子系统分别是Classloader子系统和Executionengine(执行引擎)子系统;两个组件分别是Runtimedataarea(运行时数据区域)组件和Nativeinterface(本地接口)组件。
(1)Classloader:
根据给定的全限定名类名(如java.lang.Object)来装载class文件的内容到Runtimedataarea中的methodarea(方法区域)。Java程序员可以extends  java.lang.ClassLoader类来写自己的Classloader。
(2)Executionengine:
执行classes中的指令。任何JVMspecification实现(JDK)的核心都是Executionengine,不同的JDK例如Sun的JDK和IBM的JDK好坏主要就取决于他们各自实现的Executionengine的好坏。
(3)Nativeinterface:
与nativelibraries交互,是其它编程语言交互的接口。当调用native方法的时候,就进入了一个全新的并且不再受虚拟机限制的世界,所以也很容易出现JVM无法控制的nativeheapOutOfMemory。
(4)RuntimeDataArea:
这就是我们常说的JVM的内存了。它主要分为五个部分——
[1] Heap(堆):一个Java虚拟实例中只存在一个堆空间,所有通过new创建的对象的内存都在堆中分配
[2] MethodArea(方法区域):存放了要加载的类信息、静态变量、final类型的常量、属性和方法信息,被装载的class的信息存储在Methodarea的内存中。当虚拟机装载某个类型时,它使用类装载器定位相应的class文件,然后读入这个class文件内 容并把它传输到虚拟机中。
[3] JavaStack(java的栈):每个线程执行每个方法的时候都会在栈中申请一个栈帧,每个栈帧包括局部变量区和操作数栈,存放此次方法调用过程中的临时变量、参数和中间结果

[4] ProgramCounter(程序计数器):每一个线程都有它自己的PC寄存器,也是该线程启动时创建的。PC寄存器的内容总是指向 下一条将被执行指令的地址,这里的地址可以是一个本地指针,也可以是在方法区中相对应于该方法起始指令的偏移量。

[5] Nativemethodstack(本地方法栈):用于支持native方法的执行,存储了每个native方法调用的状态

3. 执行过程
JVM在机器内部创建一个运行系统,以下列方式来执行代码:
(1)加载 .class文件并完成校验
(2)执行字节码程序
(3)管理内存和调度线程
(4)回收垃圾对象所占的内存




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值