当前位置: 首页 > 面试题库 >

Eclipse将堆释放回系统

令狐增
2023-03-14
问题内容

我正在将Eclipse 3.6与Linux(64位)上的最新Sun Java
6配合使用,并具有大量的大型项目。在某些特殊情况下(例如,SVN更新),Eclipse需要多达1 GB的堆。但是大多数时候它只需要350
MB。当我启用堆状态面板时,大部分时间都会看到以下信息:

878M中的350M

我使用以下设置启动Eclipse:-Xms128m -Xmx1024m

因此,大多数情况下,大量的MB被浪费掉了,并且当内存使用量在短时间内达到峰值时很少被使用。我一点都不喜欢,我希望Eclipse将内存释放回系统,以便可以将其用于其他html" target="_blank">程序。

当Eclipse需要更多内存而可用内存不足时,Linux不能交换其他正在运行的程序,我可以接受。我听说有一个-
XX:MaxHeapFreeRatio选项。但是我从来没有想过要使用什么值才能起作用。我尝试过的价值没有任何改变。

那么,如何告诉Eclipse(或Java)释放未使用的堆呢?


问题答案:

找到了解决方案。我将Java切换为使用G1垃圾收集器,现在HeapFreeRatio参数按预期工作。因此,我在eclipse.ini中使用以下选项:

-XX:+UnlockExperimentalVMOptions
-XX:+UseG1GC
-XX:MinHeapFreeRatio=5
-XX:MaxHeapFreeRatio=25

现在,当Eclipse消耗了超过1 GB的RAM进行复杂的操作,并在垃圾回收后又切换回300 MB时,实际上已将内存释放回操作系统。



 类似资料:
  • 因此,我知道对堆栈中分配的变量调用会导致无效指针错误。 在ED指针中,在实际指针之前分配8个字节,以保留关于指针大小的信息。因此,我想知道是否在一个结构之前做了一个,然后在该结构上调用free,是否可以释放该结构(当然,这偏离了分配这8个字节是所做的唯一额外的事情的假设)。 我想我的最后一个问题是,堆栈变量分配和堆分配之间是否有真正的区别(就后端对内核的调用而言)。

  • 我是分析Java记忆问题的新手。所以请原谅我这个问题看起来很天真 我在运行应用程序时设置了以下JVM参数: 我正在使用visualVM监控使用情况:以下是我看到的 问题是,即使应用程序没有接收任何要处理的数据,使用的内存也不会下降。当应用程序启动时,使用的空间开始变小(大约1GB),但随着应用程序的运行而增加。然后用过的记忆永远不会消失。我的问题是,为什么即使应用程序中没有发生重大处理,使用的堆内

  • 我们有一个简单的微服务设置,基于Windows服务器上的Spring Boot和Java8。 许多服务的负载很低,因为它们是与各种外部合作伙伴的集成。所以它们很多时候都是空闲的。 问题在于,JVM 仅在触发垃圾回收时才会将内存释放回操作系统。因此,服务可能会开始使用32mb,然后为单个请求提供服务并分配2GB内存。如果该服务上没有其他活动,则不会受到 GC 和服务器上的其他服务的影响。 使用Sys

  • 我有一个Springboot应用程序,Mule作为微服务在docker容器中运行。即使空闲时也需要大约700MB。注意到JVM分配了380 MB的堆,这是使用参数提供的最大堆。虽然分配了最大堆,但微服务在空闲时只使用大约50 MB。问题是如何从JVM释放未使用的内存。 似乎减少MaxHeapFreeRatio我们可以要求JVM在有更多可用内存时收缩。然而没有太大区别,JVM也没有释放内存。但是当我

  • 当垃圾收集器运行并释放内存时,内存会返回操作系统还是作为进程的一部分保留下来。我的强烈印象是,内存实际上从未释放回操作系统,而是作为内存区域/池的一部分保留下来,供同一进程重复使用。 因此,进程的实际内存永远不会减少。提醒我的一篇文章是这样的,Java的运行时是用C/C写的,所以我想同样的事情也适用? 更新< br >我的问题是关于Java的。我提到C/C是因为我假设Java的分配/释放是由JRE

  • 在阅读了一些像这样的答案和JEP-346之后,我意识到G1确实会将内存释放回操作系统。 然而,它是否将内存释放回操作系统,即使当前内存使用可能低于初始堆内存(即在此JEP之前,在我的案例中为JDK11)? 假设我有一个Java11 VM,运行和设置为,在RAM上,但是我只消耗大约。G1会释放足够的内存回操作系统吗? 我在任何地方都没有找到任何文档说明G1仅限于在发布时考虑Xms阈值。 我在生产过程