`
jeff312
  • 浏览: 77291 次
  • 性别: Icon_minigender_1
  • 来自: 新加坡
社区版块
存档分类
最新评论

JVM原理学习笔记(二) —— 虚拟机规范

    博客分类:
  • J2EE
阅读更多
    最近在阅读 《Inside the JVM》 这本书,结合一些日常工作学习中的感想,随便写一些东西,蜻蜓点水,不必有章法。

    曾经很在意C++和Java之间的优劣比较,有一段时间尤其注意在网上搜索二者比较的文章,并不时参加一些口水战,比如下面这个帖子:
http://www.diybl.com/course/3_program/c++/cppsl/2008520/117228.html
在论坛里绝对是个口水飞溅潜力帖。现在想起来很好笑,其实Java跟C++几乎是不同领域的东西,它们之所以存在是因为各自领域的需要,比较一下有助于C++程序员转移到Java去或相反,但优劣之说只能误人子弟。帖子的作者显然不懂虚拟机规范,因此会有所谓“骗局”一说,这里无意驳斥这个作者早已无从考证的老文章,仅就虚拟机规范说几句。

    《Inside the JVM》 一开始就指出,所谓“虚拟机”实际上在不同的语境下有不同的涵义。有时候它指的是虚拟机的“规范”(spec),有时候指的是虚拟机的具体实现(如Sun JDK, BEA JRockit),有时候指的是正在运行着的一个虚拟机的实例(你启动Tomcat或者JBoss,甚至一个j2se程序,都同时启动了一个虚拟机实例)。书中如无特别说明,指的一般都是“规范”。

    虚拟机规范规定了.class文件的格式、类装载的规则、运行时内存的逻辑区块、方法调用时栈的动作等等。一旦某个虚拟机的具体实现(如Open JDK)声称它实现了Java虚拟机规范,那么也就是同时声称它在运行时的外部行为跟规范中所描述的是一样的。对于Java程序员而言,他的“平台”只有一个,就是虚拟机规范,只要他的.class编译完,无论到哪一个虚拟机上,Open JDK也好,JRockit也好,Sun JDK也好,甚至芯片级实现的JVM也好,都应该能够正常运行。这就是Java跨平台的真正涵义(当然,实际项目中,100%的跨平台项目是很少的,比如有些没有完全遵守规范写出的bug,在这个虚拟机上运行的时候或许能糊弄过去,但在另一个虚拟机上却未必能够)。帖子作者认为Java的跨平台是个“设计巧妙的骗局”,实在是言重了,我们不能天真地认为,“跨平台”就可以没有平台,事实上无论怎样我们总需要至少一个的。此外,即使是“跨平台”也是相对的,一个平台因为没有JVM的实现而“跨”不上去,太正常了,世上哪有什么绝对的事。
分享到:
评论
11 楼 lzzy_alex 2012-06-27  
"any problem in computer science can be solved by another layer of indirection"
10 楼 jiangduxi 2009-10-24  
虚拟机(JVM)感觉还得深入学习了解!
9 楼 jeff312 2009-10-23  
凤舞凰扬 写道
jeff312 写道
凤舞凰扬 写道
   一言以蔽之,所谓跨平台是指用java书写的应用程序是跨平台的,而不是指java语言本身的解析执行是跨平台的。


呵呵,愚以为可以更进一步,“Java的可执行文件是跨平台的,一个软件成品,一旦整体完成编译就可以到处运行”。至于语言层面,只要可以用文本编辑器来写代码就或许可算“跨平台”了呢哈。

   呵呵,楼上的前半句表述是有问题的,什么叫可执行文件啊?别被windows的exe文件干扰了的说哦。


从虚拟机规范的角度看,class文件就是可执行文件啊,因为对于虚拟机规范来说,class已经不需要再编译了。至于在具体平台上如windows的JVM可能会把频繁调用的class编译成本地exe,这是虚拟机的实现要关心的问题,对于虚拟机规范而言则是透明的。毕竟,如果某虚拟机是在芯片级别实现的,就根本不会有编译成本地程序这一步了,对于这种虚拟机来说,class就是本地可执行文件。

当然,非要较真的话,class文件显然并不对等于exe,它更像程序连接前的中间产品obj文件。
8 楼 凤舞凰扬 2009-10-23  
jeff312 写道
凤舞凰扬 写道
   一言以蔽之,所谓跨平台是指用java书写的应用程序是跨平台的,而不是指java语言本身的解析执行是跨平台的。


呵呵,愚以为可以更进一步,“Java的可执行文件是跨平台的,一个软件成品,一旦整体完成编译就可以到处运行”。至于语言层面,只要可以用文本编辑器来写代码就或许可算“跨平台”了呢哈。

   呵呵,楼上的前半句表述是有问题的,什么叫可执行文件啊?别被windows的exe文件干扰了的说哦。
7 楼 jeff312 2009-10-23  
凤舞凰扬 写道
   一言以蔽之,所谓跨平台是指用java书写的应用程序是跨平台的,而不是指java语言本身的解析执行是跨平台的。


呵呵,愚以为可以更进一步,“Java的可执行文件是跨平台的,一个软件成品,一旦整体完成编译就可以到处运行”。至于语言层面,只要可以用文本编辑器来写代码就或许可算“跨平台”了呢哈。
6 楼 sun_cat 2009-10-22  
说java的跨平台是做出来的java应用,因为java应用是运行在jvm上的需要jre
所以你要运行java程序那么必须有jre

jvm并不是跨平台的,它有各个版本的实现,这个就不用程序员操心了
5 楼 J-catTeam 2009-10-22  
凤舞凰扬 写道
   一言以蔽之,所谓跨平台是指用java书写的应用程序是跨平台的,而不是指java语言本身的解析执行是跨平台的。

你这句话真的说对了  呵呵 
不同平台 java语言针对的规范有些不一样
4 楼 浪客剑心 2009-10-22  
学习啦!继续啊楼主。
3 楼 凤舞凰扬 2009-10-21  
   一言以蔽之,所谓跨平台是指用java书写的应用程序是跨平台的,而不是指java语言本身的解析执行是跨平台的。
2 楼 whaosoft 2009-10-21  
讲的挺不错的
1 楼 youjianbo_han_87 2009-10-21  
是的,不错

相关推荐

    Java学习笔记——良葛格

    "Java学习笔记——良葛格"是一份专为初学者设计的教程资料,由良葛格精心编写,旨在帮助读者掌握JDK5.0版本的Java基础知识。JDK(Java Development Kit)是Java开发的核心工具集,包含了编译器、调试器和运行环境等...

    学习笔记——JVM性能调优之 jstat(csdn)————程序.pdf

    jstat(JVM Statistics Monitoring Tool)是Oracle JDK提供的一款强大的命令行工具,用于实时监控Java虚拟机的各种运行状态,包括内存管理、类加载、垃圾收集以及JIT编译等关键指标。了解并熟练运用jstat,能帮助...

    Java JDK 6学习笔记——ppt简体版.rar

    这份"Java JDK 6学习笔记——ppt简体版"提供了关于这个关键版本的详细教程,适合初学者和有一定经验的开发者来深入理解Java编程。 首先,我们要了解Java JDK是什么。Java Development Kit,简称JDK,是Oracle公司...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记——PPT简体版是针对初学者和有经验的开发者们的一份宝贵资源,它深入浅出地介绍了Java编程语言的核心概念和技术。这份笔记以PPT的形式呈现,使得学习过程更加直观易懂,适合课堂教学或自我学习。...

    JDK 6学习笔记——PPT简体版

    **JDK 6学习笔记——PPT简体版** Java Development Kit(JDK)是Java编程语言的核心组件,它提供了开发和运行Java应用程序所需的工具和环境。JDK 6是Oracle公司发布的一个重要版本,为开发者带来了许多改进和新特性...

    JVM学习笔记核心知识点整理

    ### JVM学习笔记核心知识点整理 #### 一、引言与背景 随着软件开发技术的不断发展,Java作为一种广泛应用的编程语言,其背后的核心技术——Java虚拟机(JVM)的重要性日益凸显。掌握JVM不仅可以帮助开发者更好地理解...

    JVM笔记(阳哥).zip

    《JVM笔记(阳哥)》是一份深入探讨Java虚拟机(JVM)的资料,由阳哥精心整理。这份笔记涵盖了JVM的基础概念、内存管理、类加载机制、性能优化等多个方面,对于理解Java程序的运行机制以及提升开发效率具有重要的...

    JVM学习笔记(一)——类的加载机制

    Java虚拟机(JVM)是Java程序运行的基础,它的核心组成部分之一就是类加载机制。类加载机制负责将Java源代码编译成的.class文件转换为内存中的数据结构,以便程序可以执行。本篇将深入探讨类加载机制的原理和过程。 ...

    个人学习的java笔记——思维导图

    11. **JVM内存管理**:了解Java虚拟机(JVM)的工作原理,包括堆内存、栈内存、方法区等,以及垃圾回收机制,对于优化程序性能至关重要。 12. **设计模式**:设计模式是解决常见软件设计问题的经验总结,如单例模式...

    理解虚拟机--有笔记版

    除了上述提到的基础知识点外,《深入理解Java虚拟机——JVM高级特性与最佳实践(第2版)》这本书籍还深入探讨了JVM的性能调优、并发编程、以及各种高级特性的具体应用。比如,对于性能调优,书中讲解了如何根据不同的...

    【达内】听课笔记之二——JAVA

    它以其“一次编写,到处运行”的特性而闻名,因为Java代码可以跨平台运行,只需一个Java虚拟机(JVM)支持。本节的听课笔记将深入探讨Java的核心概念和技术。 一、Java语言基础 1. 变量与数据类型:Java提供了基本...

    ImagesForJVM-JVM笔记图片

    【描述】"ImagesForJVM——JVM笔记图片" 暗示这些图片可能是教学或学习笔记的一部分,旨在通过视觉化的方式解释JVM的关键概念,如内存模型、类加载机制、垃圾收集以及性能优化等方面。 【标签】"java" 明确了这些...

    Java,JVM相关笔记的代码知识

    这份JVM相关的笔记包含了深入理解JVM内部工作机制的关键代码资源,是学习和优化Java应用程序的重要参考资料。下面,我们将深入探讨Java与JVM的相关知识点。 1. **类加载机制**:JVM通过类加载器(ClassLoader)将...

Global site tag (gtag.js) - Google Analytics