- 博客(170)
- 资源 (2)
- 收藏
- 关注
原创 tomcat5源码解析一 PoolTcpEndpoint类
PoolTcpEndpoint类负责创建监听http连接端口的serversocket,并将得到得连接交给线程池中的线程处理。tomcat5实现的线程池是直接管理runnable对象,然后新生成的线程会wait,直到runnable的shouRun为true,即某个表示task的实例变量(toRun)被赋值,才会被notify,然后运行,运行完后又会将shouldrun设为false,调用returnController将自己注册成空闲的线程便于到时候threadpool快速找到一个空闲的线程,然后循环,
2013-08-01 20:38:45 2199
转载 【翻译】两种高性能I/O设计模式(Reactor/Proactor)的比较
这是05年的老文章,网上应该有人早就翻译过了,我翻译它仅仅为了学习Reactor/Proactor两种TCP服务器设计模式,顺便作翻译练习。标题:两种高性能I/O设计模式的比较作者:Alexander Libman 、Vladimir Gilbourd原文:http://www.artima.com/articles/io_design_patt
2014-03-10 12:50:41 2075
原创 HotSpot VM的生命周期
1.启动:(1) 解析命令行参数:如-client 或 -server(2)分配java的堆和选择好确定的JIT编译器类型(client 或 server)、(3) 创建运行环境如LD_LIBRARY_PATH和CLASSPATH(4)找到Main-Class(5) 使用标准的java Native接口方法:JNI_CreateJavaVM在一个新创建的非原生的线程中创建Hot
2013-09-14 15:49:58 1910
原创 负载均衡的几种实现技术
当web服务器的垂直扩展变得话费很高或困难的时候,我们需要考虑服务器的水平扩展,即负载均衡技术。负载均衡有很多技术,这里我们来一一介绍。1.HTTP重定向我们可以在代码层面实现,通过设定访问特定页面如index.php,在php代码中设置header的location值,返回重定向指令。这实际上是web应用程序自己来实现。2.DNS负载均衡DNS负责域名和IP地址之间的映射。DNS
2013-09-01 11:24:09 3320
转载 深入理解Java内存模型(六)——final
与前面介绍的锁和volatile相比较,对final域的读和写更像是普通的变量访问。对于final域,编译器和处理器要遵守两个重排序规则:在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。下面,我们通过一些示例性的代码
2013-08-23 14:25:58 1812
转载 深入理解Java内存模型(四)——volatile
volatile的特性当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个监视器锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码:class VolatileFeaturesExample { volatile long vl = 0L
2013-08-23 14:25:08 2411
转载 Java NIO 选择器(Selector)的内部实现(poll epoll)
之前强调这么多关于linux内核的poll及epoll,无非是想让大家先有个认识:Java NIO中的选择器依赖操作系统内核的这些系统调用,我们这里只讲解与linux内核相关的NIO实现,当然,windows或其他操作系统实现大体上是类似的,相信大家也可以触类旁通。那么,本文从这里将从简到难,一步一步为大家讲解选择器的点点滴滴吧。选择器的宏观理解“有这么一种
2013-08-10 14:41:31 30690 3
转载 Synchronization and the Java Memory Model
This set of excerpts from section 2.2 includes the main discussions on how the Java Memory Model impacts concurrent programming.For information about ongoing work on the memory model, see Bill Pug
2013-07-26 13:06:57 1349
转载 文件锁(Filelock) 与锁定映射文件部分内容
文件锁JDK 1.4引入了文件加锁机制,允许我们同步访问一个共享文件,不过,竞争同一文件的两个线程有可能在不同的java虚拟机上,或者一个是java线程,另一个是操作系统中其他的某个线程,但文件锁对其他线程或其他操作系统进程都是可见的,因为java的文件加锁直接映射到了本地操作系统的加锁机制。注,这里讲的锁是指锁定其他应用程序,而不是锁定同一虚拟机里访问的同一文件的其他线程 。如果在同一虚
2013-07-25 20:34:28 1846
转载 ConcurrentLinkedQueue的实现原理分析
1. 引言在并发编程中我们有时候需要使用线程安全的队列。如果我们要实现一个线程安全的队列有两种实现方式:一种是使用阻塞算法,另一种是使用非阻塞算法。使用阻塞算法的队列可以用一个锁(入队和出队用同一把锁)或两个锁(入队和出队用不同的锁)等方式来实现,而非阻塞的实现方式则可以使用循环CAS的方式来实现,本文让我们一起来研究下Doug Lea是如何使用非阻塞的方式来实现线程安全队列Concurren
2013-07-25 19:54:06 1126
转载 深入JVM锁机制
目前在Java中存在两种锁机制:synchronized和Lock,Lock接口及其实现类是JDK5增加的内容,其作者是大名鼎鼎的并发专家Doug Lea。本文并不比较synchronized与Lock孰优孰劣,只是介绍二者的实现原理。数据同步需要依赖锁,那锁的同步又依赖谁?synchronized给出的答案是在软件层面依赖JVM,而Lock给出的方案是在硬件层面依赖特殊的CPU指令,大家可能
2013-07-25 18:49:01 2448
转载 Java轻量级锁原理详解(Lightweight Locking)
大家知道,Java的多线程安全是基于Lock机制实现的,而Lock的性能往往不如人意。原因是,monitorenter与monitorexit这两个控制多线程同步的bytecode原语,是JVM依赖操作系统互斥(mutex)来实现的。互斥是一种会导致线程挂起,并在较短的时间内又需要重新调度回原线程的,较为消耗资源的操作。为了优化Java的Lock机制,从Java6开始引入了轻量级锁的概
2013-07-25 18:45:18 4775
转载 Java偏向锁实现原理(Biased Locking)
阅读本文的读者,需要对Java轻量级锁有一定的了解,知道lock record, mark word之类的名词。可以参考我的一篇博文:Java轻量级锁原理详解(Lightweight Locking)Java偏向锁(Biased Locking)是Java6引入的一项多线程优化。它通过消除资源无竞争情况下的同步原语,进一步提高了程序的运行性能。轻量级锁也是一种多线程优化,它与偏向锁的区别在
2013-07-25 18:44:49 6072
转载 java中的Synchronized 实现
1 引言在多线程并发编程中Synchronized一直是元老级角色,很多人都会称呼它为重量级锁,但是随着Java SE1.6对Synchronized进行了各种优化之后,有些情况下它并不那么重了,本文详细介绍了Java SE1.6中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁,以及锁的存储结构和升级过程。3 同步的基础Java中的每一个对象都可以作为锁。对于同步
2013-07-25 18:43:54 4089
转载 JAVA CAS原理深度分析
看了一堆文章,终于把JAVA CAS的原理深入分析清楚了。感谢GOOGLE强大的搜索,借此挖苦下百度,依靠百度什么都学习不到! 参考文档:http://www.blogjava.net/xylz/archive/2010/07/04/325206.htmlhttp://blog.hesey.net/2011/09/resolve-aba-by-atomicstampedrefe
2013-07-25 13:07:33 168880 42
转载 Java并发编程之ConcurrentHashMap
ConcurrentHashMapConcurrentHashMap是一个线程安全的Hash Table,它的主要功能是提供了一组和HashTable功能相同但是线程安全的方法。ConcurrentHashMap可以做到读取数据不加锁,并且其内部的结构可以让其在进行写操作的时候能够将锁的粒度保持地尽量地小,不用对整个ConcurrentHashMap加锁。ConcurrentHashMap
2013-07-24 20:45:24 3112 1
原创 JVM性能调优之JVM性能监控
JVM的性能监控主要关注以下几个方面: 垃圾回收、 JIT和类的加载。垃圾回收器的监控:几点需要关注的内容:1. 使用的垃圾回收期的种类2. java堆的大小3. 新生代和老年代的大小4.永久代的大小5. minor GC的持续时间6. minor GC的发生频率7. minor GC回收了多少空间8. major GC的持续时间9. major GC的
2013-07-22 19:35:10 2779
转载 Spring Ioc和Aop原理
1.关于spring ioc 这段时间也着实好好的看了下spring的相关书籍,对其也有了大概和初步的认识和理解,虽然之前也一直听说spring是一个非常优秀的开源框架,可一直没有机会学习和使用(是不是有点落伍了?呵呵),所以呢,这段时间就重点学习了spring(一个星期的时间当然是入门级的啦~~) 大家一直都说spring的IOC如何如何的强大,其实我倒觉得不是IOC如何
2013-07-16 11:02:40 2775
原创 Java性能调优之JVM
HotSpot VM 谈到Java的性能,runtime的两个方面很关键:JIT和GC。JIT的作用使尽可能快地执行代码;GC的作用是(在管理存储的同时)从代码的执行中抽取尽可能少的时间。因而Java的性能是让JIT(在更多存储器的帮助下)产生更多理想代码,并减少GC用以管理存储的时间(指针越大这越困难)随着64位的HotSoptVM的出现,虽然64位CPU拥有更宽的数据总线,但是这却
2013-07-14 18:09:32 4257 1
转载 differences between “java -server” and “java -client”
From Chapter 2 of the whitepaper (The Java HotSpot Performance Engine Architecture):The JDK includes two flavors of the VM -- a client-side offering, and a VM tuned for server applications. Thes
2013-07-14 17:14:33 1005
转载 Java的synchronized关键字:同步机制总结
不久前用到了同步,现在回过头来对JAVA中的同步做个总结,以对前段时间工作的总结和自我技术的条理话。JAVA的synchronized关键字能够作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。假如再细的分类,synchronized可作用于instance变量、object reference(对象引用)、static函数和class literals(类名称字面常量)
2013-07-14 15:25:19 1222
转载 互斥锁 自旋锁 自适应自旋锁
互斥锁:从 实现原理上来讲,Mutex属于sleep-waiting类型的锁。例如在一个双核的机器上有两个线程(线程A和线程B),它们分别运行在Core0和 Core1上。假设线程A想要通过pthread_mutex_lock操作去得到一个临界区的锁,而此时这个锁正被线程B所持有,那么线程A就会被阻塞 (blocking),Core0 会在此时进行上下文切换(Context Switch)将线
2013-07-14 13:58:47 3433
转载 闲聊ClassLoader的父加载器
Java使用类加载器来装载字节码到内存,以便后续用来创建对象调用方法等。就目前的JVM,要说这个ClassLoader,先要说到它的委托模型(有人将parent译作双亲,双亲委派模型,窃以为,很不准确,原因在说完这个委托模型之后讲)。何为委托模型?java.lang.ClassLoader有这样的描述:每个 ClassLoader 实例都有一个相关的父类加载器。需要查找类或资源时,Class
2013-07-14 12:25:50 4773
转载 JIT(动态编译)和AOT(静态编译)编译技术比较
Java 应用程序的性能经常成为开发社区中的讨论热点。因为该语言的设计初衷是使用解释的方式支持应用程序的可移植性目标,早期 Java 运行时所提供的性能级别远低于 C 和 C++ 之类的编译语言。尽管这些语言可以提供更高的性能,但是生成的代码只能在有限的几种系统上执行。在过去的十年中,Java 运行时供应商开发了一些复杂的动态编译器,通常称作即时(Just-in-time,JIT)编译器。程序运行
2013-07-13 20:51:27 31082
原创 Java性能调优之操作系统
首先讲述下操作系统层面的性能监控工具。在性能调优的工作中通常可见三个必不可少的步骤: 性能监控=》性能分析=》性能调优。性能监控(perfomance monitoring):在没有任何可用性能数据的情况下,先进行性能的监控。性能分析(performace profiling):收集应用的性能数据,进行分析。性能调优(performance tunning): 修改源代码,
2013-07-13 16:56:51 1672
转载 Top 15 Java threading interview questions asked in Investment banks
Thread interview questions JavaMulti-threading and concurrency questions are essential part of any Java interview. If you are going for any Java interview on any Investment bank for equities front o
2013-07-12 20:02:13 1808
转载 Java: notify() vs. notifyAll()
Simply put, it depends on why your threads are waiting to be notified. Do you want to tell one of the waiting threads that something happened, or do you want to tell all of them at the same time?In
2013-07-12 18:58:26 2062
转载 后缀数组原理及应用详解
在pongba的讨论组上看到一道Amazon的面试题:找出给定字符串里的最长回文。例子:输入XMADAMYX。则输出MADAM。这道题的流行解法是用后缀树(Suffix Tree)。这坨数据结构最酷的地方是用它能高效解决一大票复杂的字符串编程问题: 1.在文本T里查询T是否包含子串P(复杂度同流行的KMP相当)。2.文本T里找出最长重复子串。比如abcdabcefda里abc同da都重
2013-07-10 19:21:33 1211
转载 LCA问题解法
11-0412 算法之LCA与RMQ问题 Category: 数据结构与算法 View: 11,480 阅 Author: Dong 作者:Dong | 新浪微博:西成懂<span class="separator"> | 可以转载, 但必须以超链接形
2013-07-10 19:01:04 1134
转载 经典数据结构-trie树详解
1、 概述Trie树,又称字典树,单词查找树或者前缀树,是一种用于快速检索的多叉树结构,如英文字母的字典树是一个26叉树,数字的字典树是一个10叉树。Trie一词来自retrieve,发音为/tri:/ “tree”,也有人读为/traɪ/ “try”。Trie树可以利用字符串的公共前缀来节约存储空间。如下图所示,该trie树用10个节点保存了6个字符串tea,ten,
2013-07-10 18:57:41 1507
转载 几种经典的网络服务器架构模型的分析与比较
前言事件驱动为广大的程序员所熟悉,其最为人津津乐道的是在图形化界面编程中的应用;事实上,在网络编程中事件驱动也被广泛使用,并大规模部署在高连接数高吞吐量的服务器程序中,如 http 服务器程序、ftp 服务器程序等。相比于传统的网络编程方式,事件驱动能够极大的降低资源占用,增大服务接待能力,并提高网络传输效率。关于本文提及的服务器模型,搜索网络可以查阅到很多的实现代码,所以,本文将不拘泥于
2013-07-10 17:19:15 1149
转载 Sessions and transactions
This page explains common techniques to deal with theSession and transactions in Hibernate applications. Refer to the Hibernate reference documentation and the "Transactions and Concurrency" chapter
2013-07-10 10:45:21 2043
原创 java 文件锁
JDK 1.4引入了文件加锁机制,允许我们同步访问一个共享文件,不过,竞争同一文件的两个线程有可能在不同的java虚拟机上,或者一个是java线程,另一个是操作系统中其他的某个线程,但文件锁对其他线程或其他操作系统进程都是可见的,因为java的文件加锁直接映射到了本地操作系统的加锁机制。注,这里讲的锁是指锁定其他应用程序,而不是锁定同一虚拟机里访问的同一文件的其他线程 。如果在同一虚拟机两
2013-06-27 21:04:17 1260
转载 小议同步IO :fsync与fdatasync
对于提供事务支持的数据库,在事务提交时,都要确保事务日志(包含该事务所有的修改操作以及一个提交记录)完全写到硬盘上,才认定事务提交成功并返回给应用层。一个简单的问题:在*nix操作系统上,怎样保证对文件的更新内容成功持久化到硬盘? 1. write不够,需要fsync一般情况下,对硬盘(或者其他持久存储设备)文件的write操作,更新的只是内存中的页缓存(page cache),
2013-06-24 17:49:47 1321
转载 线性排序算法
前言插入,快速,合并,堆排序等基于比较的排序算法的最坏情况下界为Ω(nlogn),最坏情况下都要进行Ω(nlogn)次比较。假设有一n个元素组成的数组(假设每个元素都不相等),那么一共有n!排列组合,而且这n!排列组合结果都应该在决策树的叶子节点上(如图1),在图1中n = 3,所以有3! = 6种组合全都在决策树的叶子节点,对于高度为h的二叉树,叶子节点的个数最多为2h(当为满二
2013-06-23 23:41:38 1046
转载 堆排序及其分析
前言记得在学习数据结构的时候一味的想用代码实现算法,重视的是写出来的代码有一个正确的输入,然后有一个正确的输出,那么就很满足了。从网上看了许多的代码,看了之后貌似懂了,自己写完之后也正确了,但是不久之后就忘了,因为大脑在回忆的时候,只依稀记得代码中的部分,那么的模糊,根本不能再次写出正确的代码,也许在第一次写的时候是因为参考了别人的代码,看过之后大脑可以进行短暂的高清晰记忆,于是欺
2013-06-23 23:40:43 964
转载 HotSpot JVM garbage collection options cheat sheet
In this article I have collected a list of options related to GC tuning in JVM. This is not a comprehensive list, I have only collected options which I use in practice (or at least understand why I ma
2013-06-21 10:47:19 1968
转载 Java™ Garbage CollectionStatistical Analysis
PPT 见http://download.csdn.net/download/hsuxu/56209671. Java™ Garbage CollectionStatistical Analysis 101.Juarez JuniorSystem Architect – Unisys Global Outsourcing2. Agenda. Java Heap Management
2013-06-20 21:02:55 1416
转载 How to read the Garbage Collector output (for Sun JVM)
there are lots of applications to make the output of the *–verbose:gc* parameter easy to read, but still it may be useful to have a general idea of the meaning of the "numbers" in the gc log file... T
2013-06-20 17:43:14 1228
转载 TCP滑动窗口机制
TCP协议在能够发送数据之前就建立起了“连接”。要实现这个连接,启动TCP连接的那一方首先将发送一个SYN数据包。这只是一个不包含数据的数据包, 然后,打开SYN标记。如果另一方同时在它收到SYN标记的端口通话,它将发回一个SYN+ACK:SYN和ACK标志位都被打开,并将ACK(确认)编 号字段设定为刚收到的那个数据包的顺序号字段的值。接下来,连接发起方为了表示收到了这个SYN+ACK信息,
2013-06-16 17:52:53 936
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人