免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 31090 | 回复: 22
打印 上一主题 下一主题

【话题讨论】Java虚拟机规范相关话题讨论(获奖名单已公布-2014-1-14) [复制链接]

论坛徽章:
8
巨蟹座
日期:2013-08-12 09:41:40IT运维版块每日发帖之星
日期:2015-12-09 06:20:00寅虎
日期:2013-12-25 14:59:40天秤座
日期:2013-12-06 14:04:55酉鸡
日期:2013-11-28 10:22:22水瓶座
日期:2013-08-26 15:40:54巨蟹座
日期:2013-08-12 09:42:01每日论坛发贴之星
日期:2015-12-09 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-12-16 10:04 |只看该作者 |倒序浏览
获奖名单已公布,详情请看:http://bbs.chinaunix.net/thread-4119142-1-1.html 

Java虚拟机(JVM)一种用于计算机设备的规范,可用不同的方式(软件或硬件)加以实现。编译虚拟机的指令集与编译微处理器的指令集非常类似。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。Java虚拟机(JVM)是可运行Java代码的假想计算机。只要根据JVM规格描述将解释器移植到特定的计算机上,就能保证经过编译的任何Java代码能够在该系统上运行。Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。

今天我们就来讨论一些相关的问题:
1、Java instanceof 关键字是如何实现的?
2、如何让JVM快速释放对象的内存?
3、为什么很多语言选择在JVM上实现?JVM在跨平台上有哪些优势?

讨论时间:2013.12.16--2013.1.3

讨论奖励:活动结束后将会抽取5-10名会员赠送《Java虚拟机规范(Java SE 7版)》一本。

内容简介:
    《Java虚拟机规范(Java SE 7版)》完整而准确地阐述了Java虚拟机各方面的细节,围绕Java虚拟机整体架构、编译器、class文件格式、加载、链接与初始化、指令集等核心主题对Java虚拟机进行全面而深入的分析,深刻揭示Java虚拟机的工作原理。同时,基于最新Java SE 7平台,它详细介绍了Java SE 7中新加入的InvokeDynamic指令和方法句柄机制,给出了在Java SE 6期间引入的类型检查检验器的原理证明。还介绍了Java SE 5中对class文件格式的扩展变动,例如泛型和注解等。另外还介绍了Java内存模型的指令操作和初始化规则。

要点:
·阐释Java虚拟机与Java的关系和发展历程。
·概览Java虚拟机整体架构、包括class文件格式、数据类型、原始类型、引用类型、运行时数据区、栈帧、浮点算法、异常等。
·详述如何将以Java语言编写的程序转换为Java虚拟机指令集、涉及常量、局部变量、控制结构、算术运算、参数接收、方法调用、数组、操作数栈异常处理、同步与注解等。
·深入分析用来表示编译后的类和接口的class文件格式,主要包括ClassFile结构、描述符与签名、常量池、字段、方法、属性、代码约束与class文件校验等。
·定义Java虚拟机启动以及类和的加载、链接和初始化过程。
·阐释并列举Java虚拟机指令集。

购书链接:http://item.jd.com/11365561.html

作者简介:
    Tim Lindholm,资深Java虚拟机高级架构师,Java编程语言的主要贡献者之一,Sun公司杰出工程师,目前主要负责移动设备上的Java应用。在到Sun公司工作之前,他已经在美国阿贡国家实验室和Quintus公司从事与虚拟机和运行时系统相关的工作。
    Frank Yellin,Sun公司高级工程师,Java项目元老级成员。最近十余年中,他都从事解释型及编译型语言的运行时系统方面的工作。在到Sun公司工作之前,他在Lucid公司从事Common Lisp编译器相关的工作。
    Gilad Bracha,Newspeak编程语言的创建者,Sun公司杰出工程师。在到Sun公司工作之前,他在Animorphic Smalltalk System公司从事Strongtalk语言相关的工作。
    Alex Buckley,Oracle公司Java编程语言和Java虚拟机规范负责人。

