Java中另类使用内存的方法

sun.misc.Unsafe为你大开Java的方便之门,你可以用它做很多Java不允许的事情,在一些非常特殊的场景下它还是非常有用的。99%的时候,你都应该避免使用它,然而在有些非常罕见的情况下,只有它能解决问题。

Published: 10 Mar 2014

通过反射跟踪JVM的运行时状态

我们经常会在工作中用到反射,要么直接使用,要么通过一些框架。在Java和Scala编程里,如果想要和我们的代码进行跟踪交互,却又希望对代码透明,最主流的一个方式就是反射。不过我们用到的反射通常都局限在Java和Scala代码里,并运行在JVM中。如果我们不仅是要跟踪自己的代码,还想跟踪JVM的代码怎么办呢?

Published: 09 Mar 2014

Java那些不为人知的特殊方法

如果你用过反射并且执行过getDeclaredMethods方法的话,你可能会感到很吃惊。你会发现出现了很多源代码里没有的方法。如果你看一下这些方法的修饰符的话,可能会发现里面有些方法是volatile的。顺便说一句,如果在Java面试里问到“什么是volatile方法?”,你可能会吓出一身冷汗。正确的答案是没有volatile方法。但同时,getDeclaredMethods()或者getMethods()返回的这些方法,Modifier.isVolatile(method.getModifiers())的结果却是true。

Published: 08 Mar 2014

Java中常见的坑

概述

Published: 07 Mar 2014

Java的Externalizable接口

在理解Externalizable接口之前,你需要先理解什么是序列化。有关序列化可以读下 这篇文章多了解一些。 Java提供了序列化的机制来把Java对象里持久化成一个有序的字节序列,这里面包括对象的数据及其类型,还有对象本身的类型信息。

Published: 05 Mar 2014

Java8特性尝鲜之集合排序

只要提到Java8的lambda表达式,数组或者集合的排序都是一个非常棒的例子,这是因为自从Java1.2以来,只要一提到排序,Comparator这个接口总是挥之不去。有了Java8后,在很多排序中,Comparator都可以使用lambda表达式来替换了。

Published: 03 Mar 2014

JVM的方法内联

在IntelliJ IDEA里面Ctrl+Alt+M用来拆分方法。选中一段代码,敲下这个组合,非常简单。Eclipse也用类似的快捷键。我讨厌长的方法,提起这个下面这个方法我就觉得太长了:

Published: 02 Mar 2014

Java 8里面的java.util.Random

在Java 8里面,java.util.Random经过改进后增加了一个实用的功能,可以返回一个随机数的流。

Published: 01 Mar 2014

一个通用并发对象池的实现

这篇文章里我们主要讨论下如何在Java里实现一个对象池。最近几年,Java虚拟机的性能在各方面都得到了极大的提升,因此对大多数对象而言,已经没有必要通过对象池来提高性能了。根本的原因是,创建一个新的对象的开销已经不像过去那样昂贵了。

Published: 28 Feb 2014

打印日志的10个建议

1,工欲善其事,必先利其器

Published: 27 Feb 2014