随笔分类 - Java
摘要:HTTP是一种无连接的事务协议,底层使用的还是TCP,连接池复用的就是TCP连接,目的就是在一个TCP连接上进行多次的HTTP请求从而提高性能。每次HTTP请求结束的时候,HttpClient会判断连接是否可以保持,如果可以则交给连接管理器进行管理以备下次重用,否则直接关闭连接。这里涉及到三个问题:
阅读全文
摘要:好久没写博客了,主要是这一年技术没啥长进都打杂了,还有就是生活琐事越来越多,人也越来越懒了…… 之前项目中用到了Protobuf,然后测试发现这玩意不好测,总不能每次定个协议或者改下都要编译Java代码吧。于是我这边写了简单的工具,动态的解析PB文件。效果如下:“选择请求协议”和“选择响应协议”就是...
阅读全文
摘要:Java中使用线程池技术一般都是使用Executors这个工厂类,它提供了非常简单方法来创建各种类型的线程池:public static ExecutorService newFixedThreadPool(int nThreads)public static ExecutorService new...
阅读全文
摘要:经过前面几篇文章的铺垫,今天我们终于要看看AQS的庐山真面目了,建议第一次看AbstractQueuedSynchronizer类源码的朋友可以先看下我前面几篇文章:《Java并发包源码学习之AQS框架(一)概述》《Java并发包源码学习之AQS框架(二)CLH lock queue和自旋锁》《Ja...
阅读全文
摘要:接着上一篇文章今天我们来介绍下LockSupport和Java中线程的中断(interrupt)。其实除了LockSupport,Java之初就有Object对象的wait和notify方法可以实现线程的阻塞和唤醒。那么它们的区别 是什么呢?主要的区别应该说是它们面向的对象不同。阻塞和唤醒是对于线程...
阅读全文
摘要:上一篇文章提到AQS是基于CLH lock queue,那么什么是CLH lock queue,说复杂很复杂说简单也简单, 所谓大道至简:CLH lock queue其实就是一个FIFO的队列,队列中的每个结点(线程)只要等待其前继释放锁就可以了。AbstractQueuedSynchronizer...
阅读全文
摘要:AQS其实就是java.util.concurrent.locks.AbstractQueuedSynchronizer这个类。 阅读Java的并发包源码你会发现这个类是整个java.util.concurrent的核心之一,也可以说是阅读整个并发包源码的一个突破口。比如读ReentrantLock...
阅读全文
摘要:本文前半部分结论存在严重错误,请看最后2015-1-20更新部分。最近一直在解决线上一个问题,表现是:Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s。服务器性能很好,Tomcat版本是7.0.54,配置如下: 事后...
阅读全文
摘要:最近一直在解决线上一个问题,表现是:Tomcat每到凌晨会有一个高峰,峰值的并发达到了3000以上,最后的结果是Tomcat线程池满了,日志看很多请求超过了1s。服务器性能很好,Tomcat版本是7.0.54,配置如下: 事后thread dump看其实真正处于RUNNABLE状态的线程很少...
阅读全文
摘要:最近工作上稍微闲点,这一周利用下班时间写了一个小工具,其实功能挺简单但也小折腾了会。工具名称:Simple Send to KindleGithub地址:https://github.com/zhanjindong/SimpleSendToKindle功能:Windows下一个简单的将网页内容推送到...
阅读全文
摘要:[Markdown阅读][1]今天上班的时候收到一个需要短链接的需求,之前的做法都是使用了新浪的短链接API(https://api.weibo.com/2/short_url/shorten.json)。但一是外网访问,二可能是新浪有所限制(毕竟是免费的),性能肯定不是太好。于是就想能不能自己实现...
阅读全文
摘要:
去年写过一篇博客谈了下我自己对协变和逆变的理解,现在回头看发现当时还是太过“肤浅”,根本没理解。不久前还写过一篇“黑”Java泛型的博客,猛一回头又是“肤浅”,今天学习Java泛型的时候又看到了协变和逆变,感觉又理解了点,记录一下,但不免还是“肤浅”,看了这篇博客的同学,欢迎留言交流下
阅读全文
摘要:##默认的三个类加载器 Java默认是有三个ClassLoader,按层次关系从上到下依次是: - Bootstrap ClassLoader - Ext ClassLoader - System ClassLoader Bootstrap ClassLoader是最顶层的ClassLoader,它
阅读全文
摘要:今天遇到一个小问题,让我感觉Java的泛型(因为背负了历史的包袱导致的)有点鸡肋啊。我们经常会遇到要一些自定义的key-value字符串,比如:"key1:1k;key2:2;key3:3"通常编码的时候会将它转换为一个Map这样方便操作,因为key和value的类型不一定(可能是int也可能是St...
阅读全文
摘要:上一篇博客我简单介绍了下如何手动计算一个Java对象到底占用多少内存?今天就想聊下这个内存JVM到底是是如何分配和回收的。Java整体来说还是一个GC比较友好的语言,无论是分代的垃圾收集,还是基于GC Roots的可达性算法都是业界普遍的经典做法,关于Java的内存区域划分以及GC的一些基本知识,我...
阅读全文
摘要:最近在读《深入理解Java虚拟机》,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存?在网上搜到了一篇博客讲的非常好:http://yueyemaitian.iteye.com/blog/2033046,里面提供的这个类也非常实用...
阅读全文
摘要:请移步至:http://zhanjindong.info/2014/05/18/java-gc/
阅读全文
摘要:代理模式是最常用的一个设计模式之一,理解起来也是很简单,一张图足以说明了,LZ就不废话了。至于代理模式能干嘛也不是LZ今天想说的,今天主要想简单介绍下JAVA里面的动态代理。“动”当然是相对“静”来说的,那么什么是静,怎么就又动了呢?LZ想举个生活中常见的例子来说明,俗话说“谈钱伤感情”,但生活所迫...
阅读全文
摘要:xmind文件下载地址
阅读全文
摘要:
自从项目中语言换成Java后就很久没有看C#了,但说实话我是身在曹营心在汉啊。早就知道.NET4.5新增了`async`和`await`但一直没有用过,今天看到[这篇文章][1]总算有了点了解,突然发现`Task`这个玩意不就是Java中`Future`这个概念吗?
阅读全文