梦在远方,路在脚下
posts - 2, comments - 1, trackbacks - 0, articles - 8

2008年12月12日

一件事无论太晚,或者对我来说太早,
都不会阻拦你成为你想成为的那个人
这个过程没有时间的限制
你要你想,随时都可以开始
要改变或者保留原状都无所谓
做事本不应有所束缚
我们可以办好这件事却也可以把它搞砸
但我希望最终你成为你想成为的人
我希望你有时能驻足于这个令你感到惊叹的世界
体会你从未有过的感觉
我希望你能见到其他与你观点不同的人们
我希望你能有一个值得自豪的一生
如果和你想象的生活不一样
我希望你能有勇气,重新启程。
For what is worse it's never too late or in my case too early to be whoever you wanna be.
There's no time limit,start whenever you want
You can change,or stay the same
There's no rule to the thing.
We can make the best or the worst time
I hope you make the best of it.
I hope you see things that startle you
I hope you feel things that you never felt before
I hope you meet people with the different points of  you
I hope you live life you proud of
If you find that you not,
I hope you, have strength to start all over again.

posted @ 2009-02-11 00:19 栗衙 阅读(156) | 评论 (0)编辑 收藏

 

1Web Service

Web Service:是一个较新得分布式服务组件。本质是以标准化得方式实现企业内外各个不同服务系统之间得互调或者集成。

Web Service:通过SOAPWeb上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册。



2WSDLWeb Service Description Lanaguage

基于Xml格式得关于Web服务得描述语言。

如一段代码:

package com.sample.ejb.sessionbean;

public interface UserAccountMgr extends javax.ejb.EJBObject {

   
public boolean checkUserLogin( java.lang.String loginName,java.lang.String password );

}


WSDL
得三部分得描述:


1) Type代码:

 <wsdl:types>
     
<!--服务接口方法-->  
     
<element name="checkUserLogin">
      
<complexType>
       
<sequence>
        
<!--输入参数及其类型-->
        
<element name="loginName" nillable="true" type="xsd:string"/>
        
<element name="password" nillable="true" type="xsd:string"/>
       
</sequence>
      
</complexType>
   
<!--返回结果的类型-->
      
<element name="checkUserLoginResponse">
       
<complexType>
        
<sequence>
         
<element name="checkUserLoginReturn"  type="xsd:boolean"/>
        
</sequence>
       
</complexType>
     
</element>
</wsdl:types>

 

2) Message代码

<!--请求消息--> 
  
<wsdl:message name="checkUserLoginRequest">

      
<wsdl:part name="in0" type="xsd:string"/>

      
<wsdl:part name="in1" type="xsd:string"/>

   
</wsdl:message>
<!--返回消息-->
   
<wsdl:message name="checkUserLoginResponse">

      
<wsdl:part name="checkUserLoginReturn" type="xsd:boolean"/>

   
</wsdl:message>


3) PortType代码

<!--服务接口-->
   
<wsdl:portType name="CheckUserLoginMgr">
<!--所包含得服务接口方法-->
      
<wsdl:operation name="checkUserLogin" parameterOrder="in0 in1">
<!--服务接口方法所对应得请求消息和返回消息-->
         
<wsdl:input message="impl:checkUserLoginRequest" name="checkUserLoginRequest"/>
         
<wsdl:output message="impl:checkUserLoginResponse" name="checkUserLoginResponse"/>
         
<wsdl:fault message="impl:ApplicationException" name="ApplicationException"/>
      
</wsdl:operation>
   
</wsdl:portType>


2How部分

<wsdl:binding name="checkUserLoginServiceSoapBinding" type="impl:CheckUserLoginMgr">
      
<wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
      
<wsdl:operation name="checkUserLogin">
         
<wsdlsoap:operation soapAction=""/>
         
<wsdl:input name="checkUserLoginRequest">
            
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:7001/webModule/services/checkUserLoginService" use="encoded"/>
         
</wsdl:input>
         
<wsdl:output name="checkUserLoginResponse">
            
<wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://localhost:7001/webModule/services/checkUserLoginService" use="encoded"/>
         
</wsdl:output>
         
<wsdl:fault name="ApplicationException">
            
<wsdlsoap:fault encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" name="ApplicationException" namespace="http://localhost:7001/webModule/services/checkUserLoginService" use="encoded"/>
         
</wsdl:fault>
      
</wsdl:operation>
   
</wsdl:binding>

   

3Where部分

   <wsdl:service name="CheckUserLoginMgrService">

      
<wsdl:port binding="impl:checkUserLoginServiceSoapBinding" name="checkUserLoginService">

         
<wsdlsoap:address location="http://localhost:7001/webModule/services/checkUserLoginService"/>

      
</wsdl:port>

   
</wsdl:service>


3SOAPSimple Object Application Propotol

SOAP作用:请求(request)消息将客户端请求消息发给服务器

            答复(response)消息,从服务器返回给客户端消息

服务A需要创建相应得SOAP请求消息,并发给服务B。包括服务接口,服务接口方法,参数值等信息。通过SOAP/HTTP传输方式传到服务BWSDL文件中指定得URL地址

4UDDL

Universal Description, Discovery and Integration将自己得服务注册到相应得UDDL商用注册网站上去

以资源共享的方式由多个运作者一起以Web Service的形式运作UDDI商业注册中心。

  UDDI计划的核心组件是UDDI商业注册,它使用XML文档来描述企业及其提供的Web Service

  UDDI商业注册提供三种信息:

  White Page包含地址、联系方法、已知的企业标识。

  Yellow Page包含基于标准分类法的行业类别。

  Green Page包含关于该企业所提供的Web Service的技术信息,其形式可能是指向文件或URL的指针,而这些文件或URL是为服务发现机制服务的。

posted @ 2009-02-11 00:08 栗衙 阅读(533) | 评论 (0)编辑 收藏

抽象类与接口

1 定义

抽象类:所有的对象都是通过类来描绘的,但是反过来却不是这样。并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。

例如

2 语法

2.1 abstract class

可以有自己的数据成员

有非abstarct的成员方法

继承关系,一个类只能使用一次继承关系

可以赋予方法的默认行为

因为如果后来想修改类的界面(一般通过abstract class或者interface来表示)以适应新的情况(比如,添加新的方法或者给已用的方法中添加新的参数)时,就会非常的麻烦,可能要花费很多的时间(对于派生类很多的情况,尤为如此)。但是如果界面是通过abstract class来实现的,那么可能就只需要修改定义在abstract class中的默认行为就可以了。

    同样,如果不能在抽象类中定义默认行为,就会导致同样的方法实现出现在该抽象类的每一个派生类中,违反了"one ruleone place"原则,造成代码重复,同样不利于以后的维护。因此,在abstract classinterface间进行选择时要非常的小心。

2.2 interface

只能够有静态的不能被修改的数据成员

所有的成员方法都是abstract

实现关系,一个类却可以实现多个interface

不可以赋予方法的默认行为

3 设计理念

abstarct class:父类和派生类之间必须存在"is a"关系,即父类和派生类在概念本质上应该是相同的

3.1 interface

不要求interface的实现者和interface定义在概念本质上是一致的,仅仅是实现了interface定义的契约而已

4 实例

AlarmDoor在概念本质上是Door

同时它有具有报警的功能

abstract class Door {

abstract void open();

abstract void close()

}

interface Alarm {

void alarm();

}

class AlarmDoor extends Door implements Alarm {

void open() { … }

void close() { … }

void alarm() { … }

}

posted @ 2009-02-03 12:21 栗衙 阅读(189) | 评论 (1)编辑 收藏

人,必须在各种各样的社会环境中生存。同学间、同事间、夫妻间、朋友间、与上司、与远亲、与近邻、与路人,每个场合所应该采取的应对方式都不同,除了要充分洞察现实环境之外,没有成熟失格,是很难适应这些复杂多歧、瞬息万变的环境的。

  谈到人格是什么,应该讲它是先天体质结合的"气质",后天发展的"性格",以及"能力"、等等归纳而成的。通常我们称之为"人品"。它和一个人的素质、情绪性、行动倾向、行动样式、习性、态度等都有不可分割的密切关系。

  被称为"人格研究界第一人"的哈佛教授G·W·欧尔波特(1897-1967),运用现象学中的观察法研究人格的成熟度,并在他的《人格开态与成长》中,提出了成熟人格的六要素,作为"人格成熟的基准"。
1、自我意识(自我感觉)的扩大

  人在婴儿时期,只知道爱自己,不久,自我意识扩大到母亲、朋友身上。成人以后,不管是谁,对于自己的衣服、金钱、所有物,都有“这是我的东西“的意识。为限于这么低的层面,而能扩及到职业、家庭--甚至扩大到所属的集团、地域社会、国家的话,便可视为成熟人格的表征之一。
2、和他人的密切联系

  由于自我意识的扩大,对于周围的人,也能建立亲密感及同感。不会随便在背后说人怀话、挑人毛病、发牢骚、嫉妒、讽刺等等、尊重对方,宽容对方,不排斥对方,即使是男女之爱,除了被爱之外,也渴望爱人,而且能接受伴侣目前的状况,懂得包容对方的缺点。
3、情绪的安定(自我包容)

  把自己的愤怒、恐惧、激情、性的冲动,都当作是一种“自我情绪“来处理。不盲目地压抑,也不钻牛角尖,所以没有罹患恐惧症及强迫神经症之虞。以尽量不和周围环境起冲突的方式来处理。而且,碰到挫折、欲求不满时也具有相当的耐力,不会乱发脾气、牢骚,也不会随便责怪他人、自怜自艾。时时反省自己、等待时机,寻求解决问题的方法,避免情绪不巡,或是能克服情绪不安。

  当然,一个具有成熟人格的人,也不是就能随时保持冷静、沉着。既然是人类,就免不了有喜、怒、哀、乐等心情的转换,有时也会莫名其妙地忧郁。但他绝不会被这些情绪影响,则作出冲的行为,有损别人的福利,既能保持自己的情绪状态,又能愉快地生活,这种情绪的安定,是由“均衡感“以及能自我控制所造就的。即使遭遇危险,也不会慌慌张张、不安畏怯,对别人的情绪表现也不会感到有威胁感。

4、具对现实的知觉、技能

  能够正确的认知现实,而且具备解决问题的技能。虽然有高度智慧的人,不一定都是具有成熟人格的人,但是,智慧却是成熟人格所不能欠缺的部分。对自己的职业欠缺技能(家庭主妇的话就是家事),即使在其他点上合格,也不能说是成熟的人格。

  另外,投入自己工作的能力,也和正确的认知、技能一样重要。所谓投入工作的能力,是指有某个课题的时候,那种忘我投入的工作热心感而言。

5、自视客观--洞察和幽默

  以自我为对象,客观地视察,也就是说要真正地洞察自己、了解自己。很多人认为自己很了解自己,其实真能称得上了解自己的人并不多。

  除了洞察自己之外,还要有幽默的感觉。真正的幽默,是保持某种距离凝视自己,认知理想的自己和实际上自己的对照,并感到的“滑稽“。幽默和粗野的嘲笑、无意义的笑料、攻击性的调侃等不同。

  幼儿会感觉到别人的滑稽可笑,却不具备笑自己的能力,青年也是一样。失败的时候,往往无法一笑置之,容易视为苦痛。

  其实,人生就像一场戏,能够客观地凝视自己所扮演的角色,同时以幽默的态度面对生命中的起起落落,才是成熟人格的表现。

6、统一的人生哲学

  把自己的人生当作有意义的东西,具有统一人生各种活动的人生哲学。这里所说的哲学,并不是指专门性的学说,而是个人的生活信条、生活目标的意思。即把什么当作人生最高的价值,应该以哪种方式生活,都订定了方针。说是具有自己独特的人生观也行。欧尔波特还认为宗教情操及良心,是成熟人格的最基本条件

posted @ 2009-02-01 14:47 栗衙 阅读(180) | 评论 (0)编辑 收藏

cat由第一行开始显示文件内容
tac
从最后一行开始显示
nl
显示同时输出行号
more
一页一页的显示内容
less
more类似,但其优点是,可以往前翻页
head
只看头几行
tail
只看未尾几行
od
以二进制的方式读取文件内容

cat[-n]
-n
连行号一起输出到屏幕上nl相似

more[
文件名]
more test.txt
test.txt一页一页的显示出来
ls -al | more
ls显示的内容一页页显示出来

less[
文件名]
less
的用法比more更有弹性,使用less可以用pageuppagedown翻看
less test.txt
/word
test.txt中搜寻word这个字符串
q
:退出less

head[-n number] [
文件名]
-n
显示number
head -n 20 test.txt
显示test.txt20

tail [-n number] [
文件名]
-n
显示number

tail -n 20 test.txt
显示test.txt20


head -n 20 test.txt | tail -n 10
11-20

posted @ 2009-01-19 18:19 栗衙 阅读(290) | 评论 (0)编辑 收藏

 red hat 9装在虚拟机vmware上之后,连接网络是出现问题 Determining IP information for eth0... failed; no link present. Check cable 

这个问题,搞了很长时间,一直以为是自己的设置没设对,最后发现是redhat的一个bug,考,郁闷。
解决方法:
/etc/sysconfig/network-scripts/ifcfg-eth<n>
  /etc/sysconfig/networking/devices/ifcfg-eth<n>  
其中<n>表示Ethernet adapter的标识数字,一般为0。当为零的时候,就是

  /etc/sysconfig/network-scripts/ifcfg-eth0 
  /etc/sysconfig/networking/devices/ifcfg-eth0   
这两个文件中加入
 
 check_link_down () {
       return 1;

    }

posted @ 2009-01-19 18:17 栗衙 阅读(323) | 评论 (0)编辑 收藏

1.启动vsftp: /sbin/service vsftpd start  备注d代表再后台启动。
2.查看是否启动,就登陆到FTP试试。 登陆FTP:ftp localhost 退出FTP:bye
3.查看Linux IP :ifconfig
在控制管理台下可看见如下代码:可以看出,IP Address 是:192.168.0.128
 
4.如果局域网内访问FTP不成功,IP 是开得,那么考虑可能是防火墙问题 关闭防火前:Service iptables stop
5、FTP所在根目录:  /var/ftp
6、由于匿名上传不会成功,所以配置上传用户:
    A、etc 目录下more vsftp.user_listmore vsftp.users 
    B、  vi vsftp.user_list

    C、  加一个#注释掉ROOT。 存盘退出。
7、 FTP 机器启动就跟着启动:

    Chkconfig -–list | more

    Chkconfig –-list | grep vsftpd

    然后做这个东西:Chkconfig vsftpd on 启动级别变成开始

用LeapFTP 3.0配置好IP和用户即可访问FTP

posted @ 2009-01-19 18:13 栗衙 阅读(1466) | 评论 (0)编辑 收藏

 

今天看了下礼物这本书。其实那句话在功夫熊猫里边就有。就是:
   yesterday is history,tomorrow is mystery,but today is a gift,and there is why call it is a present

书里边还有其他得。记录下来,鼓励一下自己,把心思最好放在当前这一秒,认真对待这一秒发生得所以事情

1当你全身心投入你正在做得事情时,心思就不会游离不定。你享受生活,你也会更快乐更有效率,你下决定只关注那一刻发生得事情,那种集中和专注将带领你走向成功。
2
 礼物就是把握此刻,全神贯注于正在发生得事。珍惜和欣赏每天得到得东西。
3
即使在最艰难得环境中,只要你专注于此刻美好得事,现在就能感到更加快乐。这将给你说需得力量和自信。
4
痛苦,就是现实和理想之间得差距。此刻得痛苦和其他所有东西一样,是不断变化得。它会出现也将消失。当你完全专注于此刻,感受到了痛苦并饱受折磨得时候,你就可以开始寻找一些好得方面,然后再此基础上回复信心和勇气
5
把握此刻,就不能分心旁顾,而要专注于此刻重要得事情。你将注意头像此刻,就创造除属于自己得此刻,这也是你给自己最好得礼物。
6
专注于此刻正在发生得事情。发现其中好得方面,并在此基础上建立信心和勇气。将注意力放在此刻重要得事情上
7
你无法改变过去,但可以从中学习。

posted @ 2009-01-19 17:50 栗衙 阅读(159) | 评论 (0)编辑 收藏

 

早期的Java

  Oak语言的吉祥物,Duke

Java平台和语言最开始只是升阳公司在1990年12开始研究的一个内部项目。升阳公司的一个叫做帕特里克•诺顿的工程师被升阳自己开发的C++和C语言编译器搞得焦头烂额,因为其中的API极其难用。帕特里克决定改用NeXT,同时他也获得了研究公司的一个叫做“Stealth 计划”的项目的机会。

“Stealth 计划”后来改名为“Green计划”,詹姆斯•高斯林和麦克•舍林丹也加入了帕特里克的工作小组。他们和其它几个工程师一起在加利福尼亚州门罗帕克市沙丘路的一个小工作室里面研究开发新技术,瞄准下一代智能家电(如微波炉)的程序设计,升阳公司预料未来科技将在家用电器领域大显身手。团队最初考虑使用C++语言,但是很多成员包括升阳的首席科学家比尔•乔伊,发现C++和可用的API在某些方面存在很大问题。

工作小组使用的是内嵌类型平台,可以用的资源极其有限。很多成员发现C++太复杂以至很多开发者经常错误使用。他们发现C++缺少垃圾回收系统,还有可移植的安全性、分布程序设计、和多线程功能。最后,他们想要一种易于移植到各种设备上的平台。

根据可用的资金,比尔•乔伊决定开发一种集C语言和Mesa语言大成的新语言,在一份报告上,乔伊把它叫做“未来”,他提议升阳公司的工程师应该在C++的基础上,开发一种面向对象的环境。最初,高斯林试图修改和扩展C++的功能,他自己称这种新语言为 C++ ++ --,但是后来他放弃了。他将要创造出一种全新的语言,被他命名为“Oak”(橡树),以他的办公室外的树而命名。

就像很多开发新技术的秘密的工程一样,工作小组没日没夜地工作到了1992年的夏天,他们能够演示新平台的一部分了,包括Green操作系统,Oak的程序设计语言,类库,和其硬件。最初的尝试是面向一种类PDA设备,被命名为Star7,这种设备有鲜艳的图形用户界面和被称为“Duke”的智能代理来帮助用户。1992年12月3日,这台设备进行了展示。

同年11月,Green计划被转化成了“FirstPerson有限公司”,一个升阳公司的全资子公司,团队也被重新安排到了帕洛阿尔托。FirstPerson团队对建造一种高度互动的设备感兴趣,当时代华纳发布了一个关于电视机顶盒的征求提议书时(Request for proposal),FirstPerson改变了他们的目标,作为对征求意见书的响应,提出了一个机顶盒平台的提议。但是有线电视业界觉得FirstPerson的平台给予用户过多地控制权,因此FirstPerson的投标败给了SGI。与3DO 公司的另外一笔关于机顶盒的交易也没有成功,由于他们的平台不能在电视工业产生任何效益,公司再并回升阳公司。

JAVA遭遇互联网

为Java量身订做的浏览器-Web Runner

1994年6、7月间,在经历了一场历时三天的头脑风暴的讨论后,约翰•盖吉、詹姆斯•高斯林、比尔•乔伊、帕特里克•诺顿、韦恩•罗斯因和埃里克•斯库米,团队决定再一次改变了努力的目标,这次他们决定将该技术应用于万维网。他们认为随着Mosaic浏览器的到来,因特网正在向同样的高度互动的远景演变,而这一远景正是他们在有线电视网中看到的。作为原型,帕特里克•诺顿写了一个小型万维网浏览器,WebRunner,后来改名为HotJava。
在HotJava中看最早的java.sun.com网页

版本历史(timesheet)

从Java 2开始出现的,Java互联网启动中心

  • 1995年5月23日,Java语言诞生
  • 1996年1月,第一个JDK-JDK1.0诞生
  • 1996年4月,10个最主要的操作系统供应商申明将在其产品中嵌入JAVA技术
  • 1996年9月,约8.3万个网页应用了JAVA技术来制作
  • 1997年2月18日,JDK1.1发布
  • 1997年4月2日,JavaOne会议召开,参与者逾一万人,创当时全球同类会议规模之纪录
  • 1997年9月,JavaDeveloperConnection社区成员超过十万
  • 1998年2月,JDK1.1被下载超过2,000,000
  • 1998年12月8日,JAVA2企业平台J2EE发布
  • 1999年6月,SUN公司发布Java的三个版本:标准版、企业版和微型版(J2SE、J2EE、J2ME)
  • 2000年5月8日,JDK1.3发布
  • 2000年5月29日,JDK1.4发布
  • 2001年6月5日,NOKIA宣布,到2003年将出售1亿部支持Java的手机
  • 2001年9月24日,J2EE1.3发布
  • 2002年2月26日,J2SE1.4发布,自此Java的计算能力有了大幅提升。
  • 2004年9月30日18:00PM,J2SE1.5发布,是Java语言的发展史上的又一里程碑事件。为了表示这个版本的重要性,J2SE1.5更名为J2SE5.0
  • 2005年6月,JavaOne大会召开,SUN公司公开Java SE 6。此时,Java的各种版本已经更名以取消其中的数字“2”:J2EE更名为Java EE, J2SE更名为Java SE,J2ME更名为Java ME。
  • 2006年11月13日,SUN公司宣布Java全线采纳GNU General Public License Version 2,从而公开了Java的源代码。

关于Java的批评

Java试图通过新的方式解决软件编写的复杂性。很多人认为Java语言做到了它承诺的一切。但是Java并不是一门完

美的语言,在编程风格、编程环境和需求方面并没有获得全球性的认可。

·   并不是所有的工程和环境需要企业级别的复杂性,比如一个简单的个人网站或者独自编程的程序员所写

·   的程序。这些程序员会发现Java的复杂管理对于自己要做的程序来说过于强大了。

·   Java经常让那些并不是对面向对象编程很热心的程序员感到不满。

·   一些人觉得Java在面向对象上面做的没有Ruby和Smalltalk纯粹。但是最新出现的用Java实现的语言

·   Groovy解决了这些问题。

·   作为一种已经建立的新技术,Java显然综合了很多语言的特性,比如C++、C语言、Python等等。一些

·   对于Java的评论认为Java的不变性在动摇,有些人认为Java只是一种“新的COBOL"语言。

语言问题

·   有些程序员不喜欢原始类型和类的分离,尤其是那些曾经使用过Smalltalk和Ruby的程序员。他们会问

·   :“这就是一切皆对象?”

·   事实上,JAVA语言本身只是Smalltalk的一个不完整的代替品。JAVA的流行与SUN背后的支持分不开。

·   Java的代码相对于其它的代码来说过于冗长,这与它的轻便化声明相违背。

·   Java语言在单范例程序方面非常出色。历史上的Java则在这方面做的不好。

·   Java是一种单层继承的语言。这也导致了程序员在试图使用多重继承时候的不便,而很多语言都可以

·   使用这个特性。但是Java可以使用接口类,把多重继承可能导致的风险减少到最小。

·   Java不支持运算符重载,这是为了防止运算符重载使得代码的功能变的不清晰。但是用Java实现的语

·   言Groovy可以进行运算符重载。

·   5.0版本增加了大量的基本类的支持,可以节省大量的额外编程工作。

·   过去Java对于文本的操作和其它语言,比如perl和PHP相比差的较多,但Java在1.4版本时候引入了

·   正则表达式。

·   准确地说,JAVA不是平台无关的,它本身就是一个平台。

类库问题

使用Swing平台编写的带有GUI(图形用户界面)的程序和其它原始程序非常不同。选用AWT工具包编写程序的程序

员看到的都是原始界面,而且也无法获得先进的GUI编程支持,如果使用的话,就要提供每个平台上面所需的API,

这将是一项庞大的工程。Swing则是完全用Java语言所写的程序,避免了界面元素重复的问题,只使用所有平台都

支持的最基本的绘图机制。但是很多用户不知道如何在Java风格和Windows风格之间进行转换,结果造成了Java程

序的界面在很多程序中非常特殊。苹果电脑已经提供了优化过的Java运行时程序,包含了Mac OS X的经典Aqua界面风格。

IBM公司提供的SWT和JFace提供了具有本地化风格的界面。

性能问题

由于Java编译器和虚拟机的不同对Java代码的性能影响比语言本身的影响大的多,所以统一讨论Java的程序的性能经

常是有误导性的。据IBM的数据,在同样的硬件上2001年时的IBM JDK版本的性能是1996年的JDK版本的十倍左右。

见IBM东京研究院的数据: http://www.is.titech.ac.jp/ppl2004/proceedings/ishizaki_slides.pdf

而即使是在同一时期,不同公司的JDK和JRE的性能也不一样,比如SUN、IBM、BEA等公司都有自己开发的JDK和JRE。

Java语言的一些特性不可避免的有额外的性能代价,例如数组范围检查、运行时类型检查等等。Java程序的性能还会

因为不同的动态复杂性和垃圾处理机制使用的多少而各有不同。如果JVM的实现比较优化的话,那么这些功能甚至可以

增加内存分配的性能。这和总是使用STL或者托管C++的程序的情况类似。

尽管如此,仍然有许多人认为Java的性能低。这部分归因于Sun公司最初的JVM实现使用未优化的解释机制来执行字节码

。一些新版本的JVM使用Just-In-Time(JIT)编译器,在加载字节码的时候将其编译成针对运行环境的本地代码来实现

一些本地编译器的优化特性。Just-In-Time机制和本地编译的性能比较仍旧是一个有争议的话题。JIT编译需要很多时

间,对于运行时间不长或者代码很多的大型程序并不适宜。但是不算JIT编译阶段的话,程序的运行性能在很多JVM下可

以和本地编译的程序一争短长,甚至在一些计算比较密集的数值计算领域也是这样。目前,Java已经使用更先进的

HotSpot技术来代替JIT技术,Java的性能有了更进一步的提升。另外,在使用-server选项运行java程序时,也可以对

java进行更深入的优化,比如在运行时将调用较多的方法内联(inline)到程序中来提高运行速度,这就是所谓的

动态优化”,而本地编译器是无法做到这一点的;这也是一些java代码比对应用C/C++等语言编写的本地代码运行的更快

的原因之一。微软的.NET平台也使用JIT编译器,所以也有类似问题。

Java的设计目的主要是安全性和可移植性,所以对于一些特性,比如对硬件架构和内存地址访问的直接访问都被去除了。

如果需要间接调用这些底层功能的话,就需要使用JNI(Java本地接口)来调用本地代码,而间接访问意味着频繁调用这

