Tag:

JVM是否在不再需要时向操作系统提供可用内存?

我有一个应用程序暂时需要一些特定的内存/堆用于某些进程。 给定JVM作为选项的最大堆大小的合理值,JVM从一个小堆开始,并根据需要从OS请求更多内存。 我的问题是,如果我的应用程序不再需要大量内存,那么JVM会向操作系统返回额外的内存(例如,用于其他进程)。 目前我的应用程序似乎永远保留了内存,即使不再需要它。

如何从Java程序中获取JVM的最小和最大堆大小设置

如何从Java程序中获取VM的最小和最大堆大小设置?

使用二叉树实现堆

之前在Stack Exchange中已经提出过这个问题,但没有得到答复。 链接到前面提到的问题: 二进制堆通过二叉树结构实现 如何在二叉树中实现堆。 要实现堆,了解最后一个填充节点和第一个未占用节点非常重要。 这可以在树的级别排序中完成,但是时间复杂度将是O(n)以便找到第一个未占用的节点。 那么,如何在O(logn)中的二叉树中实现堆? 谢谢Shekhar

如果JVM在执行GC时继续移动对象,它如何解析引用?

我正在阅读JVM调优,我发现JVM在执行GC时会不断移动对象。 但Java对象之间有相互引用,人们认为它们是作为指针实现的,但每次移动对象后JVM都不可能遍历整个堆,并更新所有引用; 肯定会永远。 那么它如何解析引用,如果引用没有改变,但对象的物理位置呢? 我已经阅读了很多关于JVM的内容,但在任何地方都没有解释,甚至暗示过。 [编辑]我的观点是,引用是单向的。 从指针指向指向是“瞬时”,但反过来需要完整的堆扫描。 虽然有可能,但似乎不太可能。 如果10K对象在次要集合中存活,那么执行完整堆扫描需要多长时间才能更新对这些对象的引用10K次? 必须使用某种优化的算法或结构。

为什么Java使用堆进行内存分配?

我刚刚在一本java书中读到这句话,说java中的Objects驻留在堆上。 是否使用了堆,因为它是快速存储数据和检索数据的最佳方式? 我只是想知道数据结构是初学者。 我的意思是为什么不堆叠或其他东西?

JVM进程与JVM堆内存使用情况

我已经阅读了这个Process Memory Vs Heap – JVM ,我遇到了同样的问题。 jvm进程内存使用量不断增加,从不收缩。我通过在linux服务器上做一个top来检查。 应用程序正在将作业调度到集群(使用Quartz + Sun Java DRMAA API) Java堆空间在应用程序生命周期中保持在限制范围内,但是jvm进程显示内存使用量稳步攀升并且永远不会下降。 这是内存泄漏吗? 如果是这样,为什么堆空间在限制范围内。 有人可以解释一下。 更新:当我通过jconsole跟踪时,我有-Xmx1600m -Xms1600m我可以看到堆空间在这个限制范围内,距离为450m,但是top命令显示该进程使用了​​超过900m。

使用JVisualVM从Java中的远程应用程序获取堆转储

我运行JVisualVM(Windows XP,Sun Java 1.6.0.13,32位客户端VM)来监视远程应用程序(Linux,Sun Java 1.6.0.07,64位服务器VM)。 在启动实际的远程应用程序之前,我使用all访问策略在远程计算机jstatd上启动: grant codebase “file:${java.home}/../lib/tools.jar” { permission java.security.AllPermission; }; 然后我使用命令行启动实际的应用程序 java -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=3333 compileTest.Main 从客户端计算机,我可以看到远程应用程序并监视它。 我也可以进行线程转储等。遗憾的是,堆转储按钮显示为灰色。 如何使用JVisualVM从远程监控的应用程序获取堆转储? 我尝试使用jConsole。 使用jConsole,可以使用com.sun.management.HotSpotDiagnostic dumpHeap操作进行远程堆转储。 我希望将转储传输到客户端并使用JVisualVM提供的工具进行分析。 我怎样才能做到这一点?

64位Java的最大内存

在64位平台上,可以为Java分配的最大堆空间量是多少? 它是无限的吗?

如何以编程方式增加Java堆大小

我有一个用于搜索文件的java桌面应用程序,它通常很快就会达到默认的堆限制。 我无法访问将要安装的所有系统,因此我想在应用程序本身中增加JVM堆大小。 任何人都可以帮助我如何在我的应用程序中以编程方式执行此操作

java.lang.OutOfMemoryError:使用NetBeans的Java堆空间

这是我在NetBeans启动的Tomcat servlet容器实例中运行Web应用程序时遇到的错误。 为了解决这个问题,我甚至改变了netbeans.conf中的堆大小,但它仍然显示相同的错误。 我该如何防止这种情况发生? HTTP状态500 – ————————————————– —————————— 类型exception报告 信息 description服务器遇到内部错误(),导致无法完成此请求。 例外 javax.servlet.ServletException:Servlet执行引发exception org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:362) 根本原因 java.lang.OutOfMemoryError:Java堆空间 note备注根本原因的完整堆栈跟踪在Apache Tomcat /5.5.9日志中。