##一、java技术体系概览
JDK(Java Development Kit)
- Java程序设计语言
- Java虚拟机
- Java API类库
JDK是用于支持Java程序开发的最小环境。
JRE(Java Runtime Environment)
- Java SE API子集
- Java虚拟机
JRE是支持Java程序运行的标准环境
Java语言 | Java Language | ||||||
---|---|---|---|---|---|---|---|
工具及工具API | Java | Javac | JavaDoc | Jar | Javap | Monitor | JPDA |
JConsole | Java VisualVM | JavaDB | security | Internationalization | JMC | RMI | |
IDL | Deploy | JFR | Troubleshoot | Scripting | JVMTI | Web Services | |
程序部署和发布 | Java Web Start | Applet/Java Plug-in | |||||
用户界面工具集 | JavaFX | ||||||
Swing | Java 2D | AWT | Accessbility | ||||
Drag and Drop | Input Methods | Image I/O | Print Service | Sound | |||
集成库 | IDL | JDBC | JNDI | RMI | RMI-IIOP | Scripting | |
其他基础库 | Beans | Int’l Support | Input/Output | JMX | |||
JNI | NetWorking | Override Mechanism | |||||
Security | Serialization | Extension Mechanism | XML JAXP Mechanism | ||||
语言和工具基础库 | Math | Collections | Concurrency Utilities | JAR | |||
Logging | Management | Preferences API | Ref Objects | ||||
Reflection | Regular Expressions | Versioning | Zip | Instrumentation | |||
Java虚拟机 | Java HotSpot Client and Server VM |
这张表网上有很多版本,我以《深入理解java虚拟机》为参考,添加了JMC和JFR。可能在这划分中会有重叠部分,仅做参考。
其中
- JDK: Java语言,工具及工具API,程序部署发布,用户界面工具集,集成库,其他基础库,语言和工具基础库,Java虚拟机
- JRE: 程序部署发布,用户界面工具集,集成库,其他基础库,语言和工具基础库,Java虚拟机
- Java SE API: 用户界面工具集,集成库,其他基础库,语言和工具基础库,Java虚拟机
##二. Java工具和工具API(对应了jdk中bin目录下的工具)
###自己目前使用过的有:
– java : 用来运行jar。对应bin目录下的java。
– javac: java的编译工具。对应bin目录下的javac。
– JConsole : 配置好环境的情况下,可以在控制台输入jconsole打开,jconsole可以配合JMX(其他基础库),达到对运行中的java程序进行监控甚至动态修改变量值的作用。具体的使用可以参考这一篇JMX整理,对应bin目录下的jconsole。
– security :
– keytool: 这个工具可以生成key和certificate,具体使用可以参考这一篇Java Security:keytool工具使用说明,securitykeytool 。对应bin目录下的keytool工具。
– jarsigner: jar密匙签名工具
– kinit: 主要用于获取或缓存Kerberos协议的票据授权票据。
– klist: 允许用户查看本地凭据缓存和密钥表中的条目(用于Kerberos协议)。
– ktab: Kerberos密钥表管理工具,允许用户管理存储于本地密钥表中的主要名称和服务密钥。
– policytool: 策略工具,用于管理用户策略文件(.java.policy)。
###尚未使用过的有
– javaDoc : 使用 javdoc 编译 .java 源文件时,它会读出 .java 源文件中的文档注释,并按照一定的规则与 Java 源程序一起进行编译,生成文档。对应bin目录下的javadoc。
– jar : JAR(Java Archive,Java 归档文件),是java 开发工具中的一个工具,位于JDK的安装目录的bin目录下。它是一个打包工具,有点类似winrar压缩工具,虽然一般是用来打包.class文件,但是实际上其它文件也是可以打包的。对应bin目录下的jar。
– Javap : java反编译工具。对应bin目录下的javap。
– JPDA : Java Platform Debugger Architecture(JPDA:Java平台调试架构),Java虚拟机后端和调试平台前端组成
– 1.Java虚拟机提供了Java调试的功能
– 2.调试平台通过调试交互协议向Java虚拟机请求服务以对在虚拟机中运行的程序进行调试
– jdb: Java调试工具(Java Debugger),主要用于对Java应用进行断点调试。
– Java VisualVM : java性能分析工具,对应bin目录下的jvisualvm。
– JavaDB : java的数据库。
– Int’l:可能指的是internationalization,即国际化。这里很不确定,在bin目录下有一个native2ascii,本地编码到ASCII编码的转换器(Native-to-ASCII Converter),用于”任意受支持的字符编码”和与之对应的”ASCII编码和(或)Unicode转义”之间的相互转换。
– JFR: Java飞行记录(好奇怪的翻译,Java Flight Recordings)。Java Flight Recordings (JFR) — Java 飞行记录器 – part 1
– JMC: Java任务控制工具(java Mission Control)。对应bin目录下的jmc
– RMI: Java远程方法调用(Remote Method Invocation,之前用过类似与thrift这种跨语言的远程调用框架,原理是socket通信)。对应bin目录下的
– java-rmi: Java远程方法调用(Java Remote Method Invocation)工具,主要用于在客户机上调用远程服务器上的对象。
– rmic: Java RMI 编译器,为使用JRMP或IIOP协议的远程对象生成stub、skeleton、和tie类,也用于生成OMG IDL。
– rmid: Java RMI 激活系统守护进程,rmid启动激活系统守护进程,允许在虚拟机中注册或激活对象。
– rmiregistry: Java 远程对象注册表,用于在当前主机的指定端口上创建并启动一个远程对象注册表。
– jstatd: jstatd(VM jstatd Daemon)工具是一个RMI服务器应用,用于监测HotSpot JVM的创建和终止,并提供一个接口,允许远程监测工具附加到运行于本地主机的JVM上。
– serialver: 序列版本命令,用于生成并返回serialVersionUID。
– IDL: 与RMI类似,是面向对象的远程调用,但不同的是他是跨语言的。对应bin目录下的
– idlj: IDL转Java编译器(IDL-to-Java Compiler),用于为指定的IDL文件生成Java绑定。IDL意即接口定义语言(Interface Definition Language)。
– servertool: Java IDL 服务器工具,用于注册、取消注册、启动和终止持久化的服务器。
– tnameserv: Java IDL瞬时命名服务。
– orbd: 对象请求代理守护进程(Object Request Broker Daemon),它使客户端能够透明地定位和调用位于CORBA环境的服务器上的持久对象。
– deploy:
– javafxpackager: JavaFX包装器,用于执行与封装或签名JavaFX应用有关的任务。
– pack200: JAR文件打包压缩工具,它可以利用Java类特有的结构,对普通JAR文件进行高效压缩,以便于能够更快地进行网络传输。
– unpack200: JAR文件解压工具,将一个由pack200打包的文件解压提取为JAR文件。
– Monitor: 我这里理解为一系列的java运行监视工具
– JPS:JVM进程状态工具(JVM Process Status Tool),用于显示目标系统上的HotSpot JVM的Java进程信息。对应bin目录下的jps。
– JSTAT: JVM统计监测工具(JVM Statistics Monitoring Tool),主要用于监测并显示JVM的性能统计信息。对应bin目录下的jstat。
– Troubleshoot: java的一系列错误定位工具
– JINFO: Java配置信息工具(Java Configuration Information),用于打印指定Java进程、核心文件或远程调试服务器的配置信息。对应bin目录下的jinfo。
– JStack: Java堆栈跟踪工具,主要用于打印指定Java进程、核心文件或远程调试服务器的Java线程的堆栈跟踪信息。
– JMAP: ava内存映射工具(Java Memory Map),主要用于打印指定Java进程、核心文件或远程调试服务器的共享对象内存映射或堆内存细节。。对应bin目录下的jmap。
– jhat: Heap Dump Browser, 根据dump文件进行分析,可以在浏览器中查看。
– jsadebugd: Java可用性代理调试守护进程(Java Serviceability Agent Debug Daemon),主要用于附加到指定的Java进程、核心文件,或充当一个调试服务器。
– Scripting:
– jrunscript: Java命令行脚本外壳工具(command line script shell),主要用于解释执行javascript、groovy、ruby等脚本语言。
– JVMTI: Java 虚拟机工具接口(Java Virtual Machine Toolkit Interface),用于替代在先前的 JDK 版本中作为试验功能存在的 Java 虚拟机剖析接口(Java Virtual Machine Profiling Interface,JVMPI)和 Java 虚拟机调试接口(Java Virtual Machine Debugging Interface,JVMDI)。通过 JVMTI 接口可以创建代理程序(Agent)以监视和控制 Java 应用程序,包括剖析、调试、监控、分析线程等等。
– Web Services:
– wsgen: 当从 Java 代码启动时,wsgen 命令行工具将生成 Java API for XML Web Services (JAX-WS) 应用程序所必需的工件。
– wsimport: wsimport 命令行工具用于处理现有 Web Service 描述语言 (WSDL) 文件,并生成开发 Java API for XML-Based Web Services (JAX-WS) Web Service 应用程序所必需的工件。
– schemagen: XML schema生成器,用于生成XML schema文件。
– xjc: 主要用于根据XML schema文件生成对应的Java类。
##程序部署和发布
– Java Web Start:允许用户直接从网络上运行基于java技术的应用。共有三种运行方式,无论哪一种,都会连上网络运行
– 1.从网页上点击链接。
– 2.从桌面图标或者开始菜单。
– 3.从java缓存视图中。
– Applet/Java Plug-in)
applet小程序
##用户界面工具集
– JavaFx: 2007年首次推出,具体资料可以看这些。JavaFX对Java开发者到底意味着什么JavaFX: Getting Started with JavaFX
– Swing: 是所谓的Lightweight组件,不是通过native方法来实现的,所以Swing的窗口风格更多样化。但是,Swing里面也有heaveyweight组件。比如JWindow,Dialog,JFrame。Swing由纯Java写成,可移植性好,外观在不同平台上相同。所以Swing部件称为轻量级组件, Swing是由纯JAVA CODE所写的,因此SWING解决了JAVA因窗口类而无法跨平台的问题,使窗口功能也具有跨平台与延展性的特性,而且SWING不需占有太多系统资源,因此称为轻量级组件
– Java 2D:包括Graphics,Graphics2D接口。Trail: 2D Graphics
– AWT:调用系统的native接口绘制,所以风格和系统相关。由于不同 操作系统 的图形库所提供的功能是不一样的,在一个平台上存在的功能在另外一个平台上则可能不存在。为了实现Java语言所宣称的”一次编译,到处运行”的概念,AWT 不得不通过牺牲功能来实现其平台无关性,也就是说,AWT 所提供的图形功能是各种通用型操作系统所提供的图形功能的交集。由于AWT 是依靠本地方法来实现其功能的,我们通常把AWT控件称为重量级控件。
– Accessbility: 无障碍使用,针对残疾人士。Java Accessibility Guide
– Drag and Drop: 实现拖放功能。Lesson: Drag and Drop and Data Transfer
– Input Methods:用户输入
– Image I/O:图片的输入输出
– Print Service:打印服务
– Sound:声音
##三. 集成库
– IDL: Java IDL技术添加CORBA(Common Object Request Broker Architecture)到Java平台,提供了标准的互操性和连通性。Java IDL使得分布式,web的java应用能够使用OMG(Object Management Group)定义的行业标准的IDL(Interface Definition Language)语言和IIOP(Internet Inter-ORB Protocol) 协议透明的调用远程服务。
– JDBC: Java数据库连接API(Java Database Connectivity API)。
– JNDI: Java 命名与目录接口(Java Naming and Directory Interface),所有与系统外部的资源的引用,都可以通过JNDI定义和引用。通俗点理解我觉得应该就是将配置用xml保存。JNDI 是什么
– RMI: 远程方法调用API(Remote Method Invocation)。
– RMI-IIOP:通过IIOP(Internet Inter-ORB Protocol)协议的远程方法调用(RMI)。
– Scripting:能让java应用运行js引擎。
##四. 其他基础库
– Beans: Java Beans是Java中一种特殊的类,可以将多个对象封装到一个对象(bean)中。特点是
– 可序列化
– 提供无参构造器
– 提供getter方法和setter方法访问对象的属性。
名称中的“Bean”是用于Java的可重用软件组件的惯用叫法。
public class PersonBean implements java.io.Serializable {
/**
* name 属性(注意大小写)
*/
private String name = null;
private boolean deceased = false;
/** 无参构造器(没有参数) */
public PersonBean() {
}
/**
* name 属性的Getter方法
*/
public String getName() {
return name;
}
/**
* name 属性的Setter方法
* @param value
*/
public void setName(final String value) {
name = value;
}
/**
* deceased 属性的Getter方法
* 布尔型属性的Getter方法的不同形式(这里使用了is而非get)
*/
public boolean isDeceased() {
return deceased;
}
/**
* deceased 属性的Setter方法
* @param value
*/
public void setDeceased(final boolean value) {
deceased = value;
}
}
- Internationalization Support: 国际化支持。特点如下:
- 额外的本土化数据和任何地方运行结果相同
- 文字信息存储在代码之外,动态加载(方便程序的翻译)
- 不需要重新编译就能支持新的语言
- 基于文化的数据,比如日期,货币,呈现方式
- 可以快速本土化
- Input/Output: 输入/输出
- 通过数据流、序列化、文件系统的输入输出
- 字符集、解码、编码、byte到unicode直接的转换
- 文件、文件属性、文件系统
- 提供建立使用异步的或可复用的、无阻塞的输入输出的服务的API
- java.io (description) – Supports system input and output, and object serialization. to the file system
- java.nio (description) – Defines buffers for bulk memory operations. Buffers may be allocated in direct memory for high performance.
- java.nio.channels (description) – Defines channels, an abstraction for devices capable of performing I/O operations; defines selectors for multiplexed, non-blocking I/O
- java.nio.channels.spi (description) – Provides implementations for channels
- java.nio.file – Defines interfaces and classes to access files and file systems.
- java.nio.file.attribute – Defines interfaces and classes for accessing file system attributes.
- java.nio.file.spi – Defines classes for creating a file system implementation.
- java.nio.charset (description) – Defines charsets, decoders, and encoders, for translating between bytes and Unicode characters
- java.nio.charset.spi (description) – Provides implementations for charsets
- JMX: Java管理扩展(Java Management Extensions)。提供接口结合jconsole工具使用,可以实时查看java程序运行时的变量值,以及修改他们。
- JNI: 提供java对c的支持,可以调用c的方法。
- NetWorking: 提供使用URLS,URIS的类,socket类提供连接服务,安全功能。
- Override Mechanism: 重载机制。
- Security: 提供安全相关功能的API,例如可配置的访问控制,电子签名,认证和签名,加密,安全网络交互。
- Serialization: 序列化,可以将对象(Object)序列化变成二进制流,然后从二进制流中读取出对象。
- Extension Mechanism: 扩展机制。在我的理解中,是指java的包机制,类加载机制,包括从URL中获取。
- java.lang.ClassLoader
- java.lang.Package
- java.lang.Thread
- java.net.JarURLConnection
- java.net.URLClassLoader
- java.security.SecureClassLoader
- XML JAXP Mechanism:提供丰富的API集用来处理XML文档和数据
##五. 语言和工具基础库
– Math: 提供和数学计算相关的方法
– Collections:
– 1.分为两类
– 最基本的一类是 java.util.Collection,有以下的后代
– java.util.Set
– java.util.SortedSet
– java.util.NavigableSet
– java.util.Queue
– java.util.concurrent.BlockingQueue
– java.util.concurrent.TransferQueue
– java.util.Deque
– java.util.concurrent.BlockingDeque
– 另外的一类是 java.util.Map,Map并不是真正的Collections,但是他们有着和Collections类似的接口,所以可以像Collections一样操作。
– java.util.SortedMap
– java.util.NavigableMap
– java.util.concurrent.ConcurrentMap
– java.util.concurrent.ConcurrentNavigableMap
– 2.许多Collections的修改操作都是可选的,当尝试使用没有实现的修改操作时会抛出UnsupportedOperationException,接口的实现必须明确哪些方法是支持的。
– 如果Collections不可修改,则是unmodifiable,如果可以修改,则是modifiable
– 如果Collections一成不变,则是immutable,如果是变化的,则是mutable
– 如果Lists的大小(Size)是不变的,则是fixed-size,否则则是variable-size.
– 如果Lists支持快速的索引访问(时间为常量),则是Random Access,不支持则是sequential access。RandomAccess标记接口意味着Lists支持Random Access。
– 3.有一些元素的存储是有限制的(比如Map的key–value)
– 是一个特定的类型
– 不能为null
– obey some arbitrary predicate
– 4.接口表格
|Interface|HashTable|Resizable Array|Balanced Tree|Linked List|Hash Table + Linked List|
|:----:|
|Set |HashSet | |TreeSet | |LinkedHashSet |
|List | | ArrayList | |LinkedList | |
|Deque | | ArrayDeque | |LinkedList | |
|Map |HashMap | |TreeMap | |LinkedHashMap |
- 5.AbstractCollection, AbstractSet, AbstractList, AbstractSequentialList and AbstractMap类已经提供了基本功能的实现
- 6.Concurrent Collection(提供多线程下的Collections)
- 接口
- BlockingQueue
- TransferQueue
- BlockingDeque
- ConcurrentMap
- ConcurrentNavigableMap
类
- LinkedBlockingQueue
- ArrayBlockingQueue
- PriorityBlockingQueue
- DelayQueue
- SynchronousQueue
- LinkedBlockingDeque
- LinkedTransferQueue
- CopyOnWriteArrayList
- CopyOnWriteArraySet
- ConcurrentSkipListSet
- ConcurrentHashMap
- ConcurrentSkipListMap
- 7.额外注意事项
- HashTable在官方的Collections中并没有任何提及,通过查看HashTable的源代码,发现它是继承自Dictionary,实现了Map的接口。而HashMap则是Map的实现,继承的AbstractMap也是Map的实现
- HashTable和HashMap有以下的区别:
- HashMap => 不同步、可空键值、效率高、containsKey/containsValue
- Hashtable => 同步、非空键值、效率略低、contains/containsKey/containsValue
8.这一部分的内容越整理越多,还是另开一篇去记录。
– Concurrency Utilities: 提供了一系列支持并发的接口和类
– java.util.concurrent
– java.util.concurrent.atomic:一系列的原子性类,比如AtomicInteger这样的,不需要额外的同步操作就可以支持并线程并发
– java.util.concurrent.locks:提供了多种锁机制
- JAR: 提供格式化读写JAR文件的类
- Logging: 提供日志功能
- Management: 提供一系列标准的接口(JMX)用来管理资源,例如应用、设备、服务、Java虚拟机。关于JMX的内容上面以及整理过了。
- Preferences API: 提供存储,读取用户和系统配置的方法。
- Ref(Reference Objects): 提供了和垃圾收集器相关的接口,程序可以使用引用对象来获取一个对象的引用,这样做在之后的垃圾回收中仍然可能会将这个引用对象回收。程序也可以被设计成当垃圾收集器认为一个给定的对象的可达性(gc(垃圾回收)的可达性算法,这个在后续的垃圾回收算法中会整理出来)改变时被通知。因此,引用对象在设计简单的缓存时是很有用的,因为在低内存的情况下它会被自动回收,内存充裕时,因为对象保持了引用,所以不会被垃圾回收器回收。
- Objects: 万物皆对象,你有吗。
- Reflection: Java反射,也是很有用的一个库。spring的IOC就是Java反射的使用 。
- Regular Expressions:正则表达式,也是很常用的库。
- Versioning:可以让java程序在运行时被识别它的需求的运行环境的版本号。
- Zip: 指的应该是Java Archive (JAR) Files,可以将多个文件压缩成一个的技术。
- Instrumentation: 和Sound相关
##六. Java虚拟机
– HotSpot Client and Server VM: 现在我们最多接触到的应该就是HotSpot虚拟机了,但是在java最初发布到现在,出现过许多或经典或优秀或有特色的虚拟机实现。
– 1.Sun Classic/Exact VM
– 2.Sun HotSpot VM
– 3.Sun Mobile-Embedded VM/Meta-Circular VM
– 4.BEA JRockit/IBM J9 VM
– 5.Azul VM/BEA Liquid VM
– 6.Apache Harmony/Google Android Dalvik VM
– 7.Microsoft JVM及其他
##七.参考文章
1. JDK自带工具一览表
2. java监控工具(jps,jstat,jstack,jmap,jvisualvm等)
3. JDK Tools and Utilities
4. Java Web Start Technology
5. Java™ Platform Overview
6. Java™ Naming and Directory Interface (JNDI)
7. Java™ Internationalization Support
8. Java™ I/O, NIO, and NIO.2
9. The Extension Mechanism
10. Collections Framework Overview
11. Java Concurrency Utilities
12. 《深入理解Java虚拟机第一章》