论坛徽章:
459
亥猪
日期:2014-05-31 12:08:03亥猪
日期:2014-05-31 12:07:38亥猪
日期:2014-05-31 12:08:04亥猪
日期:2014-05-31 12:07:43亥猪
日期:2014-05-31 12:07:52亥猪
日期:2014-05-31 12:08:09亥猪
日期:2014-05-31 12:07:51亥猪
日期:2014-05-31 12:08:02亥猪
日期:2014-05-31 12:07:59亥猪
日期:2014-05-31 12:07:37亥猪
日期:2014-05-31 12:07:50亥猪
日期:2014-05-31 12:07:39
2 [报告]
发表于 2013-12-16 10:10 |只看该作者
本帖最后由 2009532140 于 2013-12-16 10:39 编辑

好书!
经常写JAVA 代码,但从来没深入研究~
直接看原文文档吧:
Operation
Determine if object is of given type

Format
instanceof
indexbyte1
indexbyte2
Forms

instanceof = 193 (0xc1)

Operand Stack
..., objectref →
..., result

Description
The objectref, which must be of type reference, is popped from the operand stack. The unsigned indexbyte1 and indexbyte2 are used to construct an index into the run-time constant pool of the current class (§2.6), where the value of the index is (indexbyte1 << | indexbyte2. The run-time constant pool item at the index must be a symbolic reference to a class, array, or interface type.
If objectref is null, the instanceof instruction pushes an int result of 0 as an int on the operand stack.
Otherwise, the named class, array, or interface type is resolved (§5.4.3.1). If objectref is an instance of the resolved class or array or implements the resolved interface, the instanceof instruction pushes an int result of 1 as an int on the operand stack; otherwise, it pushes an int result of 0.
The following rules are used to determine whether an objectref that is not null is an instance of the resolved type: If S is the class of the object referred to by objectref and T is the resolved class, array, or interface type, instanceof determines whether objectref is an instance of T as follows:
If S is an ordinary (nonarray) class, then:
If T is a class type, then S must be the same class as T, or S must be a subclass of T;
If T is an interface type, then S must implement interface T.
If S is an interface type, then:
If T is a class type, then T must be Object.
If T is an interface type, then T must be the same interface as S or a superinterface of S.
If S is a class representing the array type SC[], that is, an array of components of type SC, then:
If T is a class type, then T must be Object.
If T is an interface type, then T must be one of the interfaces implemented by arrays (JLS §4.10.3).
If T is an array type TC[], that is, an array of components of type TC, then one of the following must be true:
TC and SC are the same primitive type.
TC and SC are reference types, and type SC can be cast to TC by these run-time rules.

Linking Exceptions
During resolution of the symbolic reference to the class, array, or interface type, any of the exceptions documented in §5.4.3.1 can be thrown.


【from:http://docs.oracle.com/javase/sp ... jvms-6.5.instanceof

论坛徽章:
223
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-05-10 19:22:58操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:10操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
3 [报告]
发表于 2013-12-16 10:12 |只看该作者
这个java除了跨平台,木什么有点吧

论坛徽章:
223
2022北京冬奥会纪念版徽章
日期:2015-08-10 16:30:32操作系统版块每日发帖之星
日期:2016-05-10 19:22:58操作系统版块每日发帖之星
日期:2016-02-18 06:20:00操作系统版块每日发帖之星
日期:2016-03-01 06:20:00操作系统版块每日发帖之星
日期:2016-03-02 06:20:0015-16赛季CBA联赛之上海
日期:2019-09-20 12:29:3219周年集字徽章-周
日期:2019-10-01 20:47:4815-16赛季CBA联赛之八一
日期:2020-10-23 18:30:5320周年集字徽章-20	
日期:2020-10-28 14:14:2615-16赛季CBA联赛之广夏
日期:2023-02-25 16:26:26CU十四周年纪念徽章
日期:2023-04-13 12:23:10操作系统版块每日发帖之星
日期:2016-05-10 19:22:58
4 [报告]
发表于 2013-12-16 10:12 |只看该作者
这个java除了跨平台,木什么有点吧

论坛徽章:
4
CU十二周年纪念徽章
日期:2013-10-24 15:41:34摩羯座
日期:2013-12-24 13:05:332015亚冠之西悉尼流浪者
日期:2015-10-09 16:03:47fulanqi
日期:2016-06-17 17:54:25
5 [报告]
发表于 2013-12-16 11:15 |只看该作者
action08 发表于 2013-12-16 10:12
这个java除了跨平台,木什么有点吧


JAVA的优点太多了!木有JAVA能有互联网这么繁荣的今天?你知道世界上有多少WEB网站后台都是基于JAVA架构的吗?远的不说,强大的电商阿里巴巴,就是JAVA的受益者啊!而且,你知道JAVA在移动开发领域也占很大的份额吗?Android就是活的代表啊~

论坛徽章:
4
CU十二周年纪念徽章
日期:2013-10-24 15:41:34摩羯座
日期:2013-12-24 13:05:332015亚冠之西悉尼流浪者
日期:2015-10-09 16:03:47fulanqi
日期:2016-06-17 17:54:25
6 [报告]
发表于 2013-12-16 11:16 |只看该作者
本帖最后由 hbsycw 于 2013-12-24 12:22 编辑

好话题,积极参与讨论~


1、Java instanceof 关键字是如何实现的?
  答:instanceof 是Java保留关键字,准确的说一个二元操作符(运算符),和==,>,<是同一类东西。它的作用是用来在运行时指出对象是否是特定类的一个实例。
      instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
      用法:
        result = object instanceof class
        参数:
        Result:布尔类型。
        Object:必选项。任意对象表达式。
        Class:必选项。任意已定义的对象类。

      因为Java是强类型静态语言,因此,instanceof 的部分实现是在Java编译器在编译时进行类型匹配检查。运行时,如果 object 是 class 的一个实例,则 instanceof 运算符返回 true。如果 object 不是指定类的一个实例,或者 object 是 null,则返回 false。
     (备注:因为OO语言的多态性机制,在实际编程中,instanceof的用处并不大,现在只是一个保留关键字,不知道为何CU要讨论这个的实现? )


2、如何让JVM快速释放对象的内存?
   答:Java语言的一大特点,就是虚拟机(JVM)实现。“Write once,run anywhere”,是Java刚推出时一个很响亮的口号,这一切的基础都是建立在JVM之上。我们知道,内存是程序运行中的重要资源,内存总是有限的,对它的分配和释放进行管理是一项非常重要的工作。和C\C++这类显示内存管理(内存管理由开发人员负责)的编程语言相比,Java实现了自动内存管理,也就是GC(Garbage collector),垃圾回收器组件来负责内存的分配和回收。JVM中的GC是运行在一个独立的线程中的,它会根据当前虚拟机中内存的的使用状况,决定什么时候进行垃圾回收,也就是内存释放。GC启动的运行时间和频率无法事先预计,这取决于实现算法和当前程序运作状态。也就是说Java程序本身与垃圾回收器能够进行的直接交互比较有限。但,如何让JVM快速释放对象呢?
可以通过几种好的编程实践来实现:a 不再使用的对象显示赋空,例:obj=null; b 在程序中可以添加System.gc()方法来建议垃圾回收器立即进行回收工作,但,注意,这只是建议,垃圾回收器可以选择不执行;c 可以分析程序中对象的不同生命周期,在生成对象时,对对象进行不同引用,分别是软引用、弱引用和幽灵引用。这些引用可以在不同程序上影响垃圾回收器对被引用对象的处理,从而使JVM快速释放对象的内存。


3、为什么很多语言选择在JVM上实现?JVM在跨平台上有哪些优势?
   答:就我知道的,像Scala、Groovy、JRuby、Jython等很多新的编程语言,都是在Java JVM上实现的。其实,任何编程语言,只要能生成符合JAVA字节代码规范的字节码,就都可以在JVM上运行。原因吗?我觉得,主要还是Java的跨平台性。不同平台Java虚拟机的实现,屏蔽了底层操作系统的细节(这应该是个很大的工作量吧~),提供了统一的运行平台。

论坛徽章:
93
2015年辞旧岁徽章
日期:2019-10-10 10:51:15CU大牛徽章
日期:2014-02-21 14:21:56CU十二周年纪念徽章
日期:2020-10-15 16:55:55CU大牛徽章
日期:2014-02-21 14:22:07羊年新春福章
日期:2019-10-10 10:51:39CU大牛徽章
日期:2019-10-10 10:55:38季节之章:春
日期:2020-10-15 16:57:40ChinaUnix元老
日期:2019-10-10 10:54:42季节之章:冬
日期:2019-10-10 10:57:17CU大牛徽章
日期:2014-02-21 14:22:52CU大牛徽章
日期:2014-03-13 10:40:30CU大牛徽章
日期:2014-02-21 14:23:15
7 [报告]
发表于 2013-12-16 11:20 |只看该作者
各种设备、系统发展的越来越多,跨平台非常重要啊。

论坛徽章:
17
CU大牛徽章
日期:2013-03-13 15:32:352017金鸡报晓
日期:2017-02-08 10:33:21fulanqi
日期:2016-06-17 17:54:25lufei
日期:2016-06-17 17:38:40平安夜徽章
日期:2015-12-26 00:06:30冥斗士
日期:2015-11-25 14:38:112015年辞旧岁徽章
日期:2015-03-03 16:54:15亥猪
日期:2015-01-26 17:23:43CU大牛徽章
日期:2013-04-17 11:02:58CU大牛徽章
日期:2013-04-17 11:02:36CU大牛徽章
日期:2013-04-17 11:02:15CU大牛徽章
日期:2013-04-17 11:01:45
8 [报告]
发表于 2013-12-16 19:00 |只看该作者
这个活动太好了,可惜俺不写代码,不能班门弄斧了。希望各路大牛积极发言啊。java的应用越来越广泛了。

论坛徽章:
18
卯兔
日期:2013-09-27 17:41:0615-16赛季CBA联赛之佛山
日期:2016-07-09 17:34:45操作系统版块每周发帖之星
日期:2015-12-02 15:01:04IT运维版块每日发帖之星
日期:2015-12-02 06:20:00IT运维版块每日发帖之星
日期:2015-10-07 06:20:00IT运维版块每日发帖之星
日期:2015-10-03 06:20:00IT运维版块每日发帖之星
日期:2015-10-01 06:20:00羊年新春福章
日期:2015-04-01 17:56:06拜羊年徽章
日期:2015-04-01 17:56:062015年迎新春徽章
日期:2015-03-04 09:49:452015年辞旧岁徽章
日期:2015-03-03 16:54:15天秤座
日期:2015-01-14 06:39:28
9 [报告]
发表于 2013-12-16 21:10 |只看该作者
路过,支持!!!

论坛徽章:
32
CU大牛徽章
日期:2013-05-20 10:45:13每日论坛发贴之星
日期:2015-09-07 06:20:00每日论坛发贴之星
日期:2015-09-07 06:20:00数据库技术版块每日发帖之星
日期:2015-12-13 06:20:0015-16赛季CBA联赛之江苏
日期:2016-03-03 11:56:13IT运维版块每日发帖之星
日期:2016-03-06 06:20:00fulanqi
日期:2016-06-17 17:54:25IT运维版块每日发帖之星
日期:2016-07-23 06:20:0015-16赛季CBA联赛之佛山
日期:2016-08-11 18:06:41JAVA
日期:2016-10-25 16:09:072017金鸡报晓
日期:2017-01-10 15:13:292017金鸡报晓
日期:2017-02-08 10:33:21
10 [报告]
发表于 2013-12-17 00:16 |只看该作者
1、Java instanceof 关键字是如何实现的?
instanceof关键字用于判断一个引用类型变量所指向的对象是否是一个类或接口、抽象类、父类的实例。
instanceof关键字实现过程大致如下:
1)Java编译器在识别到instanceof关键字时,会对应到TOKEN.INSTANCEOF标识类型。
2)Java编译器的语法检查机制会检查instanceof语句是否正确。
3)Java编译器的抽象语法树AST包含了JCTree.JCInstanceOf类,它负责解析instanceof关键字所在的语句。
4)Java编译器为JCTree.JCInstanceOf节点生成instanceof相关的字节码。


2、如何让JVM快速释放对象的内存?
可以使用语句System.gc();建议Java虚拟机JVM调用垃圾收集器GC。
一般来说,JVM的垃圾回收器是自动回收内存的,不需要程序员操心这个。

3、为什么很多语言选择在JVM上实现?JVM在跨平台上有哪些优势?
确实如此,很多语言包括Python、Ruby、Scala、Groovy。Clojure等都有支持JVM的实现。我觉得主要有以下的原因:
1)利用JVM,可以很轻松地实现跨平台特性。
2)可以充分利用JVM的JIT即时编译的优异性能。
3)利用JVM,省去了内存管理的烦恼。
4)JVM支持多种操作系统,而且技术本身非常成熟,省去了技术成熟所需的开发时间。
5)Java语言是全球排名前三的编程语言,可以充分借用Java社区的力量。
上面的要点也可以回答JVM在跨平台上有哪些优势。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP