仓酷云

标题: JAVA教程之及时Java――为企业级市场热身仓酷云 [打印本页]

作者: 再现理想    时间: 2015-1-18 11:35
标题: JAVA教程之及时Java――为企业级市场热身仓酷云
轮性能微软曾做过一个例子,就是同一个项目用java和.net网页编程来作,结果开发周期,.net网页编程是java的一半,性能java是.net网页编程的十分之一,代码量java是.net网页编程的三倍。呵呵,这说明了什么,.net网页编程的全方位比java好。但是有的人说.net网页编程不能跨平台,这个问题我和我同学曾讨论过,都认为微软的.net网页编程很可能早都可以跨平台了,但是微软为了保护他们的操作系统,所以才没有推出跨平台的.net网页编程,只是推出了跨语言的.net网页编程,谈到“及时盘算(real-timecomputing)”,人们广泛存在一种曲解,即以为“及时体系”必定就是运转得很快的体系,并且几近只用于机器把持体系。在年夜多半情形下,及时体系切实其实必要很快的呼应速率,可是唯一“速率”是不敷以界说及时体系的。及时情况的真正中心在于,体系必需包管在预界说的工夫内实行完指定的义务,如许它的举动才是完整断定的。
对企业级使用程序来讲,部署在及时体系上有甚么上风(大概优势)呢?年夜多半情形下,没有分明的上风。只需满意了非功效性需求(负载才能、均匀呼应工夫、峰值呼应工夫等),使用程序就能够部署,用户也会以为中意。有些情形应不该该呈现——好比发给HR使用的哀求守候呼应的工夫比一般的用户哀求还要长——实在它发生的影响并没有一个能够丈量的尺度。可是,关于年夜多半金融、企业级使用程序来讲,不克不及在划定的工夫内完成某些义务很简单发生别的开支——大概是很年夜的开支。依照金融市场本人正确的说法,市场是瞬息万变的,盘算机买卖体系也意味着代价会以每秒钟数次的频次变更。假如体系中的某个部分决意以以后的代价举行一笔买卖,可是因为某些缘故原由这笔买卖被提早了,那末代价的一点巨大变更大概城市给用户带来伟大的丧失。假如这类提早频仍产生,那申明体系已是成绩重重了。
现实证实,Java言语和Java企业版平台在企业使用程序开辟中已十分盛行了。易于开辟、功能及牢靠性都令Java对开辟者充斥了勾引。可是,Java平台其实不撑持及时使用程序,即便在及时操纵体系上运转Java程序,也不克不及让程序取得更多切实其实定性。对Java使用程序来讲,断定性举动的最年夜停滞是由Java假造机(JVM)托管的内存办理体例。与初期的C和C++这些言语分歧,Java利用渣滓接纳器往返收那些使用程序不再利用的内存。如许做的缘故原由是为了打消“内存保守”——程序员健忘显式地开释那些不再利用的内存资本。呆板中的内存数目是无限的,假如这个毛病呈现在某些轮回中,那末体系终极会把内存耗尽。(这并非说,你能够在Java中完整掉臂内存保守的成绩;假如开辟者占据一个指向对象的援用不开释,渣滓接纳器仍旧不克不及接纳对象占用的内存)。
渣滓接纳器利用一个背景线程监控堆空间的变更,“堆”是存储一切Java对象的场合。渣滓接纳器能够辨认出不再被援用的对象,并接纳余暇出的内存。这些事情年夜多必要在堆外部将对象从一处复制到另外一处。为了避免大概呈现的数据溃散,接纳内存时,一切的使用线程(指那些会引发数据变更的线程,mutatorthreads)都必需停息。如今的JVM中,因为已对桌面使用程序举行了高度调优,这些停息都不容易发觉到。乃至对年夜部分企业级使用程序来讲,并行标志扫描(concurrent-mark-sweep)接纳器(也叫低停息接纳器,low-pausecollector)的使用也已把停息下降到了一个年夜多半使用能够承受的级别上。但不断定举动使Java其实不合用于那些相似于后面提到的关头级别企业使用程序。
为懂得决这个成绩,JCP构造(JavaCommunityProcess)创立了一个Java标准哀求(JSR),专门用于计划和完成Java的及时标准(RTSJ)。现实上,在肇端于1998年的JCP中,它是一个十分初期的JSR。JSR的专家组为标准的创立指定了几条引导准绳。当我们思索企业级使用程序的合用性时,个中的三条准绳值得存眷:
RTSJ胪陈了扩大了Java语义的八个范畴:
RTSJ中的线程能够是下述三品种型之一:非及时线程、软及时线程和硬及时线程。非及时线程对照简单了解,由于它不会为某些举措设置必需完成的详细刻日。JVM大概在任何便利的时分调剂它们,渣滓接纳发生的影响也是微乎其微的。软及时线程会为举措的完成设置一个终极刻日。但它的“终极刻日”有必定的盘旋余地,因而,即便一个举措比划定的工夫略微晚一些才完成,一切的事变仍旧可以一般运转、不会呈现任何成绩。对硬及时线程来讲,它们请求举措必需在终极刻日之前完整完成;假如做不到的话,会发生一个不成恢复的(unrecoverable)毛病。RTSJ使用程序能够同时运转这三品种型的线程。选择哪一种范例的线程,则由使用程序的计划者和合用于线程所唱工作的主要级别来决意。下图显现了这些分歧范例的线程之间的干系:
JAVA教程之及时Java――为企业级市场热身仓酷云
登录/注册后可看大图

