免费注册 查看新帖 |

Chinaunix

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

Java虚拟机编程,说说您的入门和深入经验!(获奖名单已公布-2013-8-15) [复制链接]

论坛徽章:
49
15-16赛季CBA联赛之福建
日期:2016-06-22 16:22:002015年亚洲杯之中国
日期:2015-01-23 16:25:12丑牛
日期:2015-01-20 09:39:23未羊
日期:2015-01-14 23:55:57巳蛇
日期:2015-01-06 18:21:36双鱼座
日期:2015-01-02 22:04:33午马
日期:2014-11-25 09:58:35辰龙
日期:2014-11-18 10:40:07寅虎
日期:2014-11-13 22:47:15申猴
日期:2014-10-22 15:29:50摩羯座
日期:2014-08-27 10:49:43辰龙
日期:2014-08-21 10:47:58
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-07-22 18:55 |只看该作者 |倒序浏览
获奖名单已公布,详情请看:http://bbs.chinaunix.net/thread-4094874-1-1.html

活动背景:
Java是目前用户最多、使用范围最广的软件开发技术之一。Java的技术体系主要由支撑Java程序运行的虚拟机、提供各开发领域接口支持的Java API、Java编程语言及许多第三方Java框架(如Spring、Struts等)构成。在国内,有关Java API、Java语言语法及第三方框架的技术资料和书籍非常丰富,相比之下,有关Java虚拟机的资料却显得异常贫乏。

Java虚拟机(Java Virtual Machine) 简称JVM Java虚拟机是一个想象中的机器,在实际的计算机上通过软件模拟来实现。Java虚拟机有自己想象中的硬件,如处理器、堆栈、寄存器等,还具有相应的指令系统。

这种状况在很大程度上是由Java开发技术本身的一个重要优点导致的:在虚拟机层面隐藏了底层技术的复杂性以及机器与操作系统的差异性。运行程序的物理机器的情况千差万别,而Java虚拟机则在千差万别的物理机上建立了统一的运行平台,实现了在任意一台虚拟机上编译的程序都能在任何一台虚拟机上正常运行。这一极大优势使得Java应用的开发比传统C/C++应用的开发更高效和快捷,程序员可以把主要精力集中在具体业务逻辑上,而不是物理硬件的兼容性上。在一般情况下,一个程序员只要了解了必要的Java API、Java语法,以及学习适当的第三方开发框架,就已经基本能满足日常开发的需要了,虚拟机会在用户不知不觉中完成对硬件平台的兼容及对内存等资源的管理工作。因此,了解虚拟机的运作并不是一般开发人员必须掌握的知识。

本期话题:
(1)Java虚拟机编程中您的一些小经验
(2)Java虚拟机技术的未来走向,会有哪些新特性

本期嘉宾:
CU论坛架构设计版版主:duanjigang
CU论坛架构设计版版主:dreamice

活动时间:
2013年7月21日-8月10日

本期奖品:
《深入理解Java虚拟机:JVM高级特性与最佳实践》图书5本

图书简介:


    原书名:Understanding the JVM:Advanced Features and Best Practices(2nd Edition)

    作者: 周志明   
    出版社:机械工业出版社
    ISBN:9787111421900
    上架时间:2013-5-30
    出版日期:2013 年6月
    开本:16开
    页码:433
    版次:2-1

样章下载:

论坛徽章:
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
2 [报告]
发表于 2013-07-24 12:09 |只看该作者
(1)Java虚拟机编程中您的一些小经验
没有直接的虚拟机编程,不过了解虚拟机的内存分配于释放是很有帮助的。在做jni调试的时候,了解java虚拟机的内存布局是很有好处的
(2)Java虚拟机技术的未来走向,会有哪些新特性
arm嵌入式吧,Android火了之后,java在嵌入式方面也有了迅速的发展。不过低性能平台上,根据实际优化java虚拟机还是很有必要的。

买过深入java虚拟机的红本,讲的很不错。这本应该更关注应用及性能,那个红本是讲解基础的,两个搭配的很好,哈哈

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
3 [报告]
发表于 2013-07-25 11:45 |只看该作者
我觉得吧这话题名字取得不好,Java虚拟机编程不仅没有需求,也没有必要,java平台流行的最大优势就是对计算机体系的屏蔽。
换个话题Java虚拟机某个子系统的讨论估计很多人就出来了。
java本身是一个平台,虚拟机的ABI类似实体处理器的指令集,太多的项目已经不涉及或者少涉及汇编,即便有涉及也是找现成的代码改。个人认为研究java汇编没太多实际意义,就算研究完了还得对应到物理机器的指令集。
另外的java包括类加载,比如现在很流行的OSGI,内存管理和调整,虚拟机平台的监控,java并发,安全等等,都比更底层的虚拟机编程有应用和实际意义。
java=cpu+os,单讨论cpu编程,除了搞安全的,个人认为意义不大

论坛徽章:
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
4 [报告]
发表于 2013-07-25 22:19 |只看该作者
回复 3# gvim


   
研究java汇编没太多实际意义