些特性时性能损失会很大,微软的.NET平台也有这样的问题。所以到目前为止,性能敏感的代码,例如驱动程序和3D视频

游戏,还是大多使用本地编译,甚至直接以不直接支持面向对象的C语言或机器码编写。但最近已经有了许多用纯Java编写

的3D游戏,其效果与用C语言编写的不相上下,例如“合金战士”(英文名:Chrome)。这主要是因为新版的Java 3D技术

已经能像C++一样调用硬件加速,也就是使用显卡来加速,无论是C++还是Java语言写的3D游戏都是使用显卡及GPU来处理,

从而使得CPU可以专注于其它方面的工作。

关于Java的性能,可以参看以下文章:

http://www-128.ibm.com/developerworks/cn/java/j-jtp09275.html

http://www.matrix.org.cn/thread.shtml?topicId=16092&forumId=18

Java运行时环境

Java运行时环境,即Java Runtime Environment,简称为JRE,是在任何平台上运行Java编写的程序都需要用到的软件。

终端用户可以以软件或者插件方式得到和使用JRE。Sun公司还发布了一个JRE的更复杂的版本,叫做JDK,即Java 2 开发包,

里面包含了Java需要的编译器、参考文档和调试器等。

JRE的成分:

·   Java的类库,包含了编译Java程序所需要的最核心文件。

·   核心库文件,其中有

·   数据结构的库,包括列表、字典和树等

·   XML分析库

·   安全方面应用库

·   国际化和本地化应用库

·   综合库文件,包含了程序员和其它系统通信的功能文件。

·   JDBC,即Java数据库联通的API

·   JNDI,即Java命名和目录接口

·   RMI和CORBA用于重新分发软件

·   用户界面库文件,包含:

·   AWT,即抽象窗口开发包,提供了产生图形用户界面所需要的功能

·   Swing

·   其它用于回访媒体文件、录音、截图的库

·   一个用于执行软件的Java虚拟机

·   插件,可以在浏览器里面使用

·   JWS,可以让终端用户连接到互联网

·   许可文件和文档

扩展和与Java程序设计语言紧密相关的架构(按字母排序)。

  • Groovy ,一种用纯Java实现的脚本语言,Python的强有力竞争者
  • JAIN (Java API for Integrated Networks)Java综合网络应用程序开发接口
  • JAI,(Java Advanced Imaging)Java进阶图像
  • Java EE(原名J2EE),Java平台企业版
  • Java ME(原名J2ME) ,Java平台微型版为PDA和智能手机开发的移动版本
  • Java SE(原名J2SE),Java平台标准版
  • JDBC ,(Java Database Connectivity)Java数据库联通
  • JDMK,(Java Dynamic Management Kit)Java动态管理开发包
  • JDO ,(Java Data Objects)Java数据对象
  • JJSF,Java服务器界面
  • JMF,(Java Media Framework) Java媒体框架
  • JMI,Java元数据接口
  • JML ,(Java Modeling Language)Java建模软件
  • JMX ,(Java Management Extensions)Java管理扩展
  • JNDI ,(Java Naming and Directory Interface)Java命名和目录接口
  • JNI ,Java原始界面
  • JOGL,使用OpenGL的低阶三位游戏开发接口
  • JSML ,(Java Speech API Markup Language)Java的语音和标记语言
  • JSP ,(JavaServer Pages)Java服务器页面
  • JSF ,(JavaServer Faces)
  • JXTA ,P2P虚拟网络协议
  • Java Card
  • Java3D ,用于三维游戏编程的高阶应用程序开发接口
  • JavaSpaces
  • Jini ,Java网络分布计算结构
  • Jiro
  • OSGi,(Dynamic Service Management and Remote Maintenance)动态服务管理和远程控制
  • Rhino, 用Java实现的JavaScript语言。
  • SuperWaba ,手持设备的虚拟机程序

posted @ 2008-12-12 16:18 栗衙 阅读(202) | 评论 (0)编辑 收藏