免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: arron刘
打印 上一主题 下一主题

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

论坛徽章:
39
白银圣斗士
日期:2015-11-24 10:40:40酉鸡
日期:2015-03-20 14:15:44寅虎
日期:2015-03-20 14:13:59午马
日期:2015-03-20 14:13:16白羊座
日期:2015-03-20 14:12:54金牛座
日期:2015-03-20 14:12:09双子座
日期:2015-03-20 14:11:57巨蟹座
日期:2015-03-20 14:11:44狮子座
日期:2015-03-20 14:11:29亥猪
日期:2015-03-20 14:16:24戌狗
日期:2015-03-20 14:16:40申猴
日期:2015-03-20 14:17:05
11 [报告]
发表于 2013-12-17 11:48 |只看该作者
虽然经常写java代码,但是看到前两个问题有点蒙了,还真没注意这些
1、Java instanceof 关键字是如何实现的?
没有深入的了解java虚拟机,但是如果要我从java层面来实现这个instanceof,我会去遍历这个类的所有类和子类,然后通过类对比.
2、如何让JVM快速释放对象的内存?
System.gc().看来问题立马就会想到这个.因为对java的自动释放内存还是很放心的,所以平常写代码几乎不用.
3、为什么很多语言选择在JVM上实现?JVM在跨平台上有哪些优势?
我想最大的优势还是在与JVM的技术成熟度,和开放程度.而且随着JVM的更新,和硬件的更新,速度其实已经不再是JVM的瓶颈,这个是相当重要的因素.

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
12 [报告]
发表于 2013-12-17 15:22 |只看该作者
但从来没深入研究~

论坛徽章:
17
戌狗
日期:2013-09-02 23:43:02技术图书徽章
日期:2014-04-29 14:16:02技术图书徽章
日期:2014-04-24 15:51:26未羊
日期:2014-04-06 22:10:30丑牛
日期:2014-04-06 21:23:29辰龙
日期:2014-04-06 21:20:22处女座
日期:2014-04-06 21:16:18技术图书徽章
日期:2014-04-02 15:10:51金牛座
日期:2014-03-10 22:26:18巨蟹座
日期:2014-02-17 17:12:12技术图书徽章
日期:2014-01-24 10:38:43摩羯座
日期:2013-11-29 18:00:18
13 [报告]
发表于 2013-12-17 16:31 |只看该作者
好主题,支持讨论Java虚拟机。

论坛徽章:
78
双子座
日期:2013-10-15 08:50:09天秤座
日期:2013-10-16 18:02:08白羊座
日期:2013-10-18 13:35:33天蝎座
日期:2013-10-18 13:37:06狮子座
日期:2013-10-18 13:40:31双子座
日期:2013-10-22 13:58:42戌狗
日期:2013-10-22 18:50:04CU十二周年纪念徽章
日期:2013-10-24 15:41:34巨蟹座
日期:2013-10-24 17:14:56处女座
日期:2013-10-24 17:15:30双子座
日期:2013-10-25 13:49:39午马
日期:2013-10-28 15:02:15
14 [报告]
发表于 2013-12-18 11:21 |只看该作者
1、Java instanceof 关键字是如何实现的?
这个没怎么考虑过jvm是怎么实现的,查了下资料大概了解了下:
instanceof的字节码

    操作:确定对象是否为给定的类型

    指令格式:instanceof|indexbyte1|indexbyte2

    指令执行前后的栈顶状态:

……,objectref=>
……,result

    描述:

indexbyte1和indexbyte2用于构造对当前类的常量池的索引,objectref为reference类型,可以是某个类,数组的实例或者是接口。

基本的实现过程:
对indexbyte1和indexbyte2构造的常量池索引进行解析,然后根据java规范判断解析的类是不是objectref的一个实例,最后在栈顶写入结果。

2、如何让JVM快速释放对象的内存?
一般不用手动来实现,最多在不用对象的时候显示地将它置为null,gc能够快速的自动释放对象的内存。如果对时间频率有要求的话,会修改jvm的启动
参数,这些足够用了,没有再深入的学习。

3、为什么很多语言选择在JVM上实现?JVM在跨平台上有哪些优势?
jvm在各个平台上都有成熟的版本支持,而且jvm本身的性能也不错,如JIT 可以在运行中记录程序运行的特征,并在其基础上做大量的优化,
把 JVM 作为目标平台意味着大量的性能优化工作可以给 JVM 来做;JVM 作为一个成熟的高层运行环境,为 Guest 语言提供了很多运行时
所需要的服务,比如内存管理(有业界领先的垃圾回收等),很大程度上避免了额外的独立开发。Java 社区有大量成熟的库,还算不错的
开发工具和环境。另外基于jvm开发人员基数大,应用广泛也是一个重要原因。

论坛徽章:
24
金牛座
日期:2013-10-18 21:35:56综合交流区版块每日发帖之星
日期:2015-08-15 06:20:00综合交流区版块每日发帖之星
日期:2015-09-30 06:20:00综合交流区版块每日发帖之星
日期:2015-10-16 06:20:03每日论坛发贴之星
日期:2015-10-16 06:20:03综合交流区版块每日发帖之星
日期:2015-10-24 06:20:00IT运维版块每日发帖之星
日期:2016-01-06 06:20:0015-16赛季CBA联赛之天津
日期:2016-02-25 16:28:04综合交流区版块每日发帖之星
日期:2016-06-12 06:20:00每日论坛发贴之星
日期:2016-06-12 06:20:00综合交流区版块每日发帖之星
日期:2016-06-13 06:20:00综合交流区版块每日发帖之星
日期:2015-06-22 22:20:00
15 [报告]
发表于 2013-12-23 20:07 |只看该作者
Java的最大优势,就是能让SB学会写程序。

