免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
11 [报告]
发表于 2013-07-26 14:31 |只看该作者
(1)Java虚拟机编程中您的一些小经验
1.关注GC,这个是你追求高性能程序在java虚拟机编程最需要关注的地方.
2.深入了解Java虚拟机的提供的并发机制.能让写出更健壮的程序.
3.在做JNI开发时候,需要特别注意Java虚拟机制对程序带来的影响.
4.在开发OSGI程序时候,对classloader加载机制深入了解.
5.对Java虚拟机提供监控和调试工具深入使用方面对Jvm机制有深入理解.
(2)Java虚拟机技术的未来走向,会有哪些新特性
1.java虚拟机未来比较重要的方向对动态语言支持例如:JavaScrpit引擎,Dynamic指令等对动态语言更好的支持.以后在Jvm上运行scala,clojure等函数编程语言运行效率会有所提高.
2.Java虚拟机未来在Gc上的优化随着G1的广泛使用,会带来更好的运行效率.
3.JavaFx的支持以后在图形化方面会带来更好的体验.
4.Java虚拟机对Java以后模块化支持更加优秀.
5.Jvm对大Heap的支持,估计会以后加强一个方面.

论坛徽章:
0
12 [报告]
发表于 2013-07-26 17:19 |只看该作者
回复 10# zavakid


    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
13 [报告]
发表于 2013-07-26 17:34 |只看该作者
听起来很高深,没弄过,学习学习。不过虚拟机这个概念真的是很强大的一个发明,极大的方便了跨平台,而一些底层头疼的需要考虑的垃圾回收什么的都直接由虚拟机代劳了,省时省边提高开发效率。虚拟机还对程序的调试有着极大的好处吧,单步、调用栈什么的太简单,同时很容易地做各种性能统计,方便开发调试、调优。

论坛徽章:
0
14 [报告]
发表于 2013-07-28 10:20 |只看该作者
回复 11# redcap0


    没错,对GC的诊断是在JVM上编程必备的技能。 jstack,jmap, jstat 等常用工具,除此之外, btrace, houseMD 等这些工具会大大提升效率。

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


同意。国内很多人把老外的APK程序进行反向,然后汉化,并加入自己的名字、广告等,重新发布。这么做的人有点多。

论坛徽章:
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
16 [报告]
发表于 2013-07-28 19:11 |只看该作者
本帖最后由 jieforest 于 2013-07-28 19:38 编辑

1、Java虚拟机编程中您的一些小经验
在Java虚拟机编程中,我的一些经验:
如果程序中使用到线程,那么相关的类和方法一定要是“线程安全”的代码。
在多核平台下编写Java程序,有一些优化技巧,如下:
1)代码优化
· 线程数要大于等于核数
· 尽量减少共享数据写操作
· 使用synchronize关键字
· 使用乐观策略
· 使用线程本地变量(ThreadLocal)
· 类中Field的排序
· 批量处理数组
2)JVM优化
· 启用大内存页
· 启用压缩指针
· 启用NUMA
· 激进优化特性
· 逃逸分析
· 高吞吐量GC配置
· 低延迟GC配置

2、Java虚拟机技术的未来走向,会有哪些新特性
Java虚拟机技术的未来走向,大约有以下几点:
1)模块化
模块化是解决应用系统与技术平台越来越复杂、越来越庞大问题的一个重要途径。无论是开发人员还是产品最终用户,都不希望为了系统中一小块的功能而不得不下载、安装、部署及维护整套庞大的系统。站在整个软件工业化的高度来看,模块化是建立各种功能的标准件的前提。最近几年OSGi技术的迅速发展、各个厂商在JCP中对模块化规范的激烈斗争,都能充分说明模块化技术的迫切和重要。从Java7和Java8的发布版本来看,OSGi化越来越强,说明模块化确实是未来的一大趋势。
早在2007年,Sun公司就提出过JSR-277:Java模块系统(Java Module System),试图建立Java平台的模块化标准,但受挫于以IBM公司为主导提交的JSR-291:JavaSE动态组件支持(Dynamic Component Support for JavaSE,这实际就是OSGiR 4.1)。由于模块化规范主导权的重要性,Sun公司不能接受一个无法由它控制的规范,在整个Java SE 6期间都拒绝把任何模块化技术内置到JDK之中。在Java SE 7发展初期,Sun公司再次提交了一个新的规范请求文档JSR-294:Java编程语言中的改进模块性支持(Improved Modularity Support in the Java Programming Language),尽管这个JSR仍然没有通过,但是Sun公司已经独立于JCP专家组在OpenJDK里建立了一个名为Jigsaw的子项目来推动这个规范在Java平台中转变为具体的实现。Java的模块化之争目前还没有结束,OSGi已经发布到R5.0版本,而Jigsaw从Java7延迟至Java8,在2012年7月又不得不宣布推迟到Java9中发布,从这点看来,Sun在这场战争中处于劣势,但无论胜利者是哪一方,Java模块化已经成为一项无法阻挡的变革潮流。
JVM上支持的语言:
图1

