关于Java中尾递归的优化

最近总有人问我,Java SE8里有没有针对尾调用做优化(这是一种特殊的函数调用)。这个优化和递归调用密切相关,而递归调用对函数式语言来说尤其重要,因为它们通常都基于递归来进行设计编码。本文会介绍到什么是尾调用,怎样可以对它进行有效的优化,以及Java 8在这方面是如何做的。

Published: 16 Apr 2014

Java 8:通过反射获取方法参数名

JDK 8中一个很少被提及的特性就是它可以方法参数的元信息存储到编译完的class文件中(JEP 118)。这个特性使得Java程序可以在运行时通过反射来获取参数的元信息。

Published: 15 Apr 2014

使用StaGen来生成静态网站

译注:StaGen是一个功能极其简单的静态站点生成器,因此它非常容易上手,同时它还是用Java 8写的,有兴趣的话可以看下它的源代码。当然我个人还是比较喜欢Jekyll

Published: 14 Apr 2014

Java 8:ORM已经过时了

ORM已经过时了

Published: 13 Apr 2014

Java函数式编程(十二)收集器

Published: 12 Apr 2014

不容忽视的ClassNotFoundException

相信很多Java开发人员都对这个常见却不招人待见的java.lang.ClassNotFoundException并不陌生。出现这个异常的原因大家都清楚(classpath路径下缺少class文件或者jar包了,或者是类加载器委派的问题等),不过对于它给JVM带来的性能影响可能就不了解了。这个异常可能会严重影响应用程序的响应时间和可伸缩性。

Published: 11 Apr 2014

Java开发的10位牛人

James Gosling

Published: 10 Apr 2014

Java字节码浅析(三)循环语句

从Java7开始,switch语句增加了对String类型的支持。不过字节码中的switch指令还是只支持int类型,并没有增加对其它类型的支持。事实上switch语句对String的支持是分成两个步骤来完成的。首先,将每个case语句里的值的hashCode和操作数栈顶的值(译注:也就是switch里面的那个值,这个值会先压入栈顶)进行比较。这个可以通过lookupswitch或者是tableswitch指令来完成。结果会路由到某个分支上,然后调用String.equlals来判断是否确实匹配。最后根据equals返回的结果,再用一个tableswitch指令来路由到具体的case分支上去执行。

Published: 09 Apr 2014

Lombok: Java开发的利器

译注:Lombok是一个很老的项目了,也非常实用,但奇怪的是这么多年来似乎一直不温不火。本文只是简单介绍了它的一些基础功能。更多特性可以参考它的官网。

Published: 08 Apr 2014

Java函数式编程(十一)Comparator

Published: 07 Apr 2014