Java 最好的 IDE 是 [IntelliJ IDEA][intellij]。它有大量的牛逼的特性,它是真正的能让 Java 用来像不戴套做爱那么爽的工具。自动完成功能超棒,[代码检查功能也是顶尖的][intellijexample],重构工具那是相当有帮助。
免费的社区版对我来说已经足够好了,但是它的旗舰版加载了更多的牛逼的特性,如数据库工具,Spring 框架的支持和对 Chronon 的支持。
Chronon
我最喜欢 GDB 7 的特性之一就是调试的时候能够按照时间跟踪回来。当你拥有了旗舰版的 IntelliJ,你可以通过安装 [Chronon IntelliJ 插件][chronon]实现。
你可以获取到变量的变化历史,后退,方法的历史以及更多的信息。如果你是第一次用会觉得有点怪,但是它真的能够帮你解决很复杂的 bug,诸如海森堡类的 bug。
持续集成往往以软件即服务为产品目标。想象一下如果你不用等待代码构建完成而能实时看到代码的变化会是怎样?
这就是 [JRebel][jrebel] 所做的。一旦你将你的服务器和你的 JReble 以 hook 方式连接,你就可以从服务器看到实时变化。当你想快速试验的时候它能为你节省大量的时间。
Java 的类型系统很差劲。它不能够区分正常的字符串和正则表达式字符串,更不用说[坏点检查][taint]了。不过 [Checker Framework][checker] 可以完成这个功能并且能够实现更多的东西。
它使用像 @Nullable 这样的注解来检查类型。你甚至可以使用[自定义注解][customchecker]来实现静态分析,甚至更强大的功能。
- :一个静态代码分析工具,它主要着力于保证你的代码符合代码标准。检查规则在一个 XML 文件中定义,你可以把它检入你的版本控制工具,和你的代码放在一起。
- FindBugs:主要集中于发现你的代码中可能导致产生 bug 或者错误的部分。虽然作为独立的进程运行,但是对流行的 IDE 和构建工具的支持也很好。
- :和前面所述的工具不同,它是在本地运行的,SonarQube 启动一个服务器,你把你代码提交到这个服务器来进行分析。它提供了 web 界面,你可以看到你的代码的健康状况信息,如不好的做法,潜在的 bug,测试覆盖率百分比,和你写代码的技术水平
除了在开发工程中使用这些工具,把它们用在你的构建阶段往往也是一个不错的想法。它可以和想 Maven 或者 Gradle 这样的构建工具绑定到一起,也可以和持续集成工具绑定使用。
即使在 Java 中内存泄露也时有发生。幸运的是,我们有一些工具就是为此而生。[Eclipse Memory Analyzer][mat] 是我用过的最好用的解决内存泄露问题的工具。它能够获取到堆栈信息让你查阅,去发现问题所在。
有几种方法可以获取到 JVM 进程的堆栈信息,但是我用 [jmap][jmap] 工具实现:
然后你可以用内存分析器打开 heapdump.hprof 文件,快看看到底是怎么回事。