这点我不认可,Java汇编和反汇编是很有价值的,特别是最近Android火了之后,破解需求那是大大增加了.只是说可能正面需求比较少,但是在破解上却对不落下风的

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
5 [报告]
发表于 2013-07-25 22:38 |只看该作者
回复 4# rover12421

>>>最后一句
    除了搞安全的,个人认为意义不大

另外,andriod虚拟机你确定是用的java指令集和java类装载系统?

论坛徽章:
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
6 [报告]
发表于 2013-07-25 22:39 |只看该作者
红色是第一版,蓝色是第二版,还以为是新书...
对比了下目录,有些新内容.

话题中的:Java虚拟机编程,感觉说的太高深了,都不知道怎么说好.

其实关键是要说说和java实现细节有关的东西,不是简单的从文档上能看出来的.比如内存释放,性能监控.
我遇到的一个相关的问题是类加载器的,当时并不知道不同加载器中,就算加载的是同一个class,他们其实也是不相同的.
这个问题也是看了 深入理解JAVA虚拟机 这本书才了解的,所以特别喜欢这章---应该是两章,一章是<虚拟机类加载机制>,一章是<类加载及执行子系统的案例与实践>.
三次大规模"破坏"类加载的双亲委派模型的讲解对我印象很深刻

论坛徽章:
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
7 [报告]
发表于 2013-07-25 22:50 |只看该作者
回复 5# gvim


    最后一句没被我忽略了,不好意思.
    android虽然不是用的java那套指令,但是原理是一样的,包括类加载器.我有调试过Android的类加载器,他只是在整个app类维护了一个全局的ClassLoad的,机制很java的是一样的

论坛徽章:
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
8 [报告]
发表于 2013-07-25 22:52 |只看该作者
而且Android的dex是从jar转化过来的,针对他自己的系统做了优化,说明他们很多地方多是相通的

论坛徽章:
2
亥猪
日期:2014-03-19 16:36:35午马
日期:2014-11-23 23:48:46
9 [报告]
发表于 2013-07-25 22:58 |只看该作者
回复 7# rover12421


    那就没法谈了,原理一样的东西多了。java指令集和intel指令集原理还是一样的呢,java类文件格式和elf格式有什么原理上的区别吗?
另外通过PC行业这么多年的安全事故来看,指令集层面上出现漏洞的机率太少了,印象中只有intel有一次爆了bug。通过指令集层面找漏洞不如直接找系统和应用漏洞来的多。

论坛徽章:
0
10 [报告]
发表于 2013-07-25 23:44 |只看该作者
本帖最后由 zavakid 于 2013-07-25 23:44 编辑

(1)Java虚拟机编程中您的一些小经验
我是这么理解的,虚拟机编程,都是依附在JVM上面的语言编程,比如 java, scala,clojure,jruby 等。
总不能让我们直接写字节码吧,就算是实在没办法要写字节码,一般都是先写好java代码,再使用javac编译之后的字节码
所以,一般的我们所说JVM编程,我的理解都是我们所说的 java,scala,clojure 编程。
如果要说 JVM编程 中的经验,我觉得可以说说在JVM上编程的一些共同经验。

a. GC问题。只要是在JVM上运行的程序,都需要考虑到这个问题。每个应用都需要针对自己的业务特点,进行young,old,perm(perm会慢慢消失)的设置,还有各个区的GC算法设置。光是这个话题,都可以再开另一个讨论贴了。如果和设置好这些参数,需要了解一定的垃圾回收机制和算法。一般我们还会设置禁止显示GC,我们自己的代码可以不出现System.gc,但依赖的 jar 包就不能保证了。

b. 依赖问题。这一般也都是JVM 中 classloader 相关的。常见的场景是:明明可以编译通过,但是在运行时却报 method not found 等错误。很可能原因就是不同的jar包有相同的class,并且里面的内容不是一样的。这个场景就是我们俗称的 “jar hell”。如果使用maven,一般可以通过 dependency 插件来查找,避免将问题拖到运行时。但如果真的在运行时发生了,我们可以使用 classloader.getResource 打印出来看看该class是来自哪个jar的,这样可以很方便的找出原因。

c. JVM 版本管理。这个可能对于熟悉的人来说,就是体力活,但有工具不是更好吗?我推荐使用 jenv,国人开发的工具,应该会节约不少时间(特别是安装服务器的时候)



(2)Java虚拟机技术的未来走向,会有哪些新特性

大家都明白,java生态最宝贵的还是JVM平台,个人断言,以后 java 的地位会和其他JVM语言差不多(这里指的是JVM对语言的支持层面)
所以,以后JVM的发展,是希望有越来越多的语言构建在其上面。
这点从 JVM 中加入 dynamic 指令可以看出。
凭借着JVM超级稳定和高性能的优势(JVM上的高质量,稳定的jar包实在太多,这也是JVM生态圈很重要的优势),会有越来越多的语言会实现在JVM之上。
而在JVM上实现语言的一些需求,必将会加入到JVM的新特性中。

除此之外,模块化也应该是一个方向(但个人对OSGI不太感冒);JVM层面上对协程的支持,也是我个人的期待之一。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP