作者归档

Java字节码浅析(三)

英文原文链接译文链接,原文作者:James Bloom,译者:有孚

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

阅读全文

大数据分析:机器学习算法实现的演化

本文翻译自《BIG DATA ANALYTICS BEYOND HADOOP

我将会对机器学习算法的不同的实现范式进行讲解,既有来自文献中的,也有来自开源社区里的。首先,这里列出了目前可用的三代机器学习工具。

阅读全文

Java字节码浅析(二)

英文原文链接译文链接,原文作者:James Bloom,译者:有孚

条件语句

像if-else, switch这样的流程控制的条件语句,是通过用一条指令来进行两个值的比较,然后根据结果跳转到另一条字节码来实现的。

循环语句包括for循环,while循环,它们的实现方式也很类似,但有一点不同,它们通常都会包含一条goto指令,以便字节码实现循环执行。do-while循环不需要goto指令,因为它的条件分支是在字节码的末尾。更多细节请参考循环语句一节。

阅读全文

Java字节码浅析(—)

英文原文链接译文链接,原文作者:James Bloom,译者:有孚

明白Java代码是如何编译成字节码并在JVM上运行的非常重要,这有助于理解程序运行的时候究竟发生了些什么。理解这点不仅能搞清语言特性是如何实现的,并且在做方案讨论的时候能清楚相应的副作用及权衡利弊。

本文介绍了Java代码是如何编译成字节码并在JVM上执行的。想了解JVM的内部结构以及字节码运行时用到的各个内存区域,可以看下我前面的一篇关于JVM内部细节的文章

阅读全文

hashCode()方法的性能优化

原文链接译文链接,原文作者: Robert Nystrom,译者:有孚

本文主要讨论下不同的hashCode()的实现对应用程序的性能影响。

hashCode()方法的一个主要作用就是使得对象能够成为哈希表的key或者散列集的成员。但同时这个对象还得实现equals(Object)方法,它和hashCode()的实现必须是一致的:

  • 如果a.equals(b)那么a.hashCode == b.hashCode()
  • 如果hashCode()在同一个对象上被调用两次,它应该返回的是同一个值,这表明这个对象没有被修改过。

阅读全文

自己动手写GC

原文链接译文链接,原文作者: Robert Nystrom,译者:有孚

当事情多得我喘不过气来的时候,我会出现一种异常的反应,就是找点别的事做,就能摆脱烦恼了。通常我会自己写一些独立的小程序。

有一天早上,我正在写书,工作,还要为Strang Loop准备的分享,这些东西让我感到快崩溃了,突然间我想到,“我要写一个垃圾回收程序”。

是的,我知道这听起来有点疯狂。不过你可以把我这个神经的想法当成是一堂编程语言基础的免费教程。通过百来行普通的C代码,我实现了一个标记删除的收集器,你懂的,它的确能回收内存。

在程序开发领域,垃圾回收就像一片鲨鱼出没的水域,不过在本文中,这只是个儿童池,你可以随意玩耍。(说不定还是会有鲨鱼,不过至少水浅多了不是?)

阅读全文

国外优秀技术网站推荐

最近翻译中收藏的一些网站,主要是Java相关的,排名不分先后。欢迎大家补充。

1. http://blog.adam-bien.com/
Adam Bien的个人博客,主要是Java&Java EE相关。

2. http://techblog.bozho.net/
Java, Android,WEB相关

3. http://www.captaindebug.com/
Java, Spring, Weblogic, Oracle, MySQL等。 阅读全文

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

原文链接译文链接,原文作者: Peter Verhas,译者:有孚,本文最早发表于deepinmind

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

immutator的一些用户遇到过这样的问题。他们发现,使用immutator(这个项目探索了Java的一些不为人知的细节)生成的Java代码使用volatile了作为方法的关键字,而这样的代码没法通过编译。结果就是这根本没法用。 阅读全文

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

原文链接译文链接,原文作者: Sarma Swaranga,本文最早发表于deepinmind,校对:郑旭东

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

阅读全文

return top