Tag: visualvm

如何解读分析结果?

我使用NetBeans和VisualVM运行内存Profiler并收到了结果但是没有线索如何分析其结果,我研究了这篇文章,但它没有教导或提供如何解释结果的线索。 我还发现了这篇关于在Netbeans 4上解释结果的文章,但我正在寻找一篇包含更多细节的文章,或者是一种解释以下结果的方法。

为什么VisualVM Profiler不会配置我的应用程序?

我创建了一个简单的1文件java应用程序,它循环遍历循环,调用一些函数,分配一些内存,添加一些数字等。我通过eclipse的Run As->Java Application运行该应用Run As->Java Application 。 正在运行的应用程序显示在Local Visual Basic下的Java VisualVM中。 我双击该应用程序并转到Profiler选项卡。 默认设置为: Start profiling from classes: my.main.package.** Do not profile classes: java.*, javax.*, sun.*, sunw.*, com.sun.* 我点击CPU 。 CPU和Memory按钮变灰。 什么都没发生。 Status表示profiling inactive 。 当我的应用程序终止时, Status表示application terminated 。 我在这做错了什么? 我需要调整一些设置吗? 启动应用程序时是否需要设置VM标志?

如何在Java VisualVM中查看内存分配堆栈跟踪

本文介绍如何在Java VisualVM中查看内存分配堆栈跟踪: http : //rejeev.blogspot.de/2009/04/analyzing-memory-leak-in-java.html 简而言之,在Java VisualVM选项中定义自定义预设,并选中内存设置选项卡中的“记录分配堆栈跟踪”复选框 。 现在,当我选择自定义预设并启动内存分析时,我仍然无法查看内存分配堆栈跟踪。 没有右键单击项目操作“拍摄快照并显示分配堆栈跟踪” ,如文章中所述,也没有类似的内容。 我正在使用VisualVM 1.7。 如何查看这些分配堆栈跟踪?

如何在Java中记忆配置文件?

我还在学习Java的绳索,如果对此有明显的答案,那就很抱歉。 我有一个占用大量内存的程序,我想找到一种方法来减少它的使用,但在阅读了很多SO问题之后,我认为我需要在开始优化它之前certificate问题出在哪里。 所以这就是我所做的,我在程序开始时添加了一个断点并运行它,然后我启动了visualVM并让它描述了内存(我也在netbeans中做了同样的事情只是为了比较结果而且它们是相同的)。 我的问题是我不知道如何阅读它们,我得到了最高区域只是说char[]我看不到任何代码或任何东西(这是有道理的因为visualvm连接到jvm而无法看到我的来源,但netbeans也没有像我在进行cpu分析时那样向我展示源代码。 基本上我想知道的是哪个变量(并希望更多的细节,比如在哪种方法中)所有的内存都在使用,所以我可以专注于在那里工作。 有一个简单的方法来做到这一点? 我现在正在使用eclipse和java进行开发(并且专门为分析安装了visualVM和netbeans,但我愿意安装其他任何你认为完成这项工作的东西)。 编辑:理想情况下,我正在寻找能够获取所有物体并按尺寸排序的东西(所以我可以看到哪一个占用内存)。 目前它返回诸如string []或int []之类的通用信息,但我想知道它所指的是哪个对象,所以我可以努力使其大小更加优化。

JVM内存使用失控

我有一个Tomcat webapp,它代表客户执行一些漂亮的内存和CPU密集型任务。 这是正常的,是所需的function。 但是,当我运行Tomcat时,内存使用量会随着时间的推移而猛增至4.0GB以上,此时我通常会杀死该进程,因为它会破坏我在开发计算机上运行的所有其他内容: 我以为我无意中用我的代码引入了内存泄漏,但在用VisualVM检查后,我看到了一个不同的故事: VisualVM将堆显示为占用大约一GB的RAM,这就是我将其设置为使用CATALINA_OPTS=”-Xms256m -Xmx1024″ 。 根据VisualVM的说法,为什么我的系统认为这个过程占用了大量的内存,它几乎没有占用任何内容? 经过一番进一步的嗅探,我注意到如果在应用程序中同时运行多个作业,则内存不会被释放。 但是,如果我在将另一个作业提交给ExecutorService服务的BlockingQueue之前等待每个作业完成,那么内存将被有效回收。 我该怎么调试呢? 为什么垃圾收集/内存重用会有所不同?