JAVA
keep_moving_cqu
每天晚上疲劳的睡在床上时才感觉真真切切地过了一天人生最重要的不仅是努力还有方向压力不是有人比你努力而是比你牛叉几倍的人依然比你努力即使看不到未来即使看不到希望也依然相信自己错不了自己选的人生错不了第二天叫醒我的不是闹钟其实还是梦想
展开
-
NIO工作原理
NIO 包及工作原理针对传统I/O 工作模式的不足,NIO 工具包提出了基于Buffer(缓冲区)、Channel(通道)、Selector(选择器)的新模式;Selector(选择器)、可选择的Channel(通道)和SelectionKey(选择键)配合起来使用,可以实现并发的非阻塞型I/O 能力。 NIO 工具包的成员 Buffer(缓冲器)Buffe转载 2013-11-18 13:56:28 · 889 阅读 · 0 评论 -
并发编程一:CopyOnWriteArrayList
除了加锁外,其实还有一种方式可以防止并发修改异常,这就是将读写分离技术(不是数据库上的)。先回顾一下一个常识:1、JAVA中“=”操作只是将引用和某个对象关联,假如同时有一个线程将引用指向另外一个对象,一个线程获取这个引用指向的对象,那么他们之间不会发生ConcurrentModificationException,他们是在虚拟机层面阻塞的,而且速度非常快,几乎不需要CPU时间。2转载 2014-03-11 23:47:29 · 1495 阅读 · 0 评论 -
浅谈java内存模型
不同的平台,内存模型是不一样的,但是jvm的内存模型规范是统一的。其实java的多线程并发问题最终都会反映在java的内存模型上,所谓线程安全无非是要控制多个线程对某个资源的有序访问或修改。总结java的内存模型,要解决两个主要的问题:可见性和有序性。我们都知道计算机有高速缓存的存在,处理器并不是每次处理数据都是取内存的。JVM定义了自己的内存模型,屏蔽了底层平台内存管理细节,对于java开发转载 2013-12-10 13:12:27 · 862 阅读 · 0 评论 -
JAVA GC垃圾收集器的分析
在 很多人看来,java中内存的动态分配与内存回收已经不用用户担心了,因为它给我们提供了GC自动回收 ,感觉一切都进入了自动化了,但是对于各种内存溢出,内存泄漏问题的出现,我们还是很有必要学习GC的。地球人都知道,Java有个东西叫垃圾收集器,它 让创建的对象不需要像C/C++那样delete、free掉,但你能不能谈谈,GC是在什么时候,对什么东西,做了什么事情?” 如果还不是很了解那我们一起转载 2013-12-11 00:14:35 · 952 阅读 · 0 评论 -
tomcat的servlet创建和执行过程分析
我们知道当tomcat收到一个请求会经过一系列的调用过程猜到servlet的执行。那么我们从这中间的standardWrapperValve的invoke开始。public final void invoke(Request request, Response response) throws IOException, ServletException {......原创 2013-11-30 00:53:24 · 3840 阅读 · 1 评论 -
Tomcat启动过程分析
先来看看Tomcat的架构吧:本文将介绍Tomcat启动时涉及到的组件和初始化,启动过程。1:Tomcat启动从org.apache.catalina.startup的main()函数开始。public static void main(String args[]) { if (daemon == null) { daemon = ne原创 2013-11-25 00:31:48 · 2199 阅读 · 2 评论 -
tomcat请求处理(续)
现在我们从connector.getContainer().getPipeline().getFirst().invoke(request, response)开始进入容器...前面说到容器的时候,anne一直都只有说三个容器,engine, host, context。其实在context之下,还有一个容器,叫做wrapper,每个wapper包含了一个servlet,因此前文没有接转载 2013-11-24 00:30:20 · 1059 阅读 · 0 评论 -
Tomcat之Connector处理过程分析
Tomcat以Servlet容器著称(处理Jsp和Servlet等动态资源的应用服务器)。由Tomcat的总体架构可知,Servlet容器由2个主要组件构成:Connector(连接器)和Container(容器)。Connector负责接收客户端的请求,而Container处理并响应该请求。由JavaEE规范可知,Servlet容器内部只处理HTTP协议的请求,但是对于连接器的设计来说,它可原创 2013-11-24 00:29:42 · 1952 阅读 · 0 评论 -
Tomcat源码Lifecycle分析
涉及到的类或接口:Lifecycle,LifecycleListener,LifecycleEvent,LifecycleSupport。Lifecycle接口: public static final String INIT_EVENT = "init"; public static final String START_EVENT = "start"; pub原创 2013-11-24 00:29:12 · 1476 阅读 · 0 评论 -
Eclipse导入Tomcat源码
想要研究下Tomcat的体系结构或者源码,最好将Tomcat的源码导入到ide中,编写实例进行代码跟踪(debug)。这里参考了网上一些资料,将自己操作过程记个流水账。准备:1.Tomcat源码下载这个里下载tomcat-6.0.33源码。2.ant安装,用于编译tomcat的源码。ant下载解压后将其bin添加到系统环境path中。3.IDE——选用Eclipse转载 2013-11-22 21:07:42 · 1452 阅读 · 0 评论 -
DirectByteBuffer
byte buffer一般在网络交互过程中java使用得比较多,尤其是以NIO的框架中;看名字就知道是以字节码作为缓冲的,先buffer一段,然后flush到终端。而本文要说的一个重点就是HeapByteBuffer与DirectByteBuffer,以及如何合理使用DirectByteBuffer。1、HeapByteBuffer与DirectByteBuffer,在原理上,转载 2013-11-18 14:42:05 · 1046 阅读 · 0 评论 -
并发编程二:HashMap怎么会死锁呢?
通过源码知道:HashMap的基本数据结构是Entry[] table。每个entry=table[i]都有next属性,它其实只指向和entry有相同hash值的下一个对象,也就是同一个桶中的下一个数据。HashMap这个数据结构不是线程安全的,几乎所有人都知道。当我们采用多线程进行读写的时候必然会存在线程同步的问题。那怎么会产生死锁呢?这是我的一个作业。虽然在我的电脑上运行不出来。后来在网原创 2014-03-14 00:17:04 · 5415 阅读 · 2 评论