<br>
RTJS中的线程
典范地,线程要一般事情就必需与使用程序互换数据。因为硬及时线程不克不及依附于非及时线程为它及时地发送了局,因而利用一个无守候(wait-free)的数据传送行列能够包管硬及时线程不会被其他线程堵塞。
利用现有的Thread类、不做任何修改,就可以创立一个非及时线程。创立软及时线程必要利用RealtimeThread类,它是Thread的子类。这个类的机关函数能够带有可选的优先级参数和释出(release)参数,以此来界说JVM怎样调剂线程。创立硬及时线程则必要利用RealtimeThread的子类NoHeapRealtimeThread。从这个类的称号中,你也许可以取得JVM怎样完成硬及时线程的一些线索;会商内存办理的时分,我们还会再具体地会商这个成绩。
把现有的使用程序转化为及时使用程序,最复杂的做法就是用RealtimeThread类复杂交换倡议新线程的代码。固然如许只把使用程序转为了软及时,可是能够看出,转换历程十分简单。
尺度的JavaThread类包括了“优先级”的观点,比起低优先级的线程,优先级高的线程会被优先选择。在RTSJ中,这个观点被进一步扩大了,标准中称,完成必需撑持最少28个分歧的优先级。由于优先级是用整数暗示的,以是标准的完成能够供应更多的优先级别。标准还指出,高优先级线程永久优先于低优先级线程,当更高优先级的线程入手下手运转时,它会抢占以后运转线程的地位。中的类体现了上述信息:
JAVA教程之及时Java――为企业级市场热身仓酷云
登录/注册后可看大图

<br>
线程实行优先级
PriorityParameters类封装了暗示线程优先级的整数。假如多个线程具有不异的优先级,那末能够用一个importance属性与线程联系关系起来,来指定哪一个线程能够取得更年夜的优先权。
及时体系中有一个很主要的看法:及时体系应当有才能提早判别出它们是不是满意使用程序的需求。为了做到这一点,体系必需经由过程单调速度剖析(ratemonotonicanalysis)晓得义务的细节。RTSJ经由过程开释参数搜集这些信息。类的条理布局如所示:
JAVA教程之及时Java――为企业级市场热身仓酷云
登录/注册后可看大图

<br>
开释参数
ReleaseParameters类包括线程的工夫开支(这是平台相干的,假如使用程序迁徙到分歧的平台上,了局也会有变更)、义务必需完成的终极刻日,和处置超越工夫开支或错过终极刻日这两种情形的处置器。能够处置的线程的范例既能够是周期性的,也能够非周期的,在后面的情形中,线程会依照一个流动的频次反复实行,后者则是线程能够在任什么时候候启动。假如硬及时体系中包括非周期的义务,这类情形下是不成能剖析准确性的,以是引进了“零散义务(sporadictask)”的观点。零散义务为非周期义务分派一个最小频次,如许能够把它当作周期义务看待,从而可以对体系举行剖析。将一个非周期义务转化成零散义务其实不会改动程序运转的体例,它只是让体系可以判别本人是不是满意及时的需求了。
RTSJ还必需完成一种机制,以避免所谓的优先级颠倒(priorityinversion)征象。申明了这个成绩:
JAVA教程之及时Java――为企业级市场热身仓酷云
登录/注册后可看大图

<br>
优先级颠倒
就像标准请求的那样,一个低优先级线程(优先级P3)猎取了一个对象的锁,会被一个高优先级(优先级P1)的线程争取实行权。P1线程必要统一个对象上的锁,可是在P3线程开释它之前,P1没法失掉锁。其他次高优先级(优先级P2)的线程不休地拦阻P3运转和开释锁。实践看到的效果是P2优先级的线程要优先于P1线程,而这并非标准里请求的。有两种办法能够制止这类情形。第一种是优先级承继。假如体系检测到P3线程正在持有一个P1线程必要的锁,则会把P3线程的优先级置为P1,直到它开释了锁。这类办法不必要开辟者修正任何代码。第二种办法是利用优先级封顶摹拟(priorityceilingemulation)。关于第二种办法,开辟者必需分明一个现实:持有锁的线程必要提升本人的优先级,并且必需在代码中显式地挪用来到达这一目标。这类办法在RTSJ中是可选的。
关于内存办理,RTSJ用到了一个“内存域”的观点。它的类布局如所示。
JAVA教程之及时Java――为企业级市场热身仓酷云
登录/注册后可看大图

