成为Java GC专家系列(3) ——如何优化Java垃圾回收

2013年5月17日 没有评论
原文地址:http://www.cubrid.org/blog/dev-platform/understanding-java-garbage-collection/
翻译原文:http://www.importnew.com/1993.html
注:次系列文章是我在ImportNew的基础上进行整理翻译的(主要是格式修改和翻译校对)。

本文是成为Java GC专家系列文章的第三篇。在第一篇《成为Java GC专家系列(1) ——Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是年轻代和年老代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响。

在第二篇《成为Java GC专家系列(2) ——监控Java垃圾回收》,我解释了JVM实际上是如何执行垃圾回收的,我们如何监控GC,以及那哪些具可以让我们的工作更快,更高效。在第三篇文章中,我们会基于实际的例子来解释一些优化GC的最佳实践。我认为在阅读本篇文章之前,你已经很好地理解了之前的文章,因此,为了你能够更好地学习本文,如果你还没[......]

阅读全文…

分类: JVM 标签: ,

Java到底是传引用还是传值?

2013年5月16日 4 条评论

来自javaworld上的一篇文章,很简单的知识点,这会来看,还是有收获。

1.问题

如果Java是用引用来传递的话,为什么交换函数不起作用了?

2.回答

你所说的问题是java新手常会犯的错误,事实上,一些老手也可能搞混这些概念。

Java确实是使用引用来操作对象,并且所有的对象变量都是使用引用,但是,Java在方法传递参数时传的不是引用,而是值。

以 badSwap() 函数为例:

public void badSwap(int var1, int var2)
{
  int temp = var1;
  var1 = var2;
  var2 = temp;
}

当badSwap方法返回时,被当作参数传入的变量仍然保持了原来的值不变。如果我们把传入的int型变量改为Object型结果也是一样的,因为Java是通过传值来传递引用的。现在,我们来看下是哪个地方搞的鬼:

