JAVA
文章平均质量分 77
historyasamirror
爱机器,爱学习。
三年的NLP经验,期间涉及Machine Learning,Data Mining,骨子里由衷的喜欢;
正在做分布式,感觉自己很幸运,这个领域一定大有可为;
关注User Study,学会从用户的角度看技术;
展开
-
JAVA学习笔记 -- ”诡异“的List和Array转换
<br />先看看List和Array怎样转换。<br /> <br />List --> Array :<br />Collection这个接口提供了一个 toArray()方法,所以要将任何一个Collection的实现转换为Array,调用这个函数就好了:<br />List<Integer> list = new LinkedList<Integer>();//........ Object[] objArray = list.toArray();<br /> <br />Array原创 2010-08-04 16:49:00 · 3024 阅读 · 1 评论 -
超棒的Gson库 - 实现json的序列化和反序列化
之前一直用的是官网上的库:http://www.json.org/java/index.html 个人体验,这个库的毛病挺多的,比如在将JSONObject转换成String的过程中会产生大量的临时性的String对象(因为没用StringBuffer),更郁闷的一个问题是,它可原创 2011-07-27 18:57:47 · 15717 阅读 · 1 评论 -
Java读取中文的乱码问题
最近在解析一堆文件,有gbk的,有UTF-8的,处理过程中碰到了乱码问题,相信很多做过相关工作的人都有类似经历。和中文编码相关的有几个地方:1. 原始文件的编码(Input的编码)2. 希望输出的编码(Output的编码)3. Eclipse的默认字符集编码 (项目->右键Properties->Text file encoding)文件本质上是一个字节流: file: Byte1 Byte原创 2011-06-30 10:56:00 · 12922 阅读 · 0 评论 -
Java Memory Model引发的血案
好吧,我标题党了。之前的blog简单的提及过java Memory Model,不过这次却真的碰到了由于JMM的特性导致的错误。背景是跑系统的压力测试的时候突然抛出了一个NullPointerException。这事挺奇怪的,因为已经跑了很长时间的压力测试,可这会才莫名的报了个错,于是找到对应的代码行,如下所示:Thread Athis.data = new Data();synchronized (this) { this.isDone = true; this原创 2011-03-16 22:23:00 · 10427 阅读 · 47 评论 -
JVM调优:选择合适的GC collector (三)
CMS Collector在很多地方,CMS Collector常被翻译成“并发”,而ParallelGC被称为“并行”,但中文里,这两词的区分度并不明显。事实上,所谓的Parallel是指,在执行GC的时候将会有多个GC线程共同工作,但是,在执行GC的过程中仍然是“stop-the-world”。CMS的区别在于,在执行GC的时候,GC线程是不需要暂停application的线程,而是和它们“并发”一起工作。所以,采用CMS的原因就在于它可以提供最低的pause time。回到CMS的示意图:原创 2011-03-12 23:28:00 · 20941 阅读 · 3 评论 -
JVM调优:选择合适的GC collector (二)
ParallelGC再来看看parallelGC的结果。截取其中一段放大如下:JVM参数如下:java -jar -Xms10g -Xmx15g -XX:+UseParallelGC -XX:ParallelGCThreads=8 -XX:NewSize=6g -XX:MaxNewSize=6g -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:./log/gc.log Slaver.jarXX:ParallelG原创 2011-03-12 21:57:00 · 12327 阅读 · 3 评论 -
JVM调优:选择合适的GC collector (一)
<br />正文之前,先介绍一人:Jon Masamitsu。此人背景不详,不过他在SUN做的就是JVM,所以他的blog我认为是每一个想对JVM调优的人都应该读一读的。本文的很多观点和一些图也是取自他的blog。<br />blog link:http://blogs.sun.com/jonthecollector/ <br /><br />在他的一篇blog【1】中,写到了GC调优的最重要的三个选项:<br />排在第三位的是young generation在整个JVM heap中所占的比重原创 2011-03-09 00:29:00 · 25321 阅读 · 9 评论 -
写socket的“灵异事件”
最近写了个java的服务器程序(基于Mina)在linux上运行,测试性能的时候发现任何一个request发送出去总是会有40ms的延迟再接受到response。一开始以为是逻辑处理和算法的问题,优化了半天,发现延迟依然如故,即便最简单的request也还需要40ms的延迟。而且,相同的一段程序,在我的windows笔记本上运行,就不存在这个40ms的延迟。之所以文章题目取名“灵异”,是因为我现在也只是找到了一个解决方案,但仍然不清楚问题出在什么地方...为了解释得更清楚,我简化了服务器的代码,直接采用Mi原创 2011-01-07 12:30:00 · 8135 阅读 · 4 评论 -
JMM的“非完整”浅析
所谓JMM,即Java Memory Model。所谓“非完整”,即这篇blog只是很浅显的一些笔记,而且所呈现的知识结构体系也是零散和不完整的。原因在于个人的懒散。当我发现要完整的搞懂JMM需要通读大概几十页的英文paper时,我退缩了。这实在是个吃力不讨好的事情,而且我现在也没有这么多时间去完整的了解JMM。所以,以下的内容只是在浏览过wiki和一些书的相关章节后组织起来的。它能够带给你的可能只有一些感性和浅显的认识。如果想完整系统的了解JMM,这里给出了最权威的文献:The Java Me原创 2010-11-13 23:17:00 · 3248 阅读 · 1 评论 -
Cache专用: SoftReference
<br />没有想到有一天真的会用到SoftReference,学的时候完全不知道这东西能干吗。<br />今天它确实派上用场了,没错,我也是用它来做cache。<br /> <br />SoftReference的语义就是当内存不够用的时候,GC会回收SoftReference所引用的对象。所以,在memory sensitive的程序中将某些大型数据设置成SoftReference再合适不过了。<br /><br /><br />创建一个SoftReference:<br />Object obj =原创 2010-12-14 22:25:00 · 8307 阅读 · 1 评论 -
浅谈JAVA ThreadPoolExecutor
这篇文章分为两部分,前面是ThreadPoolExecutor的一些基本知识,后一部分则是Mina中一个特殊的ThreadPoolExecutor代码解析。算是我的Java学习笔记吧。基础在我看来,java比C++的一个大好处就是提供了对多线程的支持(C++只有多线程的库,语言本身不包含线程的概念)。而其中我最爱用的就是ThreadPoolExecutor这个类,它实现了一个非常棒的thread pool。thread pool一般被用来解决两个问题:当处理大量的同步task的时候,它能够避免threa原创 2010-10-23 22:50:00 · 29737 阅读 · 10 评论 -
高效的Java字符串 -- 一些实验和一点经验
<br />近期写了比较多的和Java有关的blog,原因在于最近正在对自己之前做的一个Java系统做性能调优。在这个过程中,我积累了一些经验,也学到了不少东西。本篇亦是如此。<br /><br />在我的系统中,有一个查询,它会在内存中的一个Index上做搜索,然后将查找到的所有数据项填入一个JSONObject中,最后调用这个JSONObject的toString函数转换成字符串,通过网络发送出去。<br />实验观察到,如果大量使用这个查询,JVM会频繁地调用Garbage Collection原创 2010-12-08 15:01:00 · 5104 阅读 · 0 评论 -
两个郁闷的异常: java.lang.StackOverflowError和java.net.SocketException: Broken pipe
<br />debug了几乎一天,就为了一个bug,折腾死我了。<br /><br />bug的缘由是因为写代码的时候不小心,将:<br />public boolean isEmpty() { return this.queue.isEmpty();}<br />写成了:<br />public boolean isEmpty() { return this.isEmpty();}<br />很明显,一个函数开始无限制地递归地调用自己了。<br />原创 2010-12-07 16:55:00 · 14093 阅读 · 3 评论 -
不简单的JAVA内部类
菜鸟学Java,现学现卖。所谓内部类,就是一个类的定义放在了另一个类定义的内部,如:public class OuterClass { private int outerData; // ..... public class InnerClass { private int innerData; // ...... }}内部类应该算得上是Java学习过程中的一个难点了。它之所以难,我觉着有两个方面:一是它的语法相比于Java其它原创 2010-12-02 00:10:00 · 4732 阅读 · 6 评论 -
JAVA学习笔记 -- Vector, ArrayList, Array
<br />前一阵子第一次用JAVA写了个项目,这距离我认真学习JAVA还不到2个月。很多时候,我不得不边学JAVA边写做项目。但正因为如此,我深刻体会到了JAVA的简单和方便。这其中Eclipse也起了很大的作用,当我在Eclipse上噼里啪啦的敲代码的时候,我才真切认识到在LINUX下敲VI是多么的土鳖。总而言之,我现在已经深深地”迷恋“上了JAVA,除了一点:不能”碰“内存这件事真的让我有时候很不爽。<br />说跑题了。<br /> <br />JAVA新手在使用JAVA的时候大概都会遇到这个问题:原创 2010-08-04 16:44:00 · 2480 阅读 · 0 评论 -
诡异的java.lang.IllegalMonitorStateException
今天的一段代码抛出了java.lang.IllegalMonitorStateException,代码如下: private boolean wait = false; public boolean pleaseWait() { synchronized (thi原创 2011-08-22 20:39:33 · 82961 阅读 · 17 评论