怎样让你的代码更好的被JVM JIT Inlining

JVM JIT编译器优化技术有近100中,其中最最重要的方式就是内联(inlining)。方法内联可以省掉方法栈帧的创建,同时增加了CPU指令cache的命中率,方法内联还使让JIT编译器更多更深入的优化变成可能。本人在fastxml(速度比XPP3(基于xmlpull)还快的xml解析器)开源项目中针对方法内联进行了很多学习和实践,这里总结一下,介绍一下怎么让你的代码更好的被JVM JIT In[......]

全文阅读

Java JIT性能调优

JVM自动监控这所有方法的执行,如果某个方法是热点方法,JVM就计划把该方法的字节码代码编译成本地机器代码,同时还会在后续的执行过程中进行可能的更深层次的优化,编译成机器代码的过程是在独立线程中执行的,不会影响程序的执行;除次以外,JVM还对热点方法和很小的方法内联到调用方的方法中,减少方法栈的创建。这些就是JIT(just in time)。

JIT编译器有近100种优化方式

[captio[......]

全文阅读

sun.misc.Unsafe

Java是个安全的编程语言,它可以防止程序员犯一些低级错误,往往这些错误都是基于内存管理的。但是在Java中仍然有办法故意的犯这些错误——使用Unsafe类。 这篇文章将快速的阐述sun.misc.Unsafe类的public API和少许有意思的用法。

Unsafe类的初始化

在使用前,我们都需要创建一个Unsafe类的实例对象,但不能通过Unsafe unsafe = new Unsafe[......]

全文阅读

java中坑爹的getter、setter方法的潜规则

众所周知的java中都会给类的属性写getter和setter方法,以getter方法为例,通常是get+属性的大写首字母+属性剩下的字符组成。比如:有个属性名为name,那么其getter方法名就是getName,如果name是boolean类型,那么getter方法就是isName,当然现在的getter和setter方法都不会自己手写了,一般是通过eclipse或者Intellij idea[......]

全文阅读

【译】怎样开发一个高度可定制的产品

你可曾听过:“我真的很喜欢你的产品,除了一些小的细节点”?然后CIO(首席信息官)推出一个必须有的需求清单,这清单中的数百个需求点需要添加到你的了不起的产品中。你可曾听过或者甚至说过:“同志们,我们将签署一个高利润的合同,但是。。。”?然后客户期望的额外的功能变成了开发工程师的头痛点。

所以,尽管现在你的产品能满足顾客的需求,但怎样才能让你的产品远离顾客潜在的有风险的想法?怎样才能在已有无数[......]

全文阅读

【译】使用 Lombok 减少你的样板代码

Lomok是一个用来简化java代码开发的java库。这篇文章主要解决getters/setters、重写equals、hashCode、toString以及构造函数的编写问题。如果用普通的java编写方式,一定很繁琐。当你看到Lombok项目时,它会让你觉得一身轻松。

使用 Lombok 减少你的样板代码

1. 不用再写getters\setters方法了

比如下面的pojo类,用普通[......]

全文阅读

一点数据库访问优化的思考

最近碰到了老是数据库连接池爆满的情况,于是调研了下应用中的代码存在哪些问题,哪些地方可以优化,于是又了下面的一点思路,欢迎抛砖。

核心思路是:减少单页面请求数据库的sql数量,缩短单url请求数据库的时间。

平时开发时养成性能优化的思维模式能大大减少后期性能优化的成本,因为开发过程中,很多业务和实现细节了然于胸,如果此时就考虑性能优化,就能始终保持最大化整个应用的性能(当然前提是,如果[......]

全文阅读

fastjson解析大文件时抛出java.lang.ArrayIndexOutOfBoundsException: -1

最近发现偶尔出现fastjson解析大文件时抛出java.lang.ArrayIndexOutOfBoundsException: -1异常。可以我是按照官方的中的实例代码来写的,如下的代码:

所以非常不解,我自己单独写代码解析json文件又没有问题,在应用跑了一段时间后,就突然出现这个问题。由于fastjson的代码没有深入阅[......]

全文阅读

【译】编写自定义的Velocity指令

本文将使用Apache Velocity API来编写自己的行内指令和块指令。以实现truncate()为例,即实现一个velocity的展示工具方法,用来对长字符串做截断。

在velocity中有两种指令:行内指令和块指令。行内指令在模板中仅有一行vm代码,而块指令有一段代码块同时以#end标签结尾。如下面所示的,第一个为行内指令,第二个为块指令:
[crayon-59e9b507ca4[......]

全文阅读