当前位置: 首页 > 知识库问答 >
问题:

释放Java Heap Sapse[副本]

柴赞
2023-03-14

共有3个答案

叶德运
2023-03-14

仅当应用程序需要额外的内存时,才会触发 GC。gc 是一项代价高昂的任务,vm 将决定何时运行它。如果您怀疑您的程序需要内存,而GC没有释放内存,这是一个问题。如果您可以分享演示此问题的测试用例,我们将努力解决此问题。

苏阳州
2023-03-14

G1GC 与应用程序线程同时执行整堆操作,如全局标记。这可以防止与堆成比例的中断。

通过G1GC是一个新时代的垃圾回收算法,从CMS或旧时代垃圾回收机制的切换只应在以下情况下:

  • 超过50%的Java堆被实时数据占用
  • 对象分配率或升级率差异很大
  • 垃圾收集或压缩暂停时间过长(超过0.5到1秒)

有关G1内部工作的更多详细信息,请访问:http://docs.oracle.com/javase/7/docs/technotes/guides/vm/G1.html

武嘉祥
2023-03-14

我在做与你完全相同的事情时也看到了这种趋势(见此处)。解释很简单:JVM不会将内存返回给操作系统,即使它有很多空闲内存。我不知道为什么会这样的确切细节,但这与从OS>请求内存的成本很高有关(这是非常简单的)。

所以我想简单的答案是-这是正常的。

在这里!我找到了我实际读到的关于这个的地方。

 类似资料:
  • 我使用HttpClient(https://hc.apache.org/httpcomponents-client-4.5.x/index.html)使许多超文本传输协议调用背靠背和并行。运行一段时间后,它会得到这个异常: 我试图关闭所有我能看到的东西,但我一定还是错过了一些东西,因为它仍然有那个错误。 如何正确释放连接以避免此连接泄漏问题? 下面是重现问题的测试用例,在Windows上以Java

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

  • 预备条件: Off-By-One 漏洞(基于栈) VM 配置:Fedora 20(x86) 继续使用已经被释放的堆内存指针叫做释放后使用。这个漏洞会导致任意代码执行。 漏洞代码: 编译命令: $gcc -o vuln vuln.c $sudo chown root vuln $sudo chgrp root vuln $sudo chmod +s vuln 注意:不像上一篇文章,ASLR 在这里是

  • SQLite具有不同级别的锁:、、、、。 我找不到调用SQLite API获取和释放锁定的信息。 据我所知,调用sqlite3\U步骤时获得锁。锁的类型取决于预处理语句的表达式。此外,此命令还可以升级自定义事务内的锁定写入操作。 据我所知,写入锁也是由sqlite3\u步骤释放的-此函数返回SQLITE\u DONE或错误代码。我没有找到任何文档,但该函数应该在执行结束时释放保留的待处理的独占的。

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

  • 问题内容: 我应该在将分配的字符串传递给之后释放它吗? 我有一些类似的代码: 在将字符串传递给之后释放字符串时,出现错误。如果我删除呼叫,该错误消失。我究竟做错了什么? 我看到矛盾的意见。有人说我应该自己释放它,有人说VM释放它,有人说VM不释放它,而您应该用奇怪的巫术魔术来释放它。我很困惑。 问题答案: 参数to 的存储完全由您负责:如果您分配了,则需要它。因此,您发布的代码段是正确的。您正在其