java深度-----JVM体系结构

[code]
java虚拟机有自己完善的硬件架构,如处理器,堆栈,寄存器等,还有相应的指令系统
jvm屏蔽了与具体操作系统相关信息,使得java程序只需要生产在java虚拟机上运行的目标代码(字节码),
就可以在多种平台上不加修改地运行。
java虚拟机在执行字节码时,实际上最终还是把字节码解释成具体平台上的指令执行。

sun规定,每个字节码指令占8bit,那么最多才256个指令,目前java的还没超过这个

跨平台只是java代码在各个操作系统上都是统一的,他只有虚拟机一个操作系统,
他把传统意义上的编程语言与操作系统的紧耦合关系变成了虚拟机与操作系统的紧耦合关系。
所以因为他有中间字节码,那么他会有效率问题

java虚拟机由两个子系统和两个组件构成

Class loader子系统 ----对应于真实计算机的i/o系统
execution engine(执行引擎)子系统 ---对应于 cpu, 完成指令的执行
Runtime data area(运行时数据区域) 组件 ---class loader加载上来后放到这里,想象成内存空间
native interface(本地方法接口) ---赋予了java调用其它方法语言的能力----想象成网卡,实现了不同语言的互联

Class Loader 子系统的作用:根据给定的全限定类名来装载class文件内容到Runtime data area中的
method area(方法区域)。java程序员可以extends java.lang.ClassLoader类来写自己的ClassLoader

execution engine子系统的作用:执行classes中的指令,任何JVM specification实现(JDK)的核心都是
Execution engine,不同的JDK例如Sun的jdk和IBM的JDK好坏主要就取决于他们各自实现的Exection engine的好坏---cpu嘛

native interface组件:与native libraries交换,是与其他编程语言交互的接口。当调用native方法的时候,就进入了一个
全新的部首虚拟机限制的世界,所以也很容易出现JVM无法控制的native heap OutOfMemory
java分配对象会分配在堆空间当中,当你java写的不好,那么heap很可能被沾满,所以---native heap OutOfMemory
或者:不当的使用了本地方法调用,也就是heap中会调用不受JVM控制的外部的东西,那么有时heap中的引用将会被耗尽,
或者,JVM之外的空间被耗尽,而JVM需要申请内存扩展时,将会报错

Runtime Data Area组件
1。Heap空间:用来存放java实例对象
2。Method area :被装载的java类信息也就是字节码信息存放于此
3。 Java Stack栈空间:用于存放每个运行的java线程的局部变量,操作数,中间结果,以及执行上下文信息(1M---每个线程的栈大小,
这个东西加大,说明负载粒度加大了);
4.Program Count程序计数器:每一个java线程都有它自己的PC寄存器,也就是该线程启动时创建的,PC寄存器的内
容总是指向下一条将被执行指令的地址,这里的地址可以是一个本地指针(其中一种实现方式);也可以是在方法区中相对应与该方法起始指令的
偏移量(第二种实现方式,不同厂商实现不同)。---相当于pc寄存器
5。Native Method Stack本地方发栈:保存本地方法进入区域地址;
以上五个部分只有Heap和Method Area是被所有线程共享使用的;而Java Stack,Program counter和Native method stack
是以线程为粒度的,每个线程都有自己的部分
[/code]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值