我应该在使用后重置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决定何时释放内存,只释放大量对象可能不会触发它).

相关文章

HashMap是Java中最常用的集合类框架,也是Java语言中非常典型...
在EffectiveJava中的第 36条中建议 用 EnumSet 替代位字段,...
介绍 注解是JDK1.5版本开始引入的一个特性,用于对代码进行说...
介绍 LinkedList同时实现了List接口和Deque接口,也就是说它...
介绍 TreeSet和TreeMap在Java里有着相同的实现,前者仅仅是对...
HashMap为什么线程不安全 put的不安全 由于多线程对HashMap进...