我正在使用Java持久性API來開發獨立軟件。最近我看到,當我從實體類以及JPAController類創建對象時,內存使用量不斷增加。由於分配給項目的內存不會減少(例如:400mb --->創建對象---> 450mb --->停留在450mb),所以對象似乎停留在內存中。這會對性能造成嚴重影響嗎?我應該調用System.gc()方法來刪除這些對象嗎?我應該在我的java持久性項目中調用System.gc()嗎?
2
A
回答
5
4
在我看來,解決問題的方法應該是不同的。實際上對System.gc()的調用並不能保證它完全釋放任何內存;請參閱When does System.gc() do anything
如果您可以通過jconsole測量內存分配中的問題,或者對jvm轉儲進行事後分析或其他任何操作,那麼這是另一個問題。通過收集這些信息,您將知道內存區域中的哪些地方仍然存在,然後採取行動來控制它。
1
這會對程序整個生命週期的性能造成負面影響的唯一方法是,如果您希望永久保留這些實體,但堆中舊一代的大小小於您指定的450MB。假設你想保持你永久指定的450MB的1到2倍,並且默認的JVM比率,設置一個參數(例如-Xmx2g)可能會很好。除此之外,還有更多的參數可以更好地調整您的性能,但這可能是您現在要查找的所有複雜性。如果您想查看堆調整的更多細節並真正進入性能,請參閱Garbage Collection Tuning by Oracle上的此文檔。另外,吃午餐的東西是一個偉大的Youtube video on GC tuning by a guy named Gil Tene。
但是調用System.gc()可能不會做任何有用的事情。
相關問題
- 1. 持久性與非持久性 - 我應該使用哪一種?
- 2. 我應該嘗試在Java項目中重用Ruby代碼嗎?
- 3. 我應該在我的Bootstrap項目中使用normalize.css嗎?
- 4. 我應該在我的新Xcode項目中使用autolayout嗎?
- 5. 我應該在我的項目中開始使用java7嗎?
- 6. 我應該在我的項目中使用JQueryUI嗎?
- 7. 我應該把我的flex項目放在我的rails項目中嗎?
- 8. 我可以在訪問項目中使用持久性(Oracle)記錄集嗎?
- 9. 我應該在github上保留我的fork項目多久?
- 10. 我應該在ID登錄中持久存儲ID令牌嗎?
- 11. 如何使我的應用持久性
- 12. java項目的文檔生成:我應該使用doxygen嗎?
- 13. 我應該測試一個ASP MVC項目中的屬性嗎?
- 14. 我應該使用mysql持久連接嗎?
- 15. 我多久應該在C++應用程序中調用srand()?
- 16. 一個單元應該在rails中測試持久性嗎?
- 17. 我應該爲我的項目使用MVC模式框架嗎?
- 18. 我應該爲我的大型項目使用MySQL 6.0嗎?
- 19. 我應該爲我的項目使用LINQ to SQL或XML嗎?
- 20. 我應該在庫調用中使用我自己的typedefs嗎?
- 21. 在Android中,不應該使用System.gc()?
- 22. 沒有我的GWT項目EntityManager的持久性提供者
- 23. 我應該在WebApi項目中使用Bootstrapper類嗎?
- 24. 我應該在網站項目中使用aspnet_compiler嗎?
- 25. JBoss應用服務器7不能部署我的項目,持久性問題
- 26. 我應該取消訂閱非持久JMS Topic訂戶嗎?
- 27. 我應該在ServiceController上調用Close()嗎?
- 28. 我應該在我的博客項目中使用XHTML/CSS2或HTML5/CSS3嗎?
- 29. 我應該在我的php項目中使用依賴注入嗎?
- 30. 什麼時候我們應該在Python項目中調用logging.basicConfig?
你如何測量內存分配? – biziclop
不,幾乎沒有理由調用System.gc();它不會解決您將遇到的任何問題。 – Kayaman
@biziclop我使用Windows任務管理器,我可以看到在Java(TM)平臺二進制文件下的內存分配 – Thanuj