java
文章平均质量分 75
happy7744
这个作者很懒,什么都没留下…
展开
-
java虚拟机生命周期
一个运行时的Java虚拟机负责运行一个Java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当程序关闭退出,这个虚拟机实例也就随之消亡。如果在同一台计算机上同时运行三个Java程序,将得到三个Java虚拟机实例。每个Java程序都运行于它自己的Java虚拟机实例中。 Java虚拟机实例通过调用某个初始类的main()方法来运行一个Java程序。而这个main()方法必...原创 2010-12-25 20:56:24 · 98 阅读 · 0 评论 -
java nio channel 学习笔记
Channel直译就是通道的意思,通道表示对数据源头和数据目标流经途径的抽象描述,和io中的InputStream和OutputStream类似。首先借用网络上一张Channel的类图:从channel的类层次结构来看在接口层面有区分读和写两种操作(ReadableByteChannel和WritableByteChannel),这点类似InputStream和OutputStre...原创 2014-03-10 23:20:36 · 143 阅读 · 0 评论 -
java 泛型通配符
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。其中通配符“?”表示未知类型,可以是任何引用类型。通配符一般会结合extend或super使用,来约束泛型...原创 2013-09-25 23:25:57 · 97 阅读 · 0 评论 -
java 动态代理
java的动态代理可以动态的创建并动态的处理所代理的方法调用,可以提供对另一个对象的访问,同时隐藏实际对象的具体事实,代理对象对客户隐藏了实际对象。动态代理可以对请求进行其他的一些处理,在不允许直接访问某些类,或需要对访问做一些特殊处理等,这时候可以考虑使用代理。 java动态代理主要是通过 java.lang.reflect.Proxy 类和 java.lang.reflect.In...原创 2013-09-25 23:29:00 · 80 阅读 · 0 评论 -
ReentrantLock AQS 源码阅读笔记
ReentrantLock是JDK1.5引入的,它拥有与synchronized相同的并发性和内存语义,并提供了超出synchonized的其他高级功能(例如,中断锁等候、条件变量等),并且使用ReentrantLock比synchronized能获得更好的可伸缩性AQS(AbstractQueuedSynchronizer)主要利用硬件原语指令(CAS compare-and-swap),...原创 2014-08-05 21:06:29 · 390 阅读 · 0 评论 -
ThreadLocal
ThreadLocal作用ThreadLocal提供了一种规范的方法来维持线程的封闭性。为每个线程单独保存一份变量副本,避免并发访问导致的问题。如果同个线程的变量需要在线程内不同的上下文中传递,通过ThreadLocal可以减少传递的成本(通过延迟初始化,还可以减少初始化成本)。 ThreadLocal实现原理ThreadLocal的构造函数相当简单,没有任何参数,也不执行任何...原创 2014-08-05 21:08:50 · 107 阅读 · 0 评论 -
java nio Buffer 学习笔记
Buffer 是一个对象, 它包含一些要写入或者刚读出的数据,即数据的缓冲区。在 NIO 中加入 Buffer 对象,体现了新库与原 I/O 的一个重要区别,在面向流的 I/O 中,您将数据直接写入或者将数据直接读到 Stream 对象中。buffer + channel 类似原io包中的BufferedInputStream/BufferedOutputStream,对数据流做了缓冲,减少磁...原创 2014-03-17 14:54:05 · 138 阅读 · 0 评论 -
nio Selector 阻塞 唤醒 原理
Selector:java nio无阻塞io实现的关键。阻塞io和无阻塞io:阻塞io是指jdk1.4之前版本面向流的io,服务端需要对每个请求建立一堆线程等待请求,而客户端发送请求后,先咨询服务端是否有线程相应,如果没有则会一直等待或者遭到拒 绝请求,如果有的话,客户端会线程会等待请求结束后才继续执行。当并发量大,而后端服务或客户端处理数据慢时就会产生产生大量线程处于等待中,即上述的阻塞。...2014-03-18 16:18:43 · 1178 阅读 · 4 评论 -
Disruptor 学习笔记
Disruptor 是什么Disruptor 是一个高性能异步处理框架,也可以认为是一个消息框架,它实现了观察者模式。Disruptor 比传统的基于锁的消息框架的优势在于:它是无锁的、CPU友好;它不会清除缓存中的数据,只会覆盖,降低了垃圾回收机制启动的频率。 Disruptor 为什么快1. 不使用锁。通过内存屏障和原子性的CAS操作替换锁。2. 缓存基于数组而不是链...原创 2015-04-12 23:06:17 · 253 阅读 · 0 评论 -
java堆和栈
Java把内存划分成两种:一种是栈内存,一种是堆内存。 1. 栈(stack)与堆(heap)都是Java用来在Ram中存放数据的地方。2. 栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器;缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。另外,栈数据可以共享。堆的优势是可以动态地分配内存大小,生存期也不必事先告诉编译器,Java的垃圾收集器会自动收走这些不再使用的数据...原创 2013-09-23 22:58:30 · 78 阅读 · 0 评论 -
Java 内存可见性与volatile
在多核系统中,处理器一般有一层或者多层的缓存,这些的缓存通过加速数据访问(因为数据距离处理器更近)和降低共享内存在总线上的通讯(因为本地缓存能够满足许多内存操作)来提高CPU性能。如图:处理器的多层缓存模型 JVM需要实现跨平台的支持,它需要有一套自己的同步协议来屏蔽掉各种底层硬件和操作系统的不同,因此就引入了Java内存模型JMM。JMM(Java Memory Model)主要是为...原创 2014-06-28 23:24:51 · 156 阅读 · 0 评论 -
java虚拟机体系结构
java虚拟机(Java Virtual Machine)是运行所有Java程序的抽象计算机,是Java语言的运行环境。支持Java面向网络体系结构三大支柱的所有方面:平台无关性、安全性和网络移动性。 根据上图所示,java虚拟机体系结构中最重要的部分就是类装载子系统、运行时数据区、执行引擎等 类装载子系统 Java虚拟机中,负责查找并装载类型的那部分称为类...原创 2010-12-25 21:19:41 · 115 阅读 · 0 评论 -
java 反射内部类
内部类的初始化同一般类的初始化基本相同,只是内部类的类名全称有些区别。下面定义了一个Outer类和一个Inner类:public class Outer{ public class Inner{ }} 通过如下方法可以得到Inner类的类名:public class Outer{ public class Inner{ } p...原创 2011-01-17 22:05:45 · 160 阅读 · 0 评论 -
BufferedInputStream 源码学习笔记
BufferedInputStream是一个带有内存缓冲的InputStream.1.首先来看类结构:BufferedInputStream是继承自FilterInputStream。FilterInputStream继承自InputStream属于输入流中的链接流,同时引用了InputStream,将InputStream封装成一个内部变量,同时构造方...原创 2012-06-17 19:01:15 · 604 阅读 · 0 评论 -
Apache MINA (1) 简介
简介:Apache MINA(Multipurpose Infrastructure for Network Applications) 是一个网络应用框架,有助于用户非常方便地开发高性能、高伸缩性的网络应用。它通过Java NIO提供了一个抽象的、事件驱动的、异步的位于各种传输协议(如TCP/IP和UDP/IP)之上的API。Mina 框架: IoServiceIo...原创 2012-07-26 22:14:45 · 123 阅读 · 0 评论 -
Apache MINA (2) Hello World!
了解完Apach MINA的一些基本概念Apache MINA (1) 简介,开始进入MINA相关的代码学习,以一个简单HelloWorld程序开始,完成客户端与服务端之间的通讯。 准备工作:org.apache.mina 版本4.0org.slf4j 1.6.1 (Simple Logging Facade for Java)mina所使用的日志框架,该版本是与min...原创 2012-07-26 23:40:47 · 114 阅读 · 0 评论 -
Apache MINA (3) NioSocketAcceptor初始化
上一篇博客Apache MINA (2) Hello World! 以一个例子实现了mina客户端和服务端的通讯,现在通过源码来了解建立连接和通讯的过程(基于tcp/ip的实现)。服务端通过创建一个NioSocketAcceptor来接受请求,客户端通过创建NioSocketConnector来连接服务端并发送请求,从整体的体系结构来看二者的关系。 IoService是对于服务器端接受连接...原创 2012-12-09 16:53:24 · 314 阅读 · 0 评论 -
Apache MINA (4) 接收处理请求的过程
上一篇博客 Apache MINA (3) NioSocketAcceptor初始化 了解了NioSocketAcceptor的初始化过程,完成了初始化,Acceptor线程被阻塞,处于等待客户端请求到达的状态,通过进一步研究源代码了解Mina处理请求的过程。当有客户端的请求到达时selector.select()被唤醒 if (selected > 0) { ...2012-12-23 23:50:18 · 502 阅读 · 0 评论 -
Java nio 基础概念笔记
Channel:ServerSocketChannel 创建服务器端Socket,监听某特定端口,接收客户端请求。SocketChannel 用于描述在一个客户端连接,既可以是发起请求的客户端本身的连接,也可以在表示该请求在服务器端与之对应的SocketChannel连接对象。几乎所有的数据读写操作都在这个类中完成。可以有block和nonblock两种方式。 Byte...原创 2012-12-27 12:09:08 · 91 阅读 · 0 评论 -
Netty 源码阅读学习
背景 最忌工作中接触到Netty相关应用场景,之前看过mima的部分源码,所以最近看了Netty的部分源码和学习其设计思想,做个简单的分享(学习代码为:Netty:3.6.3.FINALE)。 Netty概述官方:Netty is an asynchronous event-driven network application framework for rapid de...2014-09-18 21:40:11 · 228 阅读 · 0 评论