java
jollyjumper
一点记录
展开
-
sbt中使用log4j
build.sbt中加入scalaVersion := "2.9.1"libraryDependencies += "log4j" % "log4j" % "1.2.14"src/main/scala/MyApp.scala中写入:import org.apache.log4j.Loggerobject MyApp { val logg原创 2013-12-30 17:11:54 · 4643 阅读 · 0 评论 -
CharsRefIntHashMap并不比HashMap<String, Integer>快
我模仿lucene的BytesRef写了一个CharsRefIntHashMap,实测效果并不如HashMap。代码如下:package com.dp.arts.lucenex.utils;import org.apache.lucene.util.CharsRef;public interface CharsRefIntMap{原创 2014-11-12 23:29:00 · 1209 阅读 · 0 评论 -
JDK6中AtomicInteger的实现
AtomicInteger extends Number implements Serializable,内部果然是一个volatile int,但是compareAndSet(CAS),incrementAndGet等原子操作都依赖于unsafe.compareAndSwap,这个应该是对不同平台又不同实现,汇编级别的lock free,并注意每次compareAndSet只有当true时才返回原创 2014-10-18 21:59:05 · 1024 阅读 · 0 评论 -
好用的OQL
jmap -dump:live,format=b,file=a.bin `cat bin/search_server.pid`jhat a.binOQL真心赞,只是jhat太慢了,增大内存不会变快反而会莫名挂掉。另外java6的oql似乎有点bug,有些应该支持的查询不能支持,java7的比较正常。原创 2015-01-09 22:07:03 · 1112 阅读 · 0 评论 -
split的坑
之前有同事分享过,网上看到一个:http://yinny.iteye.com/blog/1750210补充一下,如果要解析类似csv的一行(但不需要处理转义),用String.split(str,sep,0)可以,它不会丢弃分出来的空串,但sep是regex,有性能问题,或者容易混淆。StringTokenizer虽然性能快,但是会把空串去掉。apache common lang3提供的接原创 2014-12-06 09:17:18 · 916 阅读 · 0 评论 -
MAC下设置mavenJDK版本
compile-plugin可以设置source和target使用的jdk 版本。mvn -v可以看出使用的jdk版本,在mac上需要修改CurrentJDK软链接http://stackoverflow.com/questions/18813828/why-maven-use-jdk-1-6-but-my-java-version-is-1-7http://stackover原创 2014-12-06 09:24:43 · 3347 阅读 · 0 评论 -
代际垃圾回收器的一种快速Write Barrier算法
论文: A Fast Write Barrier for Generational Garbage Collectorshttp://hoelzle.org/publications/write-barrier.pdf老年代需要记录对新生代的对象引用,以便于新生代GC之后更改老年代相应位置的引用,不然就要扫描整个老年代了。这些标记称为Remembered Set。确保代际的引用位置原创 2014-12-09 15:56:03 · 3040 阅读 · 0 评论 -
JNA的使用
JNA据说比jni简单很多,这里有一篇介绍,用法简单、但性能比jni有所下降(基于jni):http://blog.csdn.net/shendl/article/details/3589676/es中用得更简单:package org.elasticsearch.common.jna;import com.sun.jna.Native;import org.e原创 2015-04-18 09:39:36 · 2620 阅读 · 0 评论 -
老年代泄漏与MetaSpace
http://blog.csdn.net/goodzyw/article/details/48036037https://stackoverflow.com/questions/17652280/is-the-permgen-space-ever-decreasedhttp://blog.csdn.net/zhyhang/article/details/17246223永久代内转载 2017-12-21 12:07:32 · 513 阅读 · 0 评论 -
JDK6中LinkedBlockingQueue中的锁机制
常识,之前有的没搞清楚,导致写代码时不少疑惑。比较典型的同步例子,用了两个Condition,notEmpty和notFull,分别对应两个lock,takeLock和putLock。查看take的代码:E x;int c = -1;final AtomicInteger count = this.count;final AtomicInteger takeLock = thi原创 2014-09-20 22:24:27 · 2218 阅读 · 0 评论 -
Hotspot VM中jit的触发条件
使用-XX:CompilationThreshold来控制,看起来这是循环次数,达到这个数目就触发jit.默认是10000,但在server上1500比较理想(stackoverflow上的说法),实测以下1500跑lucene search的确比默认的略快一些。原创 2014-04-08 13:38:00 · 1525 阅读 · 0 评论 -
java properties文件的使用
经常看到java程序中带properties文件(包括log4j,junit的使用),作为一个java所知甚少的程序员,有必要搞清楚这个问题.首先,这个文件经常是作为资源文件的,maven,sbt中资源文件一般还独立一个src/java/resource文件夹,资源文件一般是通过getResouce,getResourceAsStream(获取对应InputStream)获得.如:Test原创 2013-12-30 00:10:07 · 10937 阅读 · 0 评论 -
Java Performance Tuning笔记
pdf在这里: http://mfinocchiaro.files.wordpress.com/2008/07/java-virtual-machine-neutral.pdf以及关于gc的官方文档:http://www.oracle.com/technetwork/java/gc-tuning-5-138395.html原创 2014-03-02 19:14:23 · 2244 阅读 · 0 评论 -
使用JUnit
使用junit测试lucene:import junit.framework.*;import org.apache.lucene.index.IndexReader;import org.apache.lucene.index.IndexWriter;import org.apache.lucene.index.IndexWriterConfig;import org.apa原创 2014-03-04 15:08:34 · 939 阅读 · 0 评论 -
System.nanoTime系统休眠后不能更新到最新
早上同事发现server B上tracking的时间戳不对,比标准时间滞后大约两个小时,推测是服务器在系统休眠后获取当前时间有错.我做了一下测试,的确是这样.System.currentTimeMillis获取的时间总是正确的,不管是否休眠.而System.nanoTime获取的非墙面时间主要用于计算时间差或提高精度,系统休眠后则会忽略掉休眠的时间.原创 2014-03-06 11:54:33 · 1369 阅读 · 0 评论 -
测试了下BufferedOutputStream的理想缓存大小
在我那台戴尔学生本上,对文件写入1千万条hello,world用FileInputStream花了52秒。因为一般是写入在page cache,估计主要花的时间是频繁的系统调用。使用BufferedOutputStream发现缓存设置影响都不太大,64K是比较理想的:默认512字节缓存 1106ms64K缓存 1083ms512K缓存 1551ms1M缓存 1268ms原创 2014-03-29 19:15:10 · 4677 阅读 · 0 评论 -
Java String.intern()相关
为了节约内存,java String中内置intern方法,保留String的弱引用哈希表。在Java 6中这个表放在永久代,永久代的内存配置很固定,而且pool size不可配置,不方便。升级到java7之后,可以使用-XX:StringTableSize(默认1009)设置pool size(为了性能应使用素数)。从参考资料看,只要pool size够大,性能是很不错的。而且相比自己手工写原创 2014-04-19 23:28:13 · 1176 阅读 · 0 评论 -
使用ByteRef加速String类型DocValues的加载
目前商户索引DocValues非常大,warmup时花费70-80秒(在beta环境),有62秒在加载DocValues,发现其中有54秒时间在加载string docvalues,string docvalues涉及的总数达到138M,平均一个字符串13字节,但如果只是读,只要花费大约2秒时间(之前已经通过cat加入page cache),为什么花这么多时间?大部分时间花在String(byte原创 2014-04-21 21:42:40 · 1952 阅读 · 0 评论 -
Sun JDK 1.6中String Constructor的一个bug
Java Performance Tuning Guide中看到的: http://java-performance.info/inefficient-byte-to-string-constructor/大致是传递byte array,offset,len, 还有charset时其在内部会arrays.copyOf整个数组(而不是那个slice),这样如果数组本身很大,slice很小,byt原创 2014-04-21 21:25:17 · 1058 阅读 · 0 评论 -
使用log4j2
除了要去掉不相关的bindings,要exclude掉一些dependency.另外依赖加上:log4j-api >=2 版本 (如2.4.1)log4j-core >=2 版本log4j-slf4j-impl >=2 版本 (因为很多应用用得还是slf4j日志接口,所以要桥接)如果使用AsyncLogger,还要依赖com.lmax:disruptor(如3...原创 2018-08-07 22:16:56 · 148 阅读 · 0 评论