微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我应该在使用后重置Java堆空间吗?

我正在使用R中的一些建模算法,其中一个Java( bartMachine)中运行.我发现在运行建模算法之前,我需要根据数据的大小增加java的最大堆空间.

我这样做是这样的:

options(java.parameters =“ – Xmx16g”)

我的问题是,如果没有其他算法将使用java(或至少那么多堆空间),我是否需要重置堆空间?或者根据需要回收分配给java的内存而不会丢失性能

我已经搜索了一些关于这个主题内容,我了解如何更改/降低堆空间.我也明白R / Java会做垃圾收集来从内存中删除旧对象以释放更多空间.

我不明白的是,更改堆空间会如何影响其他程序可用的内存,以及在这种情况下是否有必要甚至是一个好主意来改变使用后的堆大小.

我已经看过的一些答案/资源:

Is there a way to lower Java heap when not in use?

Java garbage collector – When does it collect?

http://www.bramschoenmakers.nl/en/node/726

https://cran.r-project.org/web/packages/bartMachine/bartMachine.pdf

解决方法

它的实现是定义的,取决于由很多参数影响的实现. The garbage collector can affect it.在使用Oracles JVM 1.7的Mac上,认为并行收集器-XX:UseParallelGC,此收集器不会将内存释放回操作系统.我在Mac上尝试了它并没有释放任何东西,除了使用-XX:UseG1GC.您可以使用以下内容查看认版本:
java -XX:+PrintGCDetails -XX:+PrintCommandLineFlags -version

如果您使用支持它的JVM和正确的垃圾收集器,可以使用一些参数来调整内存的释放方式,即

-XX:MinHeapFreeRatio (default is 40)
-XX:MaxHeapFreeRatio (default is 70)

但它们被击中和错过(JVM决定何时释放内存,只释放大量对象可能不会触发它).

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