JDBC不但快,而且占用内存少,峰值内存75MB,Hibernate List其次,峰值内存占用140MB,Iterator方式下,观察到内存以每秒几十K的速度增加,估计不增加到140MB,是不会完成测试过程的,由于不耐烦等待,终止测试。
、JDBC仍然是最快的访问方式,不论是Create还是Read操作,都是JDBC快。
2、Hibernate使用uuid.hex构造主键,性能稍微有点损失,但是不大。
3、Create操作,JDBC在使用批处理的方式下速度比Hibernate快,使用批处理方式耗用JVM内存比不使用批处理方式要多得多。
4、读取数据,Hibernate的Iterator速度非常缓慢,因为他是每次next的时候才去数据库取数据,这一点从观察任务管理器的java进程占用内存的变化也可以看得很清楚,内存是几十K几十K的增加。
5、读取数据,Hibernate的List速度很快,因为他是一次性把数据取完,这一点从观察任务管理器的java进程占用内存的变化也可以看得很清楚,内存几乎是10M的10M的增加。
6、JDBC读取数据的方式和Hibernate的List方式是一样的(这跟JDBC驱动有很大关系,不同的JDBC驱动,结果会很不一样),这从观察java进程内存变化可以判断出来,由于JDBC不需要像Hibernate那样构造一堆Cat对象实例,所以占用JVM内存要比Hibernate的List方式大概少一半左右。
7、Hibernate的Iterator方式并非一无是处,它适合于从大的结果集中选取少量的数据,即不需要占用很多内存,又可以迅速得到结果。另外Iterator适合于使用JCS缓冲。
上述的测试结果和结论不具备普遍适用性,仅供参考,并且也不能作为任何软件性能好坏的依据。实际上我认为影响测试结果最大的因素是JDBC驱动的选取,不同的JDBC驱动的实现会带来非常不同的结果。
Hibernate Iterator应该是标准的JDBC Result的封装,速度应该不会和JDBC有如此巨大的差距,应该就像上面楼主的测试结果一样,大概是1半的速度,这样比较正常。