我一直在开发一个小型Java实用程序,它使用两个框架:Encog和Jetty为网站提供神经网络功能.
代码已经"完成",它完成了它需要做的所有事情,但我在内存使用方面遇到了一些问题.在我的开发机器上运行时,当应用程序处理(训练神经网络)时,内存使用量似乎在大约4MB到13MB之间波动,并且最多使用大约18MB.这是非常好的用法,我认为这是因为我经常调用System.GC().我这样做是因为处理时间对我来说无关紧要,但内存使用情况确实如此.
所以它在我的机器上工作正常,但是一旦我把它放在我们的服务器上(共享内存限制的unix主机)它就开始使用大约19MB并且在做事时增加到数百MB的内存使用量.这些与我在测试中所做的一样.我认为,减少内存使用量的唯一方法是退出应用程序并重新启动它.
我能说的唯一区别是它正在运行的Java虚拟机.我不知道这个,我试图找到它以这种方式行事的原因,但是很多文档都假设你对Java和虚拟机有很好的了解.有人可以帮助我解释为什么会发生这种情况,也许有些事情要试图阻止它.
我已经看过使用GCJ来编译应用程序,但我不知道这是否应该花费大量时间以及它是否真的有用.
谢谢您的帮助!
在Java Hotspot编译器中,初始化Java与之-client相反的是-server什么,以及每个的优缺点/注意事项是什么?
我在Fedora 17上安装了Oracle的Java,我注意到在使用命令时java -version会返回它
java version "1.7.0_05"
Java(TM) SE Runtime Environment (build 1.7.0_05-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.1-b03, mixed mode)
Run Code Online (Sandbox Code Playgroud)
Java似乎默认运行-server选项.帮助文本出现了
-server to select the "server" VM
The default VM is server,
because you are running on a server-class machine.
Run Code Online (Sandbox Code Playgroud)
有没有办法将默认值更改为客户端?
我想每个人都知道-server命令行JVM参数.将Java应用程序作为Server运行时是否有意义?
我读到它做了一些更优化,因此,你的一些Java代码可能表现得像
boolean flag=true;
while(flag) {
if(checkMethod()) {
flag=false;
}
}
Run Code Online (Sandbox Code Playgroud)
[编辑] 此代码在两个方案1中都可以正常工作(相同),不使用-server和2.使用-server,将使用适当的可测试代码再次更新.
它永远不会出现在while循环中..
我们刚开始一个新项目,我们应该开始使用-server进行测试吗?
你在用它吗?
我想知道它是否真的有意义而且非常重要,为什么像tomcat/jetty/geronimo等服务器产品的官方文档/教程从不在代码示例中使用/ show -server标签?
干杯