阅读更多 将JDK5.0开发的项目转为JDK1.4可运行的项目Retrotranslator、Retroweaver http://iamin.blogdriver.com/iamin/1177133
WebSphere5.1:JDK1.4,Servelet2.3、JSP1.2 WebSphere6.0:JDK1.4,Servelet2.4、JSP2.0 WebSphere6.1:JDK5.0, Servelet2.4、JSP2.0 Tomcat4.1:JDK1.4,Servelet2.3、JSP1.2 Tomcat5.5:JDK5.0,Servelet2.4、JSP2.0 Tomcat5.5
在运行的时候它会先在CLASSPATH找log4j,如果有,就使用log4j,如果没有,就找JDK1.4带的 java.util.logging,如果也找不到就用Simple Logger。 commons-logging.jar的出现是一个历史的的遗留的遗憾,当初Apache极力游说Sun把log4j加入JDK1.4, 然而JDK1.4项目小组已经接近发布JDK1.4产品的时间了,因此拒绝了 jaas.jar: JAAS是用来进行权限验证的,已经包含在JDK1.4里面了。所以实际上是多余的包。 jcs.jar: 如果你准备在Hibernate中使用JCS的话,那么必须包括它,否则就不用。 一般App Server都会带上,JDK1.4也包含了解析器,不过不是Xerces,是Crimson,效率比较差,不过Hibernate用XML只不过是读取 配置文件,性能没什么紧要的,所以也是多余的。
Java中的I/O模型 在JDK1.4之前,基于Java的所有socket都是使用阻塞I/O(BIO),JDK1.4提供了非阻塞I/O(NIO)功能,虽然称为NIO但实际上底层模型是I/O多路复用,
1 经典I/O模式 BIO (阻塞I/O) JDK1.4前 NIO (非阻塞 I/O) JDK1.4 (2002 年,java.nio 包) AIO(异步 I/O) JDK1.7 (2011 年)
1 经典I/O模式 BIO (阻塞I/O) JDK1.4前 NIO (非阻塞 I/O) JDK1.4 (2002 年,java.nio 包) AIO(异步 I/O) JDK1.7 (2011 年) 1.2
如果适用jkd5则默认为"JDK",如果适用jdk1.4则默认为"Javadoc" classfilesetref 要运行的测试类的FileSet结构的引用. skippedProperty 当发生测试被跳过时设置的property的名称.只有当haltonskipped没有设置时才使用 不是必须 sourcedir 用于jdk1.4 测试的PATH-like结构(使用JavaDoc形式的annotations) sourcedirref 用于jdk1.4测试的PATH-like结构的引用(使用JavaDoc classpath 属性xmlfilesetref, classfilesetref 或者内嵌的 <xmlfileset>, 分别的<classfileset>必须使用用来提供测试 注意:如果使用jdk1.4 testng.xml)可以通过一个FiltSet结构传递给任务 classfileset TestNG可以直接在类上运行,同样支持FiltSet结构 sourcedir PATH形式的结构,用于jdk1.4
:public Object invoke(Object obj,Object…args) 1.4:public Object invoke(Object obj,Object[] args) 由于JDK1.4 按jdk1.5的语法,整个数组是一个参数,而按jdk1.4的语法,数组中的每个元素对应一个参数,当把一个字符串数组作为参数传递给invoke方法时,javac会到底按照哪种语法进行处理呢? jdk1.5肯定要兼容jdk1.4的语法,会按jdk1.4的语法进行处理,即把数组打散成为若干个单独的参数。 所以,在给main方法传递参数时,不能使用代码mainMethod.invoke(null,new String[]{“xxx”}),javac只把它当作jdk1.4的语法进行理解,而不把它当作jdk1.5 的语法它也不会拆,所以问题搞定 编译器会作特殊处理,编译时不把参数当作数组看待,也就不会数组打散成若干个参数了 对上边的描述进行一下总结:在反射方法时,如果方法的参数是一个数组,考虑到向下兼容问题,会按照JDK1.4
Java中的I/O模型 在JDK1.4之前,基于Java的所有socket都是使用阻塞I/O(BIO),JDK1.4提供了非阻塞I/O(NIO)功能,虽然称为NIO但实际上底层模型是I/O多路复用,
一:BIO,NIO,AIO有什么区别 BIO:同步阻塞IO JDK1.4之前,建立网络连接的时候采用BIO模式,先在启动服务端socket,然后启动客户端socket,对服务端通信,客户端发送请求后 NIO:同步非阻塞IO NIO主要是想解决BIO的大并发问题,BIO是每一个请求分配一个线程,当请求过多时,每个线程占用一定的内存空间,JDK1.4开始支持NIO,适用于连接数目多且连接比较短的架构 二:BIO,NIO,AIO有哪些适用场景 1.BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择但程序简单易理解。 编程比较复杂JDK1.4开始支持。
高负载、高并发 NIO是一种同步非阻塞I/O模型,同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理;JDK1.4 适用场景分析: BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解; NIO方式适用于连接数目多且连接比较短 (轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持; AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂
这也是jdk1.4之前的唯一选择,依赖于ServerSocket实现,即一个请求对应一个线程,如果线程数不够连接则会等待空余线程或者拒绝连接。 jdk1.4之后提供了一系列的方法来操作流,定义在java.nio包下面。相比于传统的BIO,NIO 提供了高速的面向快的I/O,它加入了Buffer、Channel、Selector等概念。
它的特点是先由操作系统完成后才通知服务端程序启动线程去处理,一般适用于连接数比较多且链接时间较长的应用 BIO NIO AIO 适用场景分析 BIO方式适用于连接数目比较小且固定的架构, 这种方式对服务器资源要求比较高, 并发局限于应用中, JDK1.4 以前的唯一选择,但程序简单易理解 NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如 聊天服务器, 弹幕系统,服务器间通讯等,编程比较复杂, JDK1.4开始支持 AIO方式适用于链接数目多且连接比较长 如果这个连接不做任何事情会造成不必要的线程开销,可以通过线程池机制改善(实现多个客户端连接服务器) [后有应用案例] BIO方式适用于连接数目比较小且固定的架构, 这种方式对服务器资源要求比较高, 并发局限于应用中, JDK1.4
BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序直观简单易理解。 在JDK1.4之前,用Java编写网络请求,都是建立一个ServerSocket,然后,客户端建立Socket时就会询问是否有线程可以处理,如果没有,要么等待,要么被拒绝。 NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
自JDK1.4开始,Java提出了NIO的概念。其中有一个很重要的特性叫做面向缓冲,在整个NIO当中,所有操作都是以缓冲区进行的。 如果是JDK1.4之前的流是不能往后读取数据的。 因此,我们可以得出结论,capacity其实是buffer的总容量。position和limit在不同场景下的意思不一样。
BIO 在jdk1.4版本之前我们大部分都是采用的BIO,这是一种**同步阻塞的**的io方式,比我们经常用到的ServerSocket,就是处于等待的阻塞的。只要有请求过来才执行。 I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理, BIO、NIO、AIO适用场景分析: BIO方式适用于连接数目比较小且固定的[架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4 NIO方式适用于连接数目多且连接比较短(轻操作)的架构,比如聊天服务器,并发局限于应用中,编程比较复杂,JDK1.4开始支持。
2.BIO、NIO、AIO适用场景介绍 模型 场景 BIO 方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序简单易理解。 编程比较复杂,JDK1.4开始支持。 AIO 方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。 BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,程序简单易理解 4.BIO工作机制 ?
非直接缓存区 在jdk1.4之前,java的对象与系统之间的交互如下图,先从JVM需要从用户态切换到内核态时,这样的话读取或写入一份数据需要经历四个步骤:jvm切换到内核态缓冲区读取->操作系统将数据拷贝用户缓冲区 直接缓存区 直接内存也称直接缓存区,主要是解决一个java读取慢的问题,jdk1.4以后jvm 引入了NIO在操作系统划出了一块直接的缓存区可以直接被java访问。就是所称的零拷贝。
-hotspot 含义与 client 相同,jdk1.4 以前使用的参数,jdk1.4 开始不再使用,代之以 client。 3. |:<classname>] 从 JDK1.4 开始,java 可支持断言机制,用于诊断运行时问题。通常在测试阶段使断言有效, 在正式运行时不需要运行断言。
3.2 、BIO、NIO、AIO适用场景分析 BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,但程序简单易理解。 编程比较复杂,JDK1.4开始支持。 AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,JDK7开始支持。 BIO方式适用于连接数目比较小且固定的架构,这种方式对服务器资源要求比较高,并发局限于应用中,JDK1.4以前的唯一选择,程序简单易理解。 从 JDK1.4 开始,Java 提供了一系列改进的输入/输出的新特性,被统称为 NIO(即 New IO),是同步非阻塞的。 Mark 标记(mark 一般不用管, 每 flip 一次 mark =-1, 就失效了) Buffer类相关方法: public abstract class Buffer { //JDK1.4