用hibernate的性能:插入很快,可查询为什么非常慢

来源:互联网 发布:入骨相思知不知瓶邪 编辑:程序博客网 时间:2024/04/29 00:14
光是测时间是远远不够的,像JVM的CPU占用率,JVM的内存堆栈都需要测量,进行综合评定,我没有什么测试工具,不过我知道那些大公司内部有自己开发的专用测试软件。其实这样的专业性能测试,不要说测试软件本身了,就是测试结果的评测报告都是需要花很多银子购买的。像Java程序这种不是直接在OS平台上运行,涉及到JVM本身的很多性能调节的测试,非专业公司是不能够做的。自己随便写几个程序,跑一下,比较一下运行时间长短就去议论软件的性能是非常有害处的。JDBC,Hibernate和CMP的性能问题其实不需要测试,如果你能够足够了解它们的运行的原理和细节,性能是昭然若揭的,何必还做什么测试呢?只有性能接近,运行原理一样的软件才需要进行性能测试。JDBC如果精心编写,程序员本身是JDBC高手,那么性能一定是最好的,任何ORM都比不上,就像汇编高手用汇编写的程序一定比任何高级语言性能都好的道理一样;Hibernate是JDBC的轻量级封装,准确来说是PreparedStatement的封装,性能有稍微的损失,但是由于大多数程序员用JDBC的水平达不到那么高,就像上面的测试程序中之所以create的测试JDBC要慢一倍的原因就在于程序员不知道应该用Batch,所以写出来的JDBC程序比不上HibernateCMP其实就不用多说了,客户端的一次业务方法调用要经过多次RMI调用,好几层代理才能达到Bean里面我们编写的业务代码,再加上繁重的容器方法调用,性能不在一个数量级上。