2009年5月16日星期六
blogspot在中国大陆再次被封
blogspot is blocked in china.
这个博客即将关闭,博客另寻新址。
I will leave blogspot soon and stop refresh my blog here....
bye.
2009年5月10日星期日
Java性能优化之实时性[3]
Compiler
类以编程的方式编译方法可以减轻这一问题,但是维护这样的方法非常乏味并且容易发生错误。Java性能优化之实战算法[2]
2009年5月9日星期六
Java性能优化之实战漫谈[1]
例子一:
class A {
int a_num;
B b;
}
class B{如果改成下面这样怎么样?
int b_num;
A a;
}
某些Java应用程序当对象太多而垃圾回收器还没有来得及回收的时候,就可能会导致堆内存溢出,其实内存溢出是分为栈内存溢出和堆内存溢出的,关于堆和栈的区别,可以参考program-think的这篇文章,讲的通俗易懂。关于上面的这个例子,就是我在实际编码中发现的一个造成内存消耗严重的一个问题,你或许还会认为上面那种写法更技术,更××。如果A的实例和B的实例个数很少的时候还好,但是如果他们的实例个数达到上百万的级别的时候,你就会思考一下是不是要换成下面这种写法了。首先你要了解怎么去计算一个对象会占多少字节的内存,然后思考为什么下面的写法会比上面的占用更少的内存?
class AB {
int a_num;
int b_num;
}
其实,如果不是在内核运算的地方,或者某个对性能要求很高的地方写这句话完全没有问题,但如果在某个关键的地方,比如在某个要调用极多次数的方法里写用这个方法,也许就会出现问题。在这种地方,最好还是不要偷懒,用最原始但很高效的数组来解决问题。
list.addAll(java.util.Arrays.asList(objct_array));
Object[] old_array = array;
array = new Object[old_array.length + new_array.length];
System.arraycopy(old_array, 0, array, 0, old_array.length);
System.arraycopy(new_array, 0, array, old_array.lengyh, new_array.length);
事实上:ce_list.addAll(java.util.Arrays.asList(ce_array));这句效率是非常慢的,它将
一个数组变成了一个list又变成一个数组又变成一个list,因为内部是这样实现的:
public static List asList(Object[] a) {
return new ArrayList(a); // 新建了一个对象,同时数组变成一个list.
}
public boolean addAll(Collection c) {
Object[] a = c.toArray(); // 看这里, list又变成了一个数组,绕了一圈啊
int numNew = a.length;
ensureCapacity(size + numNew); // Increments modCount
System.arraycopy(a, 0, elementData, size, numNew); // 这个跟修改后做的差不多
size += numNew;
return numNew != 0;
}
结果证明:修改后这部分消耗的临时内存没有了,速度也变快了。2009年4月25日星期六
信息2.0(译文)
这篇文章的作者是印度一家公司www.InRev.org的市场总监,这是一家十分年轻的公司,刚刚成立不久,致力于数据分析。就像它的名字InRev一样,他们野心勃勃的想要参与到信息革命中的浪潮来,并在其中充当至关重要的弄潮儿。
在作者的另外一篇博客Analytics Industry(分析工业)中曾指出在中国这样数据分析公司几乎没有,而国外这些公司已经小有规模,中国如果想要赶上信息革命的浪潮,也许应该具备更长远的眼光。
这篇文章主要指出了市场对于智能处理数据的需求,介绍了Web上现有的一些处理工具和报表工具,指出信息2.0的时代已经到来——
----------------------------------------
----------------------------------------
信息2.0
作者:Deep Sherchan
译者:YantseFisher
原文地址:http://engineeringanalytics.blogspot.com/2008/11/information-20.html
发表日期 2008年11月21日,星期五
毫无疑问,这是信息的时代。但是,随着数据量的增长和大量冗余的出现,我们很容易就会迷失在这些海量的数据中。你是否记得你有多少次坐在电脑前为了去查找某个具体知识的相关内容,发现自己毫无目的的漫游了几个小时,忘记了你原来的意图。经常这样,不是吗?
Google通过提供高效率的搜索引擎,使得我们查找这些信息数据变得容易多了。不知怎么的,我们所有的人都开始变得懒惰起来,甚至不愿意去记住那些网站的名字,因为我们都很相信搜索引擎。那么信息革命的下一步是什么?分析?
好吧,我并不是要吹嘘我的专业背景,但是当信息量太大的时候,你当然需要某个东西去分析它们,还有...还有什么?还有就是要把他们报告给最终用户。
最终,我们需要的是定义明确,解释清楚的信息。所以,你不难在这里或者那里发现很多报表工具。但是,你能够经常找到一个网络报表入口,并且它是基于开源软件的哲学吗?我曾遇到过的这样一个工具是OpenI.
当我们讨论报表工具的时候,根据数据量的不同大小,他们是基于不同的数据库系统或者结构。最常见到的数据库系统有MySQL,Oracle,PostGreSQL,SQL等等。但是,报表并不是直接从数据库服务器制作而来的,在他们之间还需要一些中间层,以便让这些数据能够被处理成需要的形式。
在OpenI中,这些中间层就是发布于J2EE服务器上的OLAP和RDBMS。技术上说,OpenI是某些基于Java的工具的整合,像JPivot,JFreeChart,Mondrian和Jasper Report。
它提供了一种简单的方式去将处理过的OLAP数据和最终用户联系起来,通过文字图形和图表的形式,用户只要简单的单击按钮,然后进行查询处理。使用它非常有趣,尤其当他是基于网络的。今后不久,各种信息处理器便会冲斥市场,这是必然的。
由于市场上对于智能数据的需求,我十分确信的告诉诸位,这就是我们正在提及的信息2.0的时代。
2009年4月6日星期一
读《少有人走的路》



2009年4月5日星期日
读《影响力》

2009年3月22日星期日
合肥行记
2009年3月7日星期六
谈谈学习型组织的实践

2009年2月15日星期日
能坚持
2009年1月19日星期一
酒、诗和女人
2009年1月15日星期四
要想创新,就不要让一个人做同一个任务两次
今天看着我写的设计器,呆呆地凝视了好久,发现自己已经不容易想到哪些地方可以改进了,回想到刚刚碰到它的时候,感觉浑身都是毛病,觉得处处都有地方可以提高?
那么,是现在的设计器达到完美的状态了吗?如果我不是犯傻的话,肯定不会这么认为,更不会觉得已经达到完美的状态了。那么为什么我不像刚接触它时有那么多想法可以去改进它呢?
因为这是我做的,设计器的每个细节都是我码出来的,是我的选择。普通人都会倾向于欣赏自己做出来的东西,这也算是一种偏见和本性。抛开这个偏见不说,一件事情的完成的多数细节,就是他自己的理念,性格,思想的表现。而这些东西恰恰是一个人内在最实质的东西,所以让他继续做这个事情,也摆脱不了这些实质东西所影响的范围。
所以,要想创新和提高,就不要让一个人重复完成某项任务两次,因为根据以上推论,这第二次很有可能失败,除非这个人的思想获得了实质性的飞跃。
好方法有很多,让有潜力的新人做肯定比那个已经做过这个事情的老手要好,这是我的想法。