我正在使用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. 我应该在我的新Xcode项目中使用autolayout吗?
- 4. 我应该在我的项目中开始使用java7吗?
- 5. 我可以在访问项目中使用持久性(Oracle)记录集吗?
- 6. 我应该在github上保留我的fork项目多久?
- 7. 我应该把我的flex项目放在我的rails项目中吗?
- 8. 我应该在ID登录中持久存储ID令牌吗?
- 9. java项目的文档生成:我应该使用doxygen吗?
- 10. 我应该测试一个ASP MVC项目中的属性吗?
- 11. 我应该使用mysql持久连接吗?
- 12. 一个单元应该在rails中测试持久性吗?
- 13. 我应该为我的大型项目使用MySQL 6.0吗?
- 14. 我应该为我的项目使用MVC模式框架吗?
- 15. 我应该为我的项目使用LINQ to SQL或XML吗?
- 16. 我应该在库调用中使用我自己的typedefs吗?
- 17. JBoss应用服务器7不能部署我的项目,持久性问题
- 18. 我应该在网站项目中使用aspnet_compiler吗?
- 19. 我应该在ServiceController上调用Close()吗?
- 20. 我应该在我的博客项目中使用XHTML/CSS2或HTML5/CSS3吗?
- 21. 如果我在项目中使用jquery,那么我应该保持“firequery”安装?
- 22. 我应该在我的数据访问层中坚持sqlconnection吗?
- 23. 使用Maven使用Spring持久性创建Java项目?
- 24. 我应该在新项目开始时使用TDD吗?
- 25. 我应该在Spring项目中包含系统测试吗?
- 26. 我应该在我的项目中提供LICENSE.txt或COPYING.txt文件吗?
- 27. 我应该将我的Angular文件放在同一个JEE项目中吗?
- 28. 我应该在environment.rb中为我的Rails项目添加常量吗?
- 29. AJAX/Java持久性
- 30. 使用Java持久性
你如何测量内存分配? – biziclop
不,几乎没有理由调用System.gc();它不会解决您将遇到的任何问题。 – Kayaman
@biziclop我使用Windows任务管理器,我可以看到在Java(TM)平台二进制文件下的内存分配 – Thanuj