jvm简介

一、虚拟机

        1.所谓虚拟机就是一台虚拟的计算机,它是一种软件,用来执行一系列虚拟计算机指令,大体上可以分为系统虚拟机和程序虚拟机。

        VMware就属于系统虚拟机,它们完全是对物理计算机的仿真,提供了一个可运行完整操作系统的软件平台。

        程序虚拟机的一个典型代表是java虚拟机,它是专门为执行单个程序而设计的,在java虚拟机上执行的指令叫java字节码指令。

        2.java平台的各种语言都可以共享java虚拟机的跨平台性、优秀的垃圾回收机制、可靠的即时编译器。java技术的核心就是java虚拟机,因为j所有java程序都运行在java虚拟机内部。

        3.java虚拟机就是二进制字节码的运行环境,装载字节码到其内部,编译成对应平台上的机器指令执行。

        4.特点:一次编译到处运行,自动内存管理,自动垃圾回收。jvm是运行在操作系统上的,它与硬件没有直接的交互。

二、jvm整体结构

        java输入的指令流基本上是基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。

        基于栈式指令集架构特点

        1.设计和实现更简单,适用于资源受限的系统

        2.避开了寄存器分配问题,使用零地址方式进行分配。

        3.指令流中的地址是零地址,大多依赖于操作栈,指令集更小,编译器更容易实现。

        4.不需要硬件支持,移植性更好,可以跨平台。

        基于寄存器指令集架构特点

         1.指令集架构完全依赖于硬件,可移植性差。

         2.性能优秀和执行更高效。

        3.花费更少的时间去完成一项操作。

        4.一般情况下,寄存器指令集都是以一地址指令,二地址指令,三地址指令为主,而栈式指令集是以零地址指令为主。

        由于跨平台性能,java指令都是根据栈来设计的,每个设备的cpu架构不同,所以不能设计为基于寄存器的,优点是指令集小,跨平台,编译器更容易实现,缺点是实现一个功能的需要指令更多,性能下降。

三、jvm生命周期

        1.虚拟机的启动

        java虚拟机是通过引导类加载器创建一个初始类来完成的,这个初始类是由虚拟机的实现具体指定的。

        2.虚拟机的执行

        一个运行中的java虚拟机有一个清晰的任务:执行java程序

        程序开始时它才运行,程序结束后它才停止。

        执行java程序时,真真正正执行的是一个叫java虚拟机的进程。

        3.虚拟界的退出

        程序正常执行结束。

        程序执行过程遇到异常或错误而异常终止。

        操作系统出现错误导致Java虚拟机进程终止。

        某线程调用Runtime或者Sysytem的exit方法,或Runtime的halt方法,而java安全管理器也允许这次exit或halt操作。

四、jvm发展历程

        1.Sunday Classic VM

        早在1996年java1.0版本的时候,Sun公司发布了一款名为Sun Classic vm的虚拟机,它同时也是世界上第一款商用虚拟机,在java1.4时被完全淘汰。

        Sun Classic VM内部只提供解释器,当需要用到JIT编译器时,需要进行外挂,但编译器会接管虚拟机的执行系统,解释器不再工作,解释器和编辑器不能协同工作。

        现在hotspot内置了此虚拟机。

        2.Exact VM

        为了解决上一个虚拟机的问题,Sun在java1.2时提供了此虚拟机。

        准确式内存管理,具体知道内存中某个位置的数据是什么类型。

        具备现代高性能虚拟机的雏形。

        编译器与解释器混合使用。

        热点探测

        只在Solaris平台短暂使用,其他平台仍使用Classic。

        最终被HotSpot替代。

        3.HotSpot VM

        HotSpot最初由一家小公司设计,后来这家小公司被Sun收购,Sun后来又被甲骨文收购。

        JDK1.3时,HotSpot VM成为默认虚拟机。

        目前HotSpot占有绝对的市场地位。名称中的HotSpot指的是它的热点代码探测技术。

        通过计数器找到最具编译价值的代码,通过即使编译与栈上替换。通过解释器和编译器协同工作,在最优化的程序响应时间和最佳性能中取得平衡。

        4.BEA的JRockit

        专注于服务器端应用,它可以不太关注程序启动速度,因此JRockit不包含程序解析器,只通过即使编译器编译后运行。

        大量的行业基准测试显示,JRockit是世界上最快的JVM。

  • 19
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值