Java本纪之Java虚拟机的10年

2016-02-19 14:31 3 1 收藏

最近很多朋友喜欢上设计,但是大家却不知道如何去做,别担心有图老师给你解答,史上最全最棒的详细解说让你一看就懂。

【 tulaoshi.com - 编程语言 】

    Java虚拟机的起源与构造
  

  !-- frame contents -- !-- /frame contents --
  当我们说到“Java”这个词的时候,指的是四个相互关联的概念:Java语言、Java API、Java Class文件格式、Java虚拟机。整个Java体系是基于Java 虚拟机构造的,正因为如此,才能实现Java的安全性和网络移动性。Java并非是第一个采用“虚拟机”概念的体系,但却是第一个得到广泛运用的虚拟机平台。 “虚拟”,是一种隔离物理资源与逻辑资源的手段。Java虚拟机的“虚拟”,则是用来隔离物理机器、底层操作系统与Java语言规范实现的手段。
  
  虽然Java是一种面向对象的语言,我们平时大量使用的,是对象间的多态、组合(Composition)、委派(Delegation),但当我们讨论虚拟机的时候,我们看见的基本概念却是“栈(Stack)”和“堆(Heap)”。根据冯诺依曼的“存储计算”模型,所有的代码都保存在代码空间中,随着程序计数器指针的变化进行程序的执行、跳转。Java虚拟机中没有寄存器的概念,方法调用是采用“栈”进行的,这是一种安全、简洁的方法。
  
  Java虚拟机通过类装载器支持对类的隔离,这也是Java实现安全性的基础。每个类都具有自己的命名空间,在具有不同安全级别的沙箱中运行,因此不会产生低安全级别的代码来越权访问高级别代码的机会。类装载器的出现是Java虚拟机与大部分用C实现的虚拟机的显著不同之处。
  
  Java虚拟机的另外一个显著特点就是实现了自动的垃圾收集。在往常,写程序的时候要牢记对象之间的关联,在每个程序块中假若申请了对象空间,就必须在出口释放掉,方法调用往往同时也就是对象的边界。而自动垃圾收集带给开发者的最大好处,就是可以非常方便地从整体上把系统的对象组织成一张对象图,只需往这张图中添加对象,维护对象之间的关联,却不需要自己做复杂的清扫工作。正是有了这种思维单纯的对象图的支持,OR Mapping(关系数据库与对象映射)技术在最近得以大行其道,设计模式也更轻易被Java群体所接受。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

    虚拟机的优化
  

  1995年第一代的Java出台之时,其虚拟机执行是依靠“字节码解释器(Byte Code Interceptor)”的,也就是说每条指令都由虚拟机来当场解释执行,这造成速度令人抓狂地缓慢。更有甚者有人开始总结许多的“速度优化经验”,比如说:“尽量把所有的代码都放在较大的方法中执行”与“少用接口”等等,这完全与Java语言的设计目的背道而驰,现在看起来是多么可笑的奇谈怪论,当时却是很多程序员津津乐道的经验之谈。无他,Java本身执行太慢了。Java生命的前十分之三就是如此缓慢地渡过的。
  
  于是,Sun的工程师开始拼命想着提高执行速度。JIT静态编译器的出现是在1996年十月,Sun放出了第一个编译器。JIT编译器在每段代码执行前进行编译,编译的结果为本地静态机器码,执行速度有了质的提高。Symantec公司当时凭借其傲人的JIT编译器,在整个Java界受到热烈的追捧。在其后的1998年,Java 1.2发布的时候,附带了JIT编译器,从此Java的使用者终于可以抛开上面说的那些希奇的“速度优化经验”了。
  
  JIT静态编译器虽然可以解决一些问题,但是性能仍然和C/C++有很大的差距。对一段程序而言,一名优秀的程序员是如何来改进运行速度的呢?首先,他不会傻到把所有的代码都来优化,他会观察、思考到底哪段代码对整体性能影响最大?然后集中精力来优化这一段代码。按照经验,整个程序 10%-20%的代码,会占据 80%-90%的运行时间。用这种方法,在同样的时间、付出同样程度的努力后,这名优秀的程序员使整个程序的性能得到了很大程度的优化。HotSpot引擎,就是模拟人工的这种方法进行优化的。在程序运行的开始,Java代码仍然解释执行,但HotSpot引擎开始进行采样(Profiling)。
  
  根据采样的结果,决定某段程序是占用较多运行时间的,就认为它是“HotSpot”,它也就是目前程序的瓶颈, 引擎开始启动一个单独的线程进行优化。因为不象原始的 JIT编译器那样无差别的编译所有代码,HotSpot引擎可以集中精力来对HotSpot代码进行深度优化,这样这部分代码执行起来更加迅捷。之前的静态编译器只能按照预定的策略进行编译优化,而HotSpot引擎的优化是基于采样的结果的,因此这种方法对所有的应用程序都有效。1999年3月27日,Sun放出了第一个HotSpot引擎。在随后的2000年5月的JDK 1.3中,包含了HotSopt引擎,这也使1.3成了一个具有里程碑意义的发行版本。到这里,Java的十年生命,已经过去了一半。
  
  HotSpot代表的是一种动态编译的技术。对Java这种大量使用委派、组合等面向对象特性的程序来说,动态编译比起静态编译来有显著的优势。比如Method Inlining。方法的调用是一个很耗时的操作,假若可以把方法调用直接内嵌到调用者的代码中,就可以节省大量的时间, 这被称为“Method Inlining”。因为涉及到类的重载,静态优化很难确切知道哪些属性、方法被重载,因此很难对method进行合并,只好在方法内部进行静态编译,假若每个方法都很小,静态优化能起到的作用也就比较小。而动态编译因为可以完全随时把握类的重载情况,就可以把相关的方法合并进行深度优化。现代的Java程序,非凡是在设计模式教育得到普及之后,大量使用类的继续、委派,形成了很多短小的方法,动态编译的优势就更加明显。
  

