问题 我正在用java编写一个数据处理应用程序,用于我的raspberry-pi。我正在使用postgresql,hibernate和tomcat。我的应用程序是为最小的内存使用而设计的(由于raspberry-pi的限制),但java声称所有内存。如何指示JVM仅使用所需的内存。
算法 为了获取每个数据项,我采取以下步骤: - 从表中检索对象(引用对象) - 对于表中的每个对象: - 检索对象 - 如果test有效,则与参考进行比较,在第二个表中存储新对象 - 销毁对象
默认情况下,JVM不会释放内存,而是逐步声明越来越多的内存。
问题 我可以使用哪些JVM选项?我可以使用哪些编程策略?
答案 0 :(得分:2)
您可以使用-Xmx控制堆大小作为JVM选项。进一步我猜想postgresql和hibernate是内存猪。您可以尝试使用derby和empired-db或普通的旧JDBC,具体取决于应用程序的复杂程度。我自己有一个运行在覆盆子pi上的tomcat 7来数字化一些传感器数据并提供图表。使用ps它声称只有50 MB的RSS。
USER PID VSZ RSS ST %CPU %MEM TIME CMD
pi 19633 257988 50040 Sl 0.2 10.0 00:29:32 java -cp WEB-INF/classes:libs/tomcat-embed-core-7.0.37.jar:libs/tomcat-embed-logging-juli-7.0.37.jar:libs/raytion-commons-web.jar:libs/commons-exec-1.1.jar:libs/commons-cli-1.2.jar:libs/commons-lang-3.0.jar:libs/tomcat-embed-logging-log4j-7.0.37.jar:libs/log4j-1.2.16.jar:libs/joda-time-2.3.jar:libs/tomcat-embed-jasper-7.0.37.jar: -Ddatadir=../Heizungsdaten server.WebServer
答案 1 :(得分:1)
请配置带有最大内存的标志-Xmx,你想要允许jvm。
例如:
java -Xmx256m ...
只允许256兆的内存
如果您使用服务器,如tomcat,jboss,在特定配置文件上定义-Xmx
答案 2 :(得分:0)
“Java VisualVM可以允许开发人员生成和分析堆转储,跟踪内存泄漏,执行和监视垃圾收集,以及执行轻量级内存和CPU分析”。那个工具很棒。你试试看。 http://docs.oracle.com/javase/6/docs/technotes/tools/share/jvisualvm.html