<br>
及时体系的内存域
因为渣滓接纳会激发不断定的停息,因而一切硬及时线程都必需利用不会受渣滓接纳器影响的内存。有两种办法能够做到:Scoped内存和Immortal内存。
Scoped内存就是一块内存,它有一个由使用程序开辟者界说的性命期。开辟者会创立一个指定巨细的Scoped内存域,当实例化一个对象的时分,会从这个域内分派一块空间给它。Scoped内存有两种,线性的(linear)和可变的(variable)——这是指它们实例化一个对象所需的工夫。LTMemory类暗示如许的内存域,在这里实例化一个对象的工夫即是流动的分派工夫加上不定的初始化工夫。因为初始化工夫间接与对象的巨细成比例,因而工夫是线性的,而不是常量。VTMemory类暗示的内存域则是如许的,其内存分派机制可使用任何算法,因而工夫也是千差万其余。一旦Scoped内存中的一切对象都不再被援用了,它就会被开释以备再次利用。利用Scoped内存的一种场景是:创立Scoped内存域,以供一个NoHeapRealTimeThread线程利用。当线程实行到一切已知对象都不再被援用的时分,内存域就能够被开释了。
Immortal内存,望文生义,它永久不会被接纳。它被一切线程共享,只要那些开辟者确认会随JVM一向存在的对象才合适在这里初始化。
RTSJ标准还同意开辟者做一些在尺度版Java中不成能办到的事:间接会见物理内存。不外这项功效更多地用于嵌进式及时使用,而不是企业使用,以是本文就不做过量的会商了。
正如你看到的,RTSJ供应了局限十分广的功效,同意企业级使用程序能够夹杂运转非及时线程、软及时线程和硬及时线程。对金融体系这类“工夫就是款项”的使用程序来讲,可让临界区的代码做为硬及时线程运转,从而制止渣滓接纳器发生的不断定性举动。跟着RTSJ2.0的公布,已有一个参考完成可用了,它必要在收费牢靠的开源Solaris10操纵体系情况下运转,Solaris10具有一个及时的调剂器(为了在JVM中供应及时的功效,底层的操纵体系也必需撑持及时的观点)。
企业使用的一个分明趋向是利用具有及时才能的使用服务器。Sun的工程师已将GlassFish开源使用服务器移植到RTSJ标准上了(在5个小时以内)。IBM也正在抓紧开辟一款及时的WebSphere产物。当你为企业使用评价是不是利用及时Java的时分,请记着:没有收费的午饭。你大概取得了呼应工夫的包管,但它却会影响到体系的总吞吐量。可是,假如你的Java程序切实其实、切实其实不克不及受渣滓接纳的影响,必需要在必定的工夫内呼应,与其对毛病的低几率保有幸运,不如利用RTSJ。
链接


关于作者

SimonRitter专门研讨新兴的手艺,包含网格盘算、RFID、无线传感收集、呆板人手艺和可穿着盘算。Simon从1984就入手下手处置IT行业了,持有英国BrunelUniversity物理学学士学位。他本来处置UNIT开辟,前后任职于AT&TUNIT体系实行室和Novell,Simon于1996年到场Sun,并入手下手了与Java手艺相干的事情;如今全职处置Java开辟和征询。
检察英文原文:Real-TimeJavafortheEnterprise
来自:http://www.infoq.com/cn/articles/real-time-java

轮性能微软曾做过一个例子,就是同一个项目用java和.net网页编程来作,结果开发周期,.net网页编程是java的一半,性能java是.net网页编程的十分之一,代码量java是.net网页编程的三倍。呵呵,这说明了什么,.net网页编程的全方位比java好。但是有的人说.net网页编程不能跨平台,这个问题我和我同学曾讨论过,都认为微软的.net网页编程很可能早都可以跨平台了,但是微软为了保护他们的操作系统,所以才没有推出跨平台的.net网页编程,只是推出了跨语言的.net网页编程,
作者: 若天明    时间: 2015-1-21 10:39
你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。
作者: 冷月葬花魂    时间: 2015-2-5 14:53
Java 编程语言的风格十分接近C、C++语言。
作者: 活着的死人    时间: 2015-2-9 08:06
Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
作者: 乐观    时间: 2015-2-22 11:41
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
作者: 深爱那片海    时间: 2015-3-7 00:17
是一种为 Internet发展的计算机语言
作者: admin    时间: 2015-3-13 23:07
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
作者: 莫相离    时间: 2015-3-20 21:15
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者: 不帅    时间: 2015-3-24 18:30
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
作者: 若相依    时间: 2015-3-30 03:54
是一种突破用户端机器环境和CPU
作者: 简单生活    时间: 2015-3-30 05:57
Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站
作者: 第二个灵魂    时间: 2015-4-16 12:10
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
作者: 因胸联盟    时间: 2015-4-17 00:13
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
作者: 再见西城    时间: 2015-6-22 23:04
一直感觉JAVA很大,很杂,找不到学习方向,前两天在网上找到了这篇文章,感觉不错,给没有方向的我指了一个方向,先不管对不对,做下来再说。
作者: 蒙在股里    时间: 2015-6-23 21:02
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
作者: 兰色精灵    时间: 2015-6-24 15:39
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
作者: 愤怒的大鸟    时间: 2015-7-1 13:34
Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台
作者: 飘飘悠悠    时间: 2015-7-5 01:49
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
作者: 再现理想    时间: 2015-7-7 21:15
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2