Spring和Hibernate使用反射來創建bean(在spring的情況下)和POJO映射(在Hibernate的情況下)。它對性能有負面影響嗎?因爲與直接創建對象相比,反射速度較慢。由於反射,Hibernate和Spring的性能開銷
回答
雖然存在性能損失,但它相對較低,可以忽略不計。這裏的關鍵問題是,使用ORM(反思)所帶來的好處遠遠超過您付出的非常小的性能損失。
請記住,在看性能時,按照自己想要的方式設計系統,並在出現問題時擔心性能。
退房Hibernate Q&A section in FAQ,這幾乎是所有關於實例發出
在 的Hibernate的最新版本,「反思」通過CGLIB運行時字節碼 生成庫優化 。這意味着 「反映」屬性獲取/設置調用 不再承載Java反射API的開銷,實際上只是普通的方法調用 。這導致 (非常)小的性能增益。
是的,它可能是。 Hibernate在各種狡猾的方式中都經過了相當多的優化,但是假設緩存對你沒有幫助,它仍然比低級別的數據訪問慢得多。
但這不是你需要問的問題。
你需要問清楚它是否會影響性能顯着 - 在這一點上,我懷疑你會發現答案是「否」。就Hibernate而言,底層數據庫訪問可能會比由於Hibernate造成的開銷慢。就Spring而言,bean的創建往往只發生在程序的開始階段,一次。
一如既往,如果您有疑慮,基準和配置一個現實的場景。
在任何合理的應用中,反射的開銷很大的可能性是遙遠的。 (總是有不合理的應用:)
爲了比較,通過配置文件運行您的應用程序,並查看JDBC驅動程序使用了多少內存/ cpu。
休眠和彈簧的重要之處在於它們旨在優化您的性能,使您的工作效率更高,代碼更可靠。
UPDATE: 我覺得自己和飛碟雙向先生正試圖讓一點是,在這些框架使用反射的性能損失較小。這與反思是實施這些框架的重要組成部分的事實相結合意味着沒有多少選擇。
你只能找出你是否測量你的特定工作量。
假設檢索+保溼100個實體Spring + Hibernate會增加3毫秒的開銷。
如果你的工作單元通常需要120毫秒,那麼開銷非常小。如果它需要5毫秒,那麼這很嚴重。
- 1. Java反射的缺點 - 性能開銷
- 2. 反射性能和界面
- 3. 反射性能
- 4. 性能開銷
- 5. 性能開銷
- 6. Spring hibernate映射
- 7. GetMethods反射的開銷是什麼
- 8. Hystrix性能開銷
- 9. Web中的反射和性能
- 10. 套接字的性能和開銷
- 11. 由反射映射Id屬性
- 12. 搜索和調用帶反射的方法的開銷
- 13. AOP的性能開銷
- 14. javascript庫的性能開銷
- 15. 關於dotnet中反射的使用和性能
- 16. Hibernate的對象和Java反射
- 17. Hibernate由Spring管理
- 18. 用於Spring/Hibernate開發的Eclipse插件?
- 19. 路由和反射問題
- 20. C#反射性能幫助
- 21. 反射性能涉及
- 22. PHP 5反射API性能
- 23. Dropwizard度量性能開銷
- 24. 線程開銷性能
- 25. 刪除nullptr - 性能開銷?
- 26. Firebreath vs NPAPI性能開銷?
- 27. CPLEX Python API性能開銷?
- 28. Play的Java反射的性能和替代品!框架類似於路由的功能
- 29. 經由反射
- 30. Mulesoft開發人員的Spring和Hibernate
只是爲了記錄,這個FAQ現在已經過時了。 CGLIB不再是Hibernate的默認反射提供者:從Hibernate 3.3開始,CGLIB已被Javassist替代爲默認提供者。 – Cowan 2009-06-10 10:33:05
真的嗎?很高興知道:) – 2009-06-10 16:56:27