图2


2)混合语言
当单一的Java开发已经无法满足当前软件的复杂需求时,越来越多基于Java虚拟机的语言开发被应用到软件项目中,Java平台上的多语言混合编程正成为主流,每种语言都可以针对自己擅长的方面更好地解决问题。试想一下,在一个项目之中,并行处理用Clojure语言编写,展示层使用JRuby/Rails,中间层则是Java,每个应用层都将使用不同的编程语言来完成,而且,接口对每一层的开发者都是透明的,各种语言之间的交互不存在任何困难,就像使用自己语言的原生API一样方便,因为它们最终都运行在一个虚拟机之上。Clojure、JRuby、Groovy等新生语言的使用人数不断增长,而运行在Java虚拟机(JVM)之上的语言数量也在迅速膨胀。这两点证明混合编程在我们身边已经有所应用并被广泛认可。通过特定领域的语言去解决特定领域的问题是当前软件开发应对日趋复杂的项目需求的一个方向。

3)多核并行
如今,CPU硬件的发展方向已经从高频率转变为多核心,随着多核时代的来临,软件开发越来越关注并行编程的领域。早在JDK 1.5就已经引入java.util.concurrent包实现了一个粗粒度的并发框架。而JDK 1.7中加入的java.util.concurrent.forkjoin包则是对这个框架的一次重要扩充。Fork/Join模式是处理并行编程的一个经典方法。虽然不能解决所有的问题,但是在此模式的适用范围之内,能够轻松地利用多个CPU核心提供的计算资源来协作完成一个复杂的计算任务。通过利用Fork/Join模式,我们能够更加顺畅地过渡到多核时代。

4)进一步丰富语法
Java 5曾经对Java语法进行了一次扩充,加入了自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环等语法,使得Java语言的精确性和易用性有了很大的进步。在Java 7(由于进度压力,许多改进已推迟至 Java 8)中,对Java语法进行了另一次大规模的扩充。Sun(已被Oracle收购)专门为改进Java语法在OpenJDK中建立了Coin子项目来统一处理对Java语法的细节修改,如二进制数的原生支持、在switch语句中支持字符串、“< >”操作符、异常处理的改进、简化变长参数方法调用、面向资源的try-catch-finally语句等都是在Coin项目之中提交的内容。
尤其值得一提的是,Java 8将会加入对Lambda表达式的支持。

论坛徽章:
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
17 [报告]
发表于 2013-07-29 09:47 |只看该作者
而了解虚拟机的运作,
可能正面需求比较少,
并不是一般开发人员,必须掌握的知识。

论坛徽章:
0
18 [报告]
发表于 2013-07-30 20:24 |只看该作者
回复 17# pitonas


    现在开始已经变为一般开发人员也需要掌握的知识了

论坛徽章:
0
19 [报告]
发表于 2013-07-30 23:39 |只看该作者
我只是用java写写小程序,应该不用了解虚拟机的运作吧

论坛徽章:
0
20 [报告]
发表于 2013-07-31 12:32 |只看该作者
我多年从事C++编程,也用Java编程,Java的诸多优点让我心里赞叹。我使用Java,享受它带来的种种益处,可是却很少研究java虚拟机本身。多年前资料很少,我只有一本Bill Venners的“深入Java虚拟机”(中文版)。这是远不够的。现在资料比十年前丰富,而且jdk及Sun Hotspot虚拟机也早开放源代码了。不过,作为和大家一样的开发人员,我觉得虚拟机还是不容易入门。我很少看到有简明易懂的文章,阐述虚拟机的实现技术或原理,无论是这方面还是那方面。比如,对我个人来说,从来没有搞懂垃圾回收怎么实现?我希望看到简明易懂的文章,却没有看到过。我正打算写一个供初学者学习用的Java虚拟机实现。目标是实现虚拟机的基本功能:能解析class文件,能执行虚拟机的大多数指令。因为象Hotspot是很成熟的虚拟机,会有许多优化,不太适合初学者。找来找去,没有看到一个容易学的虚拟机参考实现。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP