第一章 走进Java
1.1 Java技术体系
1)按Java的各个组成部分划分,java技术体系包括了:
- java程序设计语言
- 各种硬件平台上的java虚拟机实现
- Class文件格式
- java类库API
- 来自商业机构和开源社区的第三方Java类库
JDK:java程序设计语言、java虚拟机、java类库这三部分统称为JDK(Java Development Kit),JDK是用于支持Java程序开发的最小环境。
JRE:java类库API中的Java SE API子集和Java虚拟机这两部分统称为JRE(Java Runtime Environment),JRE是支持Java程序运行的标准环境。
2)按技术服务的领域来划分
- Java Card:支持Java小程序(Applets)运行在小内存设备(如智能卡)上的平台。
- Java ME(Micro Edition):支持Java程序运行在移动终端(手机,PDA)上的平台,对Java API有所精简,并加入了移动终端的针对支持,这条产品线在JDK6以前被称为J2ME。这里注意,Android并不属于Java ME。
- Java SE(Standard Edition):支持面向桌面级应用(如Windows下的应用程序)的java平台,提供了完整的Java核心API,这条产品线在JDK6以前被称为J2SE。
- Java EE(Enterprise Edition):支持使用多层架构的企业应用(如ERP、MIS、CRM应用)的Java平台,除了提供Java SE API外,还对其作了大量有针对性的扩充,并提供了相关的部署支持,这条产品线在JDK6以前被称为J2EE,在JDK10以后被Oracle放弃,捐献给eclipse基金会管理,此后被称为Jakarta EE。
第二章 java内存区域与内存移除异常
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。 这些区域有各自的用途, 以及创建和销毁的时间, 有的区域随着虚拟机进程的启动而一直存在, 有些区域则是依赖用户线程的启动和结束而建立和销毁。 根据《Java虚拟机规范》 的规定, Java虚拟机所管理的内存将会包括以下几个运行时数据区域, 如图2-1所示。
程序计数器(Program Counter Register) 是一块较小的内存空间, 它可以看作是当前线程所执行的字节码的行号指示器。在java虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处理、线程回复等基础功能都需要依赖这个计数器来完成。
由于java虚拟机的多线程是通过线程轮流切换、分配处理器执行时间的方式来实现的,在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存。