我还在学习Java的绳索,如果对此有明显的答案,那就很抱歉.我有一个占用大量内存的程序,我想找到一种方法来减少它的使用,但在阅读了很多SO问题后,我认为我需要在开始优化之前证明问题出在哪里.
所以这就是我所做的,我在程序开始时添加了一个断点并运行它,然后我启动了visualVM并让它描述了内存(我也在netbeans中做同样的事情只是为了比较结果而且它们是相同的).我的问题是我不知道如何阅读它们,我得到的最高区域只是说char[]
,我看不到任何代码或任何东西(这是有道理的,因为visualvm连接到jvm并且看不到我的来源,但是netbeans也没有向我显示源代码,因为它在执行cpu profiling时也是如此.
基本上我想知道的是哪个变量(希望更多的细节,比如在哪种方法中)所有的内存都在使用,所以我可以专注于在那里工作.有一个简单的方法来做到这一点?我现在正在使用eclipse和java进行开发(并且专门为分析安装了visualVM和netbeans,但是我愿意安装其他任何你认为完成这项工作的东西).
编辑:理想情况下,我正在寻找将我的所有对象和大小排序的东西(所以我可以看到哪一个占用内存).目前它返回诸如string []或int []之类的通用信息,但我想知道它所指的是哪个对象,所以我可以努力使其大小更加优化.
我正在尝试将安装了jdk1.7.0_04的jvisualvm连接到本地运行的java进程.当我这样做时,jvisualvm在左下角显示一个进度条,表示它与进程的连接,然后再也没有响应.
我正在尝试连接的java进程仍然正常并且正常工作.
我可以使用jstack获取visualvm的threaddump,它显示1个被阻塞的线程.
AWT-EventQueue-0" prio=6 tid=0x04a1a000 nid=0x1110 waiting for monitor entry [0x062af000]
java.lang.Thread.State: BLOCKED (on object monitor)
at com.sun.tools.visualvm.core.model.ModelFactory.getModel(ModelFactory.java:76)
- waiting to lock <0x289584f0> (a com.sun.tools.visualvm.jvmstat.application.JvmstatApplication)
at com.sun.tools.visualvm.core.datasource.descriptor.DataSourceDescriptorFactory.getDescriptor(DataSourceDescriptorFactory.java:49)
Run Code Online (Sandbox Code Playgroud)
我无法连接到任何java进程,即使只是等待用户输入的微不足道的进程.我也遇到了与jdk1.6.0_32相同的问题.
- 更新我发现这只影响我从eclipse启动的java进程.可以从调试透视图启动命令eclipse并打开进程属性.从命令提示符启动相同的进程(使用我从eclipse复制的命令)允许从jvisualvm和jconsole连接.
完整的线程转储:
2012-05-10 13:18:47
Full thread dump Java HotSpot(TM) Client VM (23.0-b21 mixed mode, sharing):
"Inactive RequestProcessor thread [Was:TimedSoftReference/org.openide.util.TimedSoftReference]" daemon prio=2 tid=0x00e12800 nid=0xa5c in Object.wait() [0x0587f000]
java.lang.Thread.State: TIMED_WAITING (on object monitor)
at java.lang.Object.wait(Native Method)
- waiting on <0x22d6a578> (a java.lang.Object)
at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:1880)
- locked <0x22d6a578> (a java.lang.Object)
Locked ownable synchronizers: …
Run Code Online (Sandbox Code Playgroud) 我最近重新安装了Windows,我使用的是内置VisualVM的JDK 1.8 u91.我已经检查了我的代理设置,以确保它们都在Windows代理设置和VisualVM的代理设置中全部关闭.
我也尝试重新安装JDK,重新启动计算机,重新安装Windows.我只安装了一个JDK,并且类路径设置为Windows中的JDK bin文件夹.
除了CPU和内存分析之外的所有功能都在VisualVM中工作.我的应用程序是从IntelliJ运行的,但我也尝试从命令行定期运行应用程序,VisualVM也无法连接到那些应用程序.
我也试过从http://visualvm.java.net下载VisualVM,这也不起作用.
我没有安装插件.
它为什么挂?这是新JDK引入的错误吗?
在Java分析中,现在所有(免费)道路似乎都会导致JDK6中包含的VisualVM分析器.它看起来像一个很好的程序,每个人都吹嘘如何"将它附加到正在运行的进程"作为一个主要功能.问题是,这似乎是在本地进程上使用它的唯一方法.我希望能够在分析器中启动我的程序,并跟踪其整个执行过程.
我尝试使用如何使用visualvm配置应用程序启动时-Xrunjdwp
所描述的选项,但在两种传输方法(共享内存和服务器)之间,对我来说都没有用.VisualVM似乎没有与前者集成,VisualVM拒绝连接或者,因此后者也不好.我还尝试在我的程序中插入一个简单的读取来插入暂停执行,但在这种情况下,VisualVM会阻塞直到读取完成,并且不允许您在执行完成之前开始分析. 我也尝试过查看Eclipse插件,但网站上充满了死链接,当我尝试使用它时,启动器崩溃了(这可能不再准确).localhost
127.0.0.1
System.in
NullPointerException
来自C,这对我来说似乎不是一项特别困难的任务.我只是遗漏了什么或者这真的是一个不可能的要求吗?我愿意接受各种建议,包括使用不同的(也是免费的)探查器,我不反对命令行.
我创建了一个简单的1文件java应用程序,它循环遍历循环,调用一些函数,分配一些内存,添加一些数字等.我通过eclipse运行该应用程序Run As->Java Application
.
正在运行的应用程序出现在Java VisualVM下Local
.
我双击该应用程序并转到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标志?
通常我会在VisualVM中看到本地运行Java程序的所有这些选项卡:
但是,我有一个本地程序,目前只向我显示概述和监视器(即使它通常显示上面显示的所有内容):
同样有趣的是VisualVM本身不提供Profile选项卡:
显示的所有三个程序都使用具有相同Java Home的相同JVM运行.
什么控制为特定程序显示哪些选项卡?如何只显示概述和监视器,我怎样才能将它们全部取回?
我有Visual VM 1.3.5(在此日期最新)和JDK 1.7.0_17.
我有一个配置了JMXRemote参数的tomcat实例.本地VisualVM能够在CPU上获取采样器,但不能用于内存.内存按钮显示为灰色,显示:"内存采样:不可用.无法连接到目标应用程序.请确保应用程序在受支持的JDK 6或JDK 7上运行"
JMXRemote参数:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9086
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
Run Code Online (Sandbox Code Playgroud)
Tomcat JDK版本:
JDK1.6.0.30
Run Code Online (Sandbox Code Playgroud)
VisualVM版本:
Version: 1.6.0_30 (Build 1320-110325); platform 110131-9c8b3bfb3a1e
System: Windows Server 2008 R2 (6.1) , amd64 64bit
Java: 1.6.0_30; Java HotSpot(TM) 64-Bit Server VM (20.5-b03, mixed mode)
Vendor: Sun Microsystems Inc., http://java.sun.com/
Environment: Cp1252; en_US (visualvm)
Userdir: C:\Users\Administrator\AppData\Roaming\.visualvm\7
Clusters: C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\platform
C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\visualvm
C:\Program Files\Java\jdk1.6.0_30\lib\visualvm\profiler
Run Code Online (Sandbox Code Playgroud)
Tomcat版本:
Tomcat 6.0.32
Run Code Online (Sandbox Code Playgroud)
我在win server 2008上运行VisualVM和Tomcat.我做错了什么?
我想让visualvm和websphere 7在我的本地Windows桌面上一起工作.我尝试通过JMX连接,但没有运气.有没有人设法让visialvm和websphere 7工作,你做了吗?
关心FF
是否有任何工具允许.hprof文件的离线分析(包括摘要/排序/筛选)?或者你可以在批处理模式下运行VisualVM,hat等吗?
我对可以输入.hprof文件,处理它并生成报告的内容感兴趣.
我假设您需要传递一系列选项来配置报告,所以如果您知道任何有用的提示,请称重.
最好是可编写脚本的,这样我就可以一次运行一堆.
VisualVM对我来说是一个不错但有点复杂的工具.
我写了一个包含许多函数的类(在Eclipse中).如何获取每个函数调用的时间以及执行期间的成本时间信息?