1.概述
java不仅仅是一门编程语言,它还是一个由一系列计算机软件和规范形成的技术体系,这个技术体系提供了完整的用于软件开发和跨平台部署的支持环境,并广泛应用于嵌入式系统,移动终端,企业服务器和大型机等各种场合。
它摆脱了硬件平台束缚,实现了“一次编写,到处运行”的理性;
它提供个了一种相对安全的内存管理和访问机制,避免了绝大部分的内存泄漏和指针越界问题;
它实现了热点代码检测和运行时编译及优化,使得java应用能随着运行时间的增加而获得更高的性能;
它有一套完整的应用程序接口,还有无数的来自商业机构和开源社区的第三方类库来帮助实现各种各样的功能。。。
java所带来的这些好处让程序的开发效率得到了很大的提升。
<
Java与 C的区别
Java走的是二进制跨平台路线,发布的是“跨平台”的二进制可执行文件(JavaClass文件),然后依赖每个平台上实现的JVM来执行之;C走的是源码跨平台路线,发布的是“源码”,在每个平台上重新编译一遍就可以使用。两者的取舍有所不同。
C偏底层,Java应用更广,Java虚拟机是使用 C语言开发的
>2.java技术体系
从广义上来讲,Clojure,JRuby,Groovy等运行于java虚拟机上的语言及其相关的程序都属于java技术体系的一员。如果从传统意义上
来看,Sun官方所定义的技术体系包括如下几个组成部分:
- java程序设计语言
- 各种硬件平台上的java虚拟机
- Class文件格式
- java API类库
- 来自商业机构和开源社区的第三方java类库
可以把java程序设计语言,java虚拟机,javaAPI类库这三部分统称为JDK(java developent Kit),JDK是用于支持java程序开发的最小环境。另外还可以把javaAPI类库中的java SE API子集和java虚拟机这两部分统称为JRE(java runtime environment)。
java技术体系所包括的内容
按照技术所服务的领域来划分,或者按照java技术关注的重点业务领域来划分,java技术体系可以分为四个平台,分别:
- java card:支持一些java小程序(applets)运行在小内存设备(如智能卡)上的平台。
- java me(Micro Edition):支持java程序运行在移动终端(手机,pda)上的平台,对javaapi有所精简,并加入了针对移动终端的支持。
- java se (Standard Edition):支持面向桌面级应用(如windows下的应用程序)的java平台,提供完整的java 核心 api。
- java EE(Enterprise Edition):支持使用剁成架构的企业应用(如erp,crm应用)的java平台,除了提供javaseapi外,还对其做了大量的扩充(以javax.*作为包名,以java.*为包名的都是javaseapi的核心包,由于历史的原因,一部分曾经是扩展包的api后来进入了核心包,因此核心包中也包含了不少javax.*的包名),并提供了相关的部署支持。
3.java发展史
hotspot 虚拟机发布时是作为jdk1.2的附件程序提供的,后来他成为了jdk1.3及以后所有版本的sun jdk的默认虚拟机。
自从jdk1.3开始,sun维持了一个习惯,大约每隔两年发布一个jdk的主版本,以动物名称命名,期间发布各种修正版本则以昆虫名称作为工程名称。
jdk1.4是java真正走向成熟的一个版本。
jdk从1.5版本开始,官方在正式文档与宣传上已经不再使用类似jdk1.5的命名,只有程序员内部使用的开发版本号(developer version,例如java -version 的输出)中继续沿用
1.5,1.6,1.7的版本号,而公共版本号(public version)则改为jdk5,jdk6,jdk7的命名方式。
jdk1.6的 改进包括:提供动态语言支持(通过内置mozilla javascript rhino引擎实现),提供编译api和微型http服务器api,等等。
在2006年11月13日的javaone大会上,sun宣布最终会把java开源,并在随后的一年多时间里,陆续地在GPL v2(gun general public license v2)协议 下公开了jdk各个部分的源码,并建立了OPenjdk组织对这些源码进行独立管理。
<java虚拟机
Oracle目前取得了三大商业虚拟机的其中两个:JRockit和HotSpot。
HotSpot是SunJDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。
JRockit曾经号称“世界上速度最快的Java虚拟机”。>
4.java技术的未来
- 模块化 模块化是解决应用系统与技术平台越来越复杂,越来越庞大而产生的一系列问题的一个重要途径。无论是开发人员还是产品的最终用户,都不希望为了系统中的一小块功能而不得不下载,安装,部署及维护整套庞大的系统。最近最近几年的osgi技术的迅速发展说明了通过模块化实现按需部署,降低复杂性和维护成本的需求是相当迫切了。
- 混合语言 当大一的java语言无法满足当前软件的复杂需求时,越来越多基于java虚拟机的语言本应用到软件项目中。java平台上的多语言混合编程正成为主流。每种语言都可以针对自己擅长的方面更好地解决问题。试想一下,在一个项目之中,并行处理用clojure语言编写,展示层使用jruby/rails,中间层用java,每个应用层都将使用不同的编程语言来完成,而且,接口对每一层的开发者都是透明的,各种语言之间的交互不存在任何困难,就像使用自己的语言原生api一样方便(在同一个虚拟机上运行的其他语言和java语言之间的交互都比较容易,但非java语言之间的交互一般都比较繁琐,dynalang项目就是为了解决这个问题而出现的),因为他们最终都运行在一个虚拟机之上。 通过特定领域的语言去解决特定领域的问题是当前软件开发应对日趋复杂的项目需求的一个方向。
可以运行在jvm上的语言
常见语言的jvm实现版本
- 多核并行 如今cpu硬件的发展方向已经从高频转变为多核心,随着多核时代的来临,软件开发越来越关注并行编程的领域。早在jdk1.5种就引入java.util.concurent包实现了一个粗粒度的并发框架,而jkd1.7种将会加入的java.util.concurent.forkjoin包则是对这个框架的一次重要扩充。虽然不能解决所有问题,但是在它的范围之内,能够轻松的利用多个cup核心提供的计算资源来协作完成一个复杂的计算任务。
jdk外围,也出现了专为满足并行计算需求的计算框架,如Apache的Hadoop Map/Reduce,这是一个简单易懂的并行框架,能够运行在由成千上万商用机组成的大型集群上,并能以一种可靠的容错方式并行处理上TB级别的数据集。另外还出现了诸如Scala,Colure及Erlang等天生就具备并行计算能力的语言。
- 64位虚拟机 64bit ,32bit ,cup一次处理数据的能力是32位还是64位。64位cup拥有更强大的寻址能力,最大支持16G内存,而32位只支持4G内存。