Xiangyu's profile* Learning To Fly *BlogListsGuestbookMore Tools Help

Blog


    22 October

    More on Java Garbage Collection

    许久以前写过一篇关于Java中的System.gc的文章,今年偶然又想起这回事儿,遂又找了些资料看看。
    下面这篇是写得比较详细明白的,有兴趣的可以看一下。

    http://www.artima.com/insidejvm/ed2/gcP.html

    06 January

    Java性能调优小记

    在处理大数据量时:
    1. 不用各种auCommit,自己定义和调整commit的阈值。
    2. 贵重资源尽量重复利用。
    3. 尽可能用buffer读取文件,不用readLine之类的。
    4. 及时释放资源。

    如果想控制CPU使用率在一定值之内,达到不影响用户正常使用的目的,可以使用间歇性sleep,sleep的时间比例需要具体调优来确定。

    最后,调优的第一准则:每次只解决当前最大的瓶颈,解决后再次寻找最大瓶颈。
    22 December

    Netbean 6.5 At a Glance

    今天偶然看到了Netbean 6.5的一篇宣传文章,就下了一个用了用。
    然后在写了一个hello world之后就抛弃了……

    原因只有一个:字体太难看……

    做产品,外观很重要啊~还是Eclipse用着舒服,没有特殊需求看来是不会切换了~
    17 July

    Eclipse 3.4 Released

    最近下载了Eclipse今年最大的Release,3.4,名字挺酷,叫Ganymede,是一个希腊神仙的名字,据说是宙斯一个很帅的儿子。

    于是就开始用它code,感觉还不错,有一些很体贴的细微改动,很细微,但是却很实用,而且似乎也还算稳定,起码目前还没有crush过。其他功能还有待开发~

    有兴趣的同学们不妨一试~
    03 July

    郁闷的一天

    把杂事基本做得差不多了,打算今天开始好好整整我们的ProtoType。

    但是必须要解决的是很久之前遗留下来的一个Jena的SPARQL问题。本以为找些资料,多试试,实在不行问问傻徐就可以搞定的事情,居然搞了一天都没找到我希望的解决方案,只能以一个折中方案告终,极度不爽~

    开源项目啊,对你真是又爱又恨……

    不管怎样,就算解决了吧,能继续就好,烂摊子以后再说……
    14 May

    CVS, Firewall

    在Windows上装CVS之后,千万不要忘了为其开防火墙端口例外,深受其害~
    28 March

    关于ScribeFire升级

    ScribeFire的两个版本1.4.7和1.4.8对于Windows Live Space不能正常工作。

    所以,我退回到了1.4.6,这个是目前最新的对Space可以正常工作的版本。
    04 November

    Hash Index Done ~

    哈希算是写完了吧,不过不如想象中的好,有些东西没有实现,有些遗憾,不过要学会原谅自己,最近实在太忙了,身心俱疲。

    Get ready for the death journey~
    I'm the best.


    Powered by ScribeFire.

    21 October

    B+ Tree Done

    忙活了将近两周,终于把这个破玩意搞定了。

    感想:低级错误太多了……如果没有那么多的低级Bug,时间至少能节省一多半~

    不管怎样,是写出来了,基本满意吧,想做的基本都做了,没时间做内存管理比较遗憾,以后有机会再说吧~

    最后向大家推荐一下YourKit Java Profiler这个工具,很好用,非常利于Debug时的错误定位,不过是个收费软件,不知道有没有破解~

    下周终于可以好好读些paper了~


    Powered by ScribeFire.

    15 October

    Debug

    I hate debugging.


    Powered by ScribeFire.

    14 October

    浅谈Java中的System.gc()的工作原理~

    趁着今天写程序的热乎劲儿,小谈一下System.gc()这个神秘的东东~

    很多人把Java的“效率低下”归咎于不能自由管理内存,但我们也知道将内存管理封装起来的好处,这里就不赘述。

    Java中的内存分配是随着new一个新的对象来实现的,这个很简单,而且也还是有一些可以“改进”内存回收的机制的,其中最显眼的就是这个System.gc()函数。

    乍一看这个函数似乎是可以进行垃圾回收的,可事实并不是那么简单。
    其实这个gc()函数的作用只是提醒虚拟机:程序员希望进行一次垃圾回收。但是它不能保证垃圾回收一定会进行,而且具体什么时候进行是取决于具体的虚拟机的,不同的虚拟机有不同的对策。

    那么下一个问题就是:gc()进行回收的准则是什么?也就是说什么样的对象可以被回收?
    简单来说就是:没有被任何可达变量指向的对象。这里的可达是我发明的……意思就是能够找到的,那什么样的是不可达的呢?
    比如说:
    a.v = b;
    b.v = c;
    /*
     *Watch out !
     */
    a.v = d;
    看一下这段代码:
    第一行:对象a的变量v指向了对象b
    第二行:对象b的变量v指向了对象c
    第六行:对象a的变量v指向了变量d。
    这个时候,虽然变量c指向的对象有c以及b.v指向它,但是它们都已经不可达了,为什么?因为唯一可以找到它们的是a.v,但是现在a.v指向了d,所以他们就是不可达的了。

    理由也很直观:没有任何可达变量指向你,你还有活下去的理由吗?你就算活下去谁能找得到你呢?

    所以说,C++中将释放了的指针置为null的习惯要保留到Java中,因为这有可能是你释放内存的唯一途径。

    最后的箴言:不要频繁使用gc函数。
    我的建议是:保持代码健壮(记得将不用的变量置为null),让虚拟机去管理内存。

    晚上还要赶程序,就说这么多~


    Powered by ScribeFire.

    06 October

    OrientI

    有多少人知道OrientI这个名字?恐怕没几个……

     

    这很正常,因为这是一个开发到一半就停工的项目,开发者呢,就是我。

     

    这是我进入实验室接触的第一个项目,做了有一段时间,虽然中途由于别的事情耽搁了下来,不过收获还是很大的~

     

    最近忽然想起了她,觉得不应该这么对她,遂决定翻出来看看。

     

    今天看了一天Legacy代码,依稀想起了很多,那时的事,那时的我~

     

    决定把它做下去,虽然时间比较难以保障,不过我会尽力的。

     

    我的要求不高,毕业之前做出来,就算对得起自己。

    03 August

    VLDB 07

    VLDB07 has announced its accepted papers recently and click here to pick your favorate papers.
     
    Enjoy :)
     
    07 February

    Keep Walking Slowly ...

    The study of Nutch&Hadoop has drawn half of the circle, but it already took too much of me :(
     
    I finally got my Nutch distribution being able to perform distribute crawl, but I'm still unsure about my modification of the distribution, especially the start-mapred.sh and the start-dfs.sh. But they don't seem to trouble me too much since, so I guess I just wait and see.
     
    My next job is to figure out the distribute search, which may be easier compared with crawl, but only maybe.
     
    Lin told me to hand in an technique report on Nutch and also a presentation, so I guess I have to make everything cleaer enough for everybody to understand.
     
    Big job, but I think I can be  bigger :)