public void tricky(Point arg1, Point arg2[......]

阅读全文…

分类: java 标签:

成为Java GC专家系列(2) ——监控Java垃圾回收

2013年5月16日 没有评论
原文地址:http://www.cubrid.org/blog/dev-platform/understanding-java-garbage-collection/
翻译原文:http://www.importnew.com/1993.html
注:次系列文章是我在ImportNew的基础上进行整理翻译的(主要是格式修改和翻译校对)。

本文是成为Java GC专家系列文章的第二篇。在第一篇《成为Java GC专家系列(1)——Java垃圾回收机制》中我们学习了不同GC算法的执行过程,GC是如何工作的,什么是新生代和老年代,你应该了解的JDK7中的5种GC类型,以及这5种类型对于应用性能的影响。

在本文中,我将解释JVM到底是如何执行垃圾回收处理的

什么是GC监控?

垃圾回收收集监控指的是搞清楚JVM如何执行GC的过程,例如,我们可以查明:

1.  何时一个新生代中的对象被移动到老年代时,所花费的时间。

2.  Stop-the-wor[......]

阅读全文…

分类: JVM 标签: ,

成为Java GC专家系列(1) ——Java垃圾回收机制

2013年5月16日 没有评论
原文地址:http://www.cubrid.org/blog/dev-platform/understanding-java-garbage-collection/
翻译原文:http://www.importnew.com/1993.html
注:次系列文章是我在ImportNew的基础上进行整理翻译的(主要是格式修改和翻译校对)。

对于Java开发人员来说,了解垃圾回收机制(GC)有哪些好处呢?首先可以满足作为一名软件工程师的求知欲,其次,深入了解GC如何工作可以帮你写出更好的Java应用。

这仅仅代表我个人的意见,但我坚信一个精通GC的人往往是一个好的Java开发者。如果你对GC的处理过程感兴趣,说明你已经具备较大规模应用的开发经验。如果你曾经想过如何正确的选择GC算法,那意味着你已经完全理解你所开发的应用的特点。当然,我们不能以偏概全,这不能作为评价一个好的开发人员的共通标准。但是,我要说的是,深入理解GC是成为一名伟大的程序员的必经之路。

这是成为JavaGC专家系列文章的第一篇,本篇主要针对GC机制进行介[......]

阅读全文…

分类: JVM 标签: ,

Eclipse在线安装Drools插件

2013年5月15日 没有评论
  1. Start Eclipse
  2. Help -> Install New Software
  3. In the Work With: or Site: input field, enter: “http://download.jboss.org/drools/release/5.5.0.Final/org.drools.updatesite/” and click the “Add” button
  4. For the Name you can just enter “Drools”
  5. Check the Drools and jBPM checkbox and follow the instructions to get it installed.
分类: Drools 标签:

Java HotSpot VM中的JIT编译

2013年5月14日 没有评论

原文地址译者:郭蕾 校对:丁一

本文是Java HotSpot VM and just-in-time(JIT) compilation系列的第一篇。

Java HotSpot虚拟机是Oracle收购Sun时获得的,JVM和开源的OpenJDK都是以此虚拟机为基础发展的。如同其它虚拟机,HotSpot虚拟机为字节码提供了一个运行时环境。实际上,它主要会做这三件事情:

  • 执行方法所请求的指令和运算。
  • 定位、加载和验证新的类型(即类加载)。
  • 管理应用内存。

最后两点都是各自领域的大话题,所以这篇文章中只关注代码执行。

JIT编译

Java HotSpot是一个混合模式的虚拟机,也就是说它既可以解释字节码,又可以将代码编译为本地机器码以更快的执行。通过配置-XX:+PrintCompilation参数,你可以在log文件中看到方法被JIT编译时的信息。JIT编译发生在运行时 —— 方法经过多次运行之后。到方法需要使用到的时候,HotSpot[......]

阅读全文…

分类: JVM 标签:

我们需要StringBuffer么?

2013年5月9日 2 条评论

这些天的工作中,一直在不停的拼字符串,所以较多的使用了StringBuffer这个类,昨天没事看了看自己的代码,突然想到面试时经常被问到的StringBuffer和StringBuilder的区别,脑子里只是有个大概的印象,一个是线程安全的,一个是线程不安全的。

当然我也随手点进去看了看StringBuffer的源代码,随便看了两个常用的方法:append和toString。他们都在方法上做了同步:

 public synchronized String toString() {
	return new String(value, 0, count);
 }

我立马意识到自己使用StringBuffer是多么大的一个失误,因为我使用StringBuffer的场景都是把他用作局部变量,根本不会有线程安全的问题,所以我立马将代码中所有的StringBuffer替换为StringBuilder。改完了,回来再仔细想想,StringBuffer这个类还有必要存在么?我觉得我们完全可以忽略他的存在,直接使用StringBuilder,原[......]

阅读全文…

分类: Drools, java 标签:

规则引擎开发

2013年5月6日 没有评论

最近两个月以来,一直在开发公司的规则引擎系统,起初是想把引擎用到CRM系统中,后来经过多次讨论、多次变更,领导决定把这个规则引擎做成中间件,在平台的高度来使用他。做成中间件,对规则引擎的要求更高了,这需要引擎具备高灵活性和伸缩性,来适应不同的业务系统。下面我来谈谈开发过程中我的一些经验。

曾经听板桥先生说过,架构设计需要从事物外部(通过与其他同类事物比较)和深入事物内部两种方式来进行,实际就是“做什么”和“怎么做”分离。首先,我需要技术选型,在众多的规则引擎中,适合java项目的有ILog、Jess、Mandarax、Drools,由于ILog和Jess不是开源的,所以这两个提前出局。剩下Mandarax和Drools,这两个开源项目各有千秋,但是我比较了一下,Mandarax最近几年都没有过更新,并且文档不全、社区不活跃,而Droos在google一搜,有很多的mail list供我参考,所以我很倾向于使用Drools。在一篇Mandarax的入门文档的评论里,我看到一个朋友在业务的角度来比较他们俩,看完后,我更加确定Drools是最适合我的。[......]

阅读全文…

分类: Drools 标签:

Drools从字符串中加载规则

2013年4月28日 没有评论

看了Drools官方的例子后发现,他的规则基本都是从Drl文件中读取的,而在我们的项目中(其实我们的项目代表很多的使用场景),规则是根据配置条件动态组装的,最后会组装成一个String字符串然后交给Drools处理。查了API后,找到了如下的使用方法:

// read rule from String
String myRule = "import hellodrools.Message rule \"Hello World 2\"
when message:Message (type==\"Test\")
then System.out.println(\"Test, Drools!\");
end";
StringReader strReader = new StringReader(myRule);
Resource myResource = ResourceFactory.newReaderResource(strReader);
kbuilder.add(myResource, ResourceType.DRL);

完整的测试代码如[......]

阅读全文…

分类: Drools 标签:

ubuntu13.04安装搜狗输入法(带多套皮肤)

2013年4月28日 没有评论

ubuntu默认输入法为ibus,但更多人喜欢用fcitx,尤其是现在fcitx搭载了搜狗词库和皮肤,使用起来更加方便。

1.安装fcitx之前先卸载ibus

$ sudo apt-get purge ibus ibus-gtk ibus-gtk3
$ sudo apt-get purge ibus-pinyin ibus-table python-ibus
$ killall ibus-daemon
$ rm -rf ~/.config/ibus

apt-get purge表示非常干净的卸载软件包,包括配置文件。

2.使用以下命令安装搜狗输入法

$ sudo add-apt-repository ppa:fcitx-team/nightly
$ sudo apt-get update
$ sudo apt-get install fcitx-sogoupinyin

3.下载皮肤

下载搜狗皮肤:点我

其他皮肤下载:点我

4.注销系统[......]

阅读全文…

分类: xubuntu 标签: , ,

无觅相关文章插件,快速提升流量