Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让Eclipse中运行的Java程序显示在VisualVM中_Java_Jvisualvm - Fatal编程技术网

让Eclipse中运行的Java程序显示在VisualVM中

让Eclipse中运行的Java程序显示在VisualVM中,java,jvisualvm,Java,Jvisualvm,我试图在Windows 7 64位上与Eclipse Kepler一起使用Java VisualVM,遇到以下问题: 我有一个Java应用程序在Eclipse中运行,但是当我打开jVisualVM时,在本地下的应用程序中显示的唯一项目是VisualVM本身 我的Java应用程序也可以显示吗?我是否需要使用一些命令行参数启动它以允许VisualVM连接?我需要在Eclipse之外运行它吗?由于Windows JVM的设计特点,您需要在与要连接到的程序(以及同一用户)相同类型的JVM中运行JVisu

我试图在Windows 7 64位上与Eclipse Kepler一起使用Java VisualVM,遇到以下问题:

我有一个Java应用程序在Eclipse中运行,但是当我打开jVisualVM时,在本地下的应用程序中显示的唯一项目是VisualVM本身


我的Java应用程序也可以显示吗?我是否需要使用一些命令行参数启动它以允许VisualVM连接?我需要在Eclipse之外运行它吗?

由于Windows JVM的设计特点,您需要在与要连接到的程序(以及同一用户)相同类型的JVM中运行JVisualVM

这意味着,使用32位或64位,而不是每一位

确保这一点的一种简单方法是,将JDK安装目录中的JVM添加到Eclipse已知的JVM(在首选项中)中,其中包含要使用的jvisualvm可执行文件,然后将项目使用的JVM更改为刚才添加的JDK中的JVM。现在,您的应用程序应该在启动时显示在VisualVM窗口中。

您是否尝试过使用?这将自动为您启动visual VM

唯一的变化是在eclipse中运行主类时,将配置更改为使用VisualVM启动器,如下所示


另一种可能的解决方案,以防对其他人有所帮助:重新启动Eclipse

这是我第一次在一台新电脑上试用JVisualVM。Eclipse出现在JVisualVM中,只是没有它启动的任何子进程

我正在拼命尝试其他的东西(防火墙,不同的JDK…),然后这个愚蠢的重启就解决了它


无论如何,如果一切顺利,规则似乎是:

  • JVisualVM可以使用任何JDK/JRE版本和相同的“位特性”来连接和监视应用程序
  • 对于完整的功能(如评测),JVisualVM应该在与应用程序相同或更高版本的JDK上运行
随机提示(当我们讨论咬合度时):

  • 令人费解的是,浏览内存转储的速度是64位的亿万倍。(遗憾的是,我仍然喜欢32位的
    -client
    模式,以使GUI应用程序获得最低的内存使用率。因此我也想以这种方式对它们进行分析,但不幸的是,它的速度太慢了。)

刚刚发现另一个非常模糊的东西,它可以阻止您的应用程序在Windows下的JVisualVM中显示:

JVisualVM使用系统的临时文件夹(由环境变量
TMP
指定)与正在运行的应用程序通信。出于安全原因,如果此文件夹不位于NTFS分区上,Windows可以在该分区上提供严格的文件访问控制,则会禁用调试,并且应用程序不会显示在JVisualVM中

如果重新格式化该分区或移动整个临时文件夹不是您想要或可以做的事情,您只需在其他地方的NTFS分区上为JVisualVM创建一个辅助临时文件夹,然后在Eclipse中设置启动配置,将环境变量
TMP
设置到该文件夹。然后,只需使用以下批处理文件来运行JVisualVM,一切都应该正常工作:

@Echo off
set TMP=F:\temp
start "JVisualVM" /b "C:\Program Files\Java\jdk1.7.0_76\bin\jvisualvm"

在这里,您需要将
F:\temp
替换为新temp文件夹的位置,就像在启动配置中指定的那样,并将
C:\Program Files\Java\jdk1.7.0\u 76
替换为您的JDK安装目录。

我如何检查运行的JVM的“类型”?我已经选择了“jre7”作为程序的执行环境,并且正在从jdk1.7.0_11目录启动jvisualvm.exe…将jdk1.7.0_11目录添加到JVM的Eclipse knows(首选项)中,并使用它启动程序。明白了!我需要添加jdk,选择它作为默认值,然后重新启动Eclipse。然后它成功了。如果你想扩大你的答案,我愿意接受也可以从一位visualvm开发人员那里看到这个答案:这很有效,是的。。。我只是很惊讶没有插件它就不能工作。我不得不在运行配置中选择一个不同的启动器,这有点烦人……是的,这很烦人。我认为eclipse记得您对该主类的配置。因此,如果您想稍后在不使用visualVM的情况下重新运行主方法,您必须返回并将配置再次更改为JDT。Thorbjørn了解了在没有插件的情况下如何工作。现在我可以像往常一样在Eclipse中工作,如果我需要评测一些东西,我可以完全独立于Eclipse运行jVisualVM,Eclipse中运行的所有应用程序都会显示出来,我可以根据需要评测它们。。。我会接受他的回答,因为对我来说这是更“优雅”的解决方案。但为了完整起见,在这里有你的也很好。有些人可能实际上也更喜欢使用插件。。。绝对是一个巨大的感谢和+1也为你!