来源:http://www.tulaoshi.com/n/20160219/1607111.html

延伸阅读
Sun微系统公司正在为苹果的iPhone手机开发一种Java虚拟机并且计划在今年6月发布这个Java虚拟机,让Java应用程序能够在流行的iPhone手机上运行. Sun负责Java营销的副总裁Eric Klein星期五(3月7日)下午说,这种Java虚拟机将以Java ME版本的Java为基础.苹果还没有表示对在iPhone手机上运行Java程序感兴趣.但是,在考虑到苹果本周四发布了iP...
标签: 服务器
hyper-v虚拟机转换成vmware虚拟机的方法 Hyper-V 是 Microsoft 在 Windows Server 2008 中包含的基于系统管理程序的虚拟化平台。与 Virtual Server 2005 R2(在 Windows Server 2003 操作系统上运行的托管技术)不同,Hyper-V 直接在系统硬件上运行。Hyper-V 可以在 Windows Server 2008 的完全安装上运行,也可以在最小的服务器核心安装...
标签: 电脑入门
Windows 10是最新的Windows系统,目前只推出了试用版,不少人已经迫不及待的试用上了,Linux系统中,可使用虚拟机安装Windows 10进行试用,下面图老师小编就给大家介绍下Linux使用虚拟机安装Windows 10的方法。 Windows 10 TP系统需求 Windows 10 TP的最低系统需求为: 处理器:1GHz主频 内存:1G(32位)或者2G(64位) 硬盘:16G 下...
标签: 电脑入门
虚拟机是采用一台计算机分配出多个完全具备完整计算机特性的区域,每个虚拟区域互不影响,在我们生活中虚拟机的作用也是比较大的,广泛被电脑爱好者与企业所使用,下面本文将于大家分享下什么是虚拟机以及虚拟机的作用,希望对广大电脑爱好者有所学习,这也是电脑百事网很乐意与大家分享的知识。 什么是虚拟机? 专业术语是这样定义的:虚拟机...
标签: 电脑入门
虚拟机安装 Windows10,需要关闭虚拟机后调整「配置 – 硬件」中的「CPU 与内存」为2G以上内存,并编辑「硬盘」大小预留出至少 9G 的磁盘空间。 对于使用过一段时间 Windows 8.1 的用户来说,Windows10 的变化是值得肯定的,也很容易上手,不过如果是从 Windows 7 直接升级到 Windows10,估计需要一点适应的时间。走马观花的浏览了...

经验教程

383

收藏

34
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部