从头学习JAVA(一)

JAVA语言概述

Java分为J2EE,J2ME,J2SE
J2ME:主要用于控制移动设备和信息家电等有限存储设别。
J2SE:整个JAVA技术的核心和基础,它是J2ME和J2EE编程的基础。
J2EE:提供了企业应用开发的相关的完整解决方案。

JDK1.2 把 API分成三大类
核心API:由Sun公司定制的基本的API,所有的JAVA平台都应该提供,是平常说的JAVA核心类库。
可选API:Sun为JDK提供的扩充API,这些API因平台的不同而不同。
特殊API:用于满足特殊要求的API,如用于JCA和JCE的第三方加密类库。

JAVA程序要经过先编译,后解释两个步骤。

编译(Compile):使用专门的编译器,针对特定的平台(操作系统)讲某种高级语言源代码一次性“翻译”成可被该平台硬件执行的机器码(包括机器指令和操作数),并包装成该平台所能识别的可执行性程序的格式。编译生产的可执行性程序可以脱离开发环境,在特定的平台上独立运行。

现有C、C++、FORTRAN、Pascal等高级语言属于编译型语言。

解释:使用专门的解释器对源程序逐行解释成特定平台的机器人码并立即执行。解释型语言同城不会进行整体性的编译和链接处理,解释型语言相当于把编译型语言中的编译和解释过程混合到一起同时完成。可以认为,每次执行解释型语言的程序都需要精心一次编译,因此解释型语言的程序运行效率通常较低,而且不能脱离解释器独立运行。但解释型语言有一个优势:跨平台比较容易,只需要提供特定平台的解释器即可,每个特定平台上的解释器负责将源代码解释成特定平台的机器指令即可。解释型语言可以方便的实现源程序级的移植,但这是已牺牲程序执行效率为代价的,

现有Ruby、Python等语言属于解释型语言。

JAVA是一种特殊的高级语言,它既有解释型语言的特征,又有编译型语言的特征,因为JAVA程序要经过先编译,后解释两个步骤。

程序员编写的*.JAVA文件步骤
JAVA源文件→使用JAVAC编译→字节码文件(*.class文件,与平台无关)→使用JAVA解释执行→特定平台的机器码

JAVA语言里负责解释执行字节码文件的是JAVA虚拟机(JVM),它是可以运行JAVA字节码文件的虚拟计算器。所有平台上的JVM向编译器提供相同的编程接口,而编译器只需要面向虚拟机,生成虚拟机能理解的代码,然后由虚拟机来执行。在一些虚拟机的实现中,还会将虚拟机代码转换成特定系统的机器码执行,从而提高执行效率。

JVM就是一个转换器,它JAVA程序跨平台的关键部分。

一个JAVA源文件可以包含多个类定义,但最多只能包含一个public类定义,如果JAVA源文件包含public类定义,则该源文件名必须与这个public类的类名相同。如果JAVA源文件没有public类定义时,源文件的名字是随意的。

JAVA 和 Linux平台是区别大小写的。

内存泄露:一些分配出去的内存得不到及时的回收,就会引起系统运行速度下降,甚至瘫痪,这种现象被称为内存泄露。

JAVA的堆内存是一个运行时数据区,用以保存类的实例(对象),JAVA虚拟机的堆内存种存储着正在运行的应用程序所建立的所有对象,这些对象不需要程序员通过代码来显示释放。一般来说,堆内存的回收由垃圾回收来负责,所有JVM实现都有一个由垃圾回收管理的堆内存。

垃圾回收(GC)的优缺点:
优点:垃圾回收能自动释放内存空间,减轻编程的负担,同时保护程序的完整性,垃圾回收是JAVA语言安全性策略的一个重要部分。
缺点:垃圾回收的开销影响程序的性能,因为JVM必须跟踪程序中有用的对象,才能确定哪些对象是无用的,并最终释放执行无用的对象。

垃圾回收的特点:
1.垃圾回收机制的工作目标是回收无用对象的内存空间,这些内存空间都是jvm堆内存里的内存空间,垃圾回收只能回收内存资源,对其他的物理资源,如数据库连接、磁盘I/O等资源则无能为力。
2.为了更快让垃圾回收机制回收那些不再使用的对象,可以将对象的引用变量设置为null,通过这种方式来暗示垃圾回收机制可以回收该对象。
3.垃圾回收发生的不可预知性。由于不同的JVM采用了不同的垃圾回收机制和不同的垃圾回收算法,因此它有可能是定时发生的,也有可能是当CPU空闲的时候发生的,也有可能和原始的垃圾回收一样,等到内存消耗出现极限时发生,这和垃圾回收实现机制的选择及具体的设置都有关系。程序员可以使用Runtime对象的gc()或system.gc()来建议系统进行垃圾回收,但这种调用仅仅是建议,依然不能精确控制垃圾回执机制的执行。
4.垃圾回收的精确性主要包括两个方面:一个垃圾回收机制能精确的标记活着的对象;二是垃圾回收器能精确地定位对象之间的引用关系。前者是完全回收所有废弃对象的前提,否则可能造成内存泄露;而后者则是实现归并和复制等算法的必要条件,通过这种引用关系,可以保证所有对象都能被可靠的回收,所有对象都能被重新分配,从而有效的减少内存碎片的产生。
5.现在的JVM有多种不同的垃圾回收实现,每种回收机制因其算法差异表现各异,有的当垃圾回收开始时就停止应用程序的运行,有的垃圾回收运行时允许应用程序的线程运行,还有的在同一时间允许垃圾回收多线程运行。

你可能感兴趣的:(java基础)