论坛徽章:
31
CU大牛徽章
日期:2013-03-13 15:15:08CU大牛徽章
日期:2013-05-20 10:46:18CU大牛徽章
日期:2013-05-20 10:46:25CU大牛徽章
日期:2013-05-20 10:46:31CU大牛徽章
日期:2013-05-20 10:46:38CU大牛徽章
日期:2013-05-20 10:46:44CU大牛徽章
日期:2013-09-18 15:16:55CU大牛徽章
日期:2013-09-18 15:18:22CU大牛徽章
日期:2013-09-18 15:18:43CU十二周年纪念徽章
日期:2013-10-24 15:41:34丑牛
日期:2013-12-01 10:11:07水瓶座
日期:2014-01-15 08:47:25
16 [报告]
发表于 2013-12-24 17:53 |只看该作者
本帖最后由 ddd010 于 2013-12-27 09:29 编辑

今天我们就来讨论一些相关的问题:
1、Java instanceof 关键字是如何实现的?
传统的JDK没有研究过,我来说说android中instanceof的实现:
他实际上是调用的是class类的isAssignableFrom接口来比较的,然后陷入c层,关键代码如下:
  1. /*
  2. * Perform the instanceof calculation.
  3. */
  4. static inline int isInstanceof(const ClassObject* instance,
  5.     const ClassObject* clazz)
  6. {
  7.     if (dvmIsInterfaceClass(clazz)) {
  8.         return dvmImplements(instance, clazz);
  9.     } else if (dvmIsArrayClass(instance)) {
  10.         return isArrayInstanceOf(instance, clazz);
  11.     } else {
  12.         return dvmIsSubClass(instance, clazz);
  13.     }
  14. }


  15. /*
  16. * Do the instanceof calculation, pulling the result from the cache if
  17. * possible.
  18. */
  19. int dvmInstanceofNonTrivial(const ClassObject* instance,
  20.     const ClassObject* clazz)
  21. {
  22. #define ATOMIC_CACHE_CALC isInstanceof(instance, clazz)
  23.     return ATOMIC_CACHE_LOOKUP(gDvm.instanceofCache,
  24.                 INSTANCEOF_CACHE_SIZE, instance, clazz);
  25. #undef ATOMIC_CACHE_CALC
  26. }
复制代码
就是由对象的单根模式,挨着去寻找子类,一直到寻找完。
2、如何让JVM快速释放对象的内存?
这个不太好说,如果是手动gc的话,System.gc()是个手段。但是平凡的手动gc并不是好的设计,应该更多的考虑 java.lang.ref.SoftReference和 java.lang.ref.WeakReference他们能让你的程序更健康。
当然通过调节JVM的参数来调节GC频率和算法,这算是一个非常有用的手段。
3、为什么很多语言选择在JVM上实现?JVM在跨平台上有哪些优势?
java的稳定性、执行效率、跨平台性是很多语言选择JVM的关键,当然java的类库是另外一个重要点,他的开源项目是非常非常多的,一旦选择了JVM,语言天生就具备了很多优点。出名的groovy,jruby,scala,fantom,jpython。现在的.net和jvm是最大语言实现平台。

论坛徽章:
2
CU十二周年纪念徽章
日期:2013-10-24 15:41:34处女座
日期:2013-12-27 22:22:41
17 [报告]
发表于 2013-12-25 20:22 |只看该作者
本帖最后由 tempname2 于 2013-12-25 21:00 编辑

我日,当年还还打印过,现在居然出书了。好贵了,送一本我吧。


1、Java instanceof 关键字是如何实现的?

obj instanceof type

首先把obj压到栈上,instanceof字节码带2个byte参数,拼一个16bit的offset去常量池索引表征class的结构体,然后与obj中记录的class比较。不相符还要引用obj之class的父class继续比较,中间某一层匹配则成功,如果回溯到了object对象则失败。

2、如何让JVM快速释放对象的内存?

显示调用gc()。但这只有提示作用,虚拟机可以忽略这个请求,坚持按自己的策略回收内存。

3、为什么很多语言选择在JVM上实现?JVM在跨平台上有哪些优势?
跨平台;好玩;有商业前景。

资深,历史长,久经考验。静态类型,比C++之类的灵活,比Python之类的死板,适合大项目。

论坛徽章:
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
18 [报告]
发表于 2013-12-26 08:44 |只看该作者
不过,研究这种虚拟机的话,用处大么....

论坛徽章:
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
19 [报告]
发表于 2013-12-26 08:45 |只看该作者
本帖最后由 2009532140 于 2013-12-26 08:46 编辑

回复 15# 一介村夫

2222222#
    我靠!
太实在了!!

论坛徽章:
5
丑牛
日期:2014-01-21 08:26:26卯兔
日期:2014-03-11 06:37:43天秤座
日期:2014-03-25 08:52:52寅虎
日期:2014-04-19 11:39:48午马
日期:2014-08-06 03:56:58
20 [报告]
发表于 2013-12-26 16:41 |只看该作者
好书!java的应用越来越广泛了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP