visualvm
visualvm copied to clipboard
Cannot find Java 1.8
Describe the bug Application cannot find Java 1.8 or higher. But Java 1.8 and Java 10 are installed on the computer. JAVA_HOME env. variable is set to the right value too.
To Reproduce Steps to reproduce the behavior:
- Uninstall any Oracle JRE / JDK
- Install OpenJDK 1.8 for windows (https://github.com/ojdkbuild/ojdkbuild)
- Install OpenJDK 10 for windows (https://github.com/ojdkbuild/ojdkbuild)
- Set JAVA_HOME to Java 1.8 directory
- Run VisualVM (double click on visualvm.exe)
Expected behavior Application running.
Desktop (please complete the following information):
- OS: Windows 10 x64 (up to date)
- JDK version 1.8.0_181-1-ojdkbuild
Thanks for the report! Please verify that using the "--jdkhome" parameter works for you - see the First Steps section at the bottom of http://visualvm.github.io/download.html.
Using --jdkhome
parameter works ! VisualVM start with success
If you want to select particular JDK permanently, you can add path to JDK to visualvm/etc/visualvm.conf
file.
Why doesn't VisualVM just use the the JAVA_HOME
environment variable to find Java?
Based on the initial report, I downloaded JDK 11 installer for Windows and JDK 8 installer for Windows from https://github.com/ojdkbuild/ojdkbuild . I installed both JDKs on WIndows 10. I downloaded VisualVM 1.4.4, unzipped it and VisualVM started just fine. There was no complain about missing Java 1.8.
The problem appears to have come back, I am using adoptopenjdk 11. even if I use --jdkhome, it still can't find it, even with Visual VM2 on Windows 10.
EDIT: Nevermind, solved problem, by using '/' for system paths instead of '' on Windows, then --jdkhome recognized adoptopenjdk 11, thanks.
Do you mean you had to use visualvm.exe --jdkhome C:/Path/To/<JDK_HOME>
instead of visualvm.exe --jdkhome C:\Path\To\<JDK_HOME>
on Windows? Please provide the full command to start VisualVM on your setup to make it clear for us.
Do you mean you had to use
visualvm.exe --jdkhome C:/Path/To/<JDK_HOME>
instead ofvisualvm.exe --jdkhome C:\Path\To\<JDK_HOME>
on Windows? Please provide the full command to start VisualVM on your setup to make it clear for us.
Yes that.
Tested on a fresh Windows 10 installation, VisualVM 2.0 and AdoptOpenJDK 11.0.6.
Using the Windows installer, default settings, the JDK is installed to C:\Program Files\AdoptOpenJDK\jdk-11.0.6.10-hotspot
, and the Windows registry is NOT updated with the JavaSoft keys.
Running visualvm.exe
both from Explorer and from Command Prompt shows "Cannot find Java 1.8 or higher." dialog. This is expected because the VisualVM launcher searches for the JavaSoft registry keys on Windows, which is missing. JAVA_HOME is not read by the launcher.
Running visualvm.exe --jdkhome C:\Program Files\AdoptOpenJDK\jdk-11.0.6.10-hotspot
shows "Cannot locate java installation in specified jdkhome: C:\Program" dialog. This is expected because there is a space in path (Program Files
).
The correct way to run VisualVM on Windows using the AdoptOpenJDK11 installed with the default settings is visualvm.exe --jdkhome "C:\Program Files\AdoptOpenJDK\jdk-11.0.6.10-hotspot"
(path to JDK in quotes).
I don't see any bug here, works exactly as designed and expected.
fyi.
eg.) JAVA_HOME=C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot
Use --jdkhome
option
Its works.
-
visualvm.exe --jdkhome "C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot"
-
visualvm.exe --jdkhome "C:/Program Files/AdoptOpenJDK/jdk-8.0.242.08-hotspot"
-
visualvm.exe --jdkhome "C:/Program Files/AdoptOpenJDK/jdk-8.0.242.08-hotspot/"
It does not work...
-
visualvm.exe --jdkhome "C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot\"
(...Why allow trailing slash, but disallow trailing backslash?)
Use registry
ref: https://docs.oracle.com/javase/9/install/installation-jdk-and-jre-microsoft-windows-platforms.htm#JSJIG-GUID-47C269A3-5220-412F-9E31-4B8C37A82BFB
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft]
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit]
"CurrentVersion"="1.8"
[HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.8]
"JavaHome"="C:\\Program Files\\AdoptOpenJDK\\jdk-8.0.242.08-hotspot"
fyi.
eg.)
JAVA_HOME=C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot
Use
--jdkhome
optionIts works.
* `visualvm.exe --jdkhome "C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot"` * `visualvm.exe --jdkhome "C:/Program Files/AdoptOpenJDK/jdk-8.0.242.08-hotspot"` * `visualvm.exe --jdkhome "C:/Program Files/AdoptOpenJDK/jdk-8.0.242.08-hotspot/"`
It does not work...
* `visualvm.exe --jdkhome "C:\Program Files\AdoptOpenJDK\jdk-8.0.242.08-hotspot\"`
(...Why allow trailing slash, but disallow trailing backslash?)
Use registry
ref: https://docs.oracle.com/javase/9/install/installation-jdk-and-jre-microsoft-windows-platforms.htm#JSJIG-GUID-47C269A3-5220-412F-9E31-4B8C37A82BFB
Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft] [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit] "CurrentVersion"="1.8" [HKEY_LOCAL_MACHINE\SOFTWARE\JavaSoft\Java Development Kit\1.8] "JavaHome"="C:\\Program Files\\AdoptOpenJDK\\jdk-8.0.242.08-hotspot"
Yup, that was the problem I had.
Hello,
Just one more datapoint. Using Win10, installed via Scoop (MCOfficer's bucket), which basically downloads the archive and decompresses it. And having an AdoptJdk14 hotspot installed (again just put somewhere) and using --jdkhome does not work.
But editing the JDKhome config seteting in etc/visualvm.conf works.
Using --jdkhome or editing etc/visualvm.conf should have the same effect. Can you please share your command to start VisualVM using the --jdkhome switch and the working visualvm.conf file?
Thanks for the quick response! Now I cannot reproduce it :o --jdkhome works. (Reverted to original .conf file and copied the path to JDK directly into powershell console and visualVM started.)
Interestingly if I supply a wrong path I get the confirmation dialog asking me whether I'd like to try the default. (And then I get the error popup.)
Hm, looking back at the console log, it seems I mistyped jdkhome before :(
Sorry for the false alarm!
I just downloaded and unzipped the 2.0.1
-
visualvm_201.zip
- standalone release
When I execute visualvm.exe
through either double click or through a command terminal appears:
I can execute in peace the following commands and appears their respective results:
-
echo %JAVA_HOME%
-
java --version
-
javac --version
I am working with OpenJDK 11
Well, according with the official documentation
Download indicates:
First Steps
1. Unzip the downloaded archive. The archive already contains the top-level visualvm directory.
2. Start VisualVM by invoking the binary appropriate for your OS:
visualvm\bin\visualvm.exe or visualvm/bin/visualvm
You may provide additional options to define JDK and/or VisualVM user directory:
--jdkhome "<path to JDK>" --userdir "<path to userdir>"
3. Check out the Getting Started document, it's designed to help you start using VisualVM.
And Getting Started (referred just above in its point 3) indicates:
Starting VisualVM
To start VisualVM on Windows, run the visualvm.exe program that is in the \bin folder
under the VisualVM install folder. On Unix or Linux use the visualvm shell script that is
in the /bin folder under the VisualVM install folder. You may specify the JDK which runs
VisualVM and/or user directory using command line parameters or by modifying
etc\visualvm.conf file. Example command for starting VisualVM with custom JDK and
userdir on Windows is:
visualvm.exe --jdkhome "C:\Software\Java\jdk1.6.0" --userdir "C:\Temp\visualvm_userdir"
Therefore:
Bug
JAVA_HOME
is ignored
Solution
Two ways
One: through the command parameter:
-
visualvm.exe --jdkhome "C:\yourusername\java\openjdk\jdk-11.0.7+10"
From above, is mandatory use ""
and not use =
Therefore - for example:
-
visualvm.exe --jdkhome="C:\yourusername\java\openjdk\jdk-11.0.7+10"
is invalid - it uses=
Two: in the etc\visualvm.conf
file - almost in the bottom add:
-
visualvm_jdkhome="C:\yourusername\java\openjdk\jdk-11.0.7+10"
From above, is mandatory use ""
and use =
I hope it helps for all developers arriving to this thread.
Another data point:
I have various flavours of JDK 8, 11 and 15 installed on macOS 10.15.6:
% /usr/libexec/java_home -V
Matching Java Virtual Machines (7):
15, x86_64: "OpenJDK 15" /Library/Java/JavaVirtualMachines/openjdk15/Contents/Home
11.0.8, x86_64: "OpenJDK 11.0.8" /Library/Java/JavaVirtualMachines/openjdk11-openj9/Contents/Home
11.0.8, x86_64: "GraalVM CE 20.2.0" /Library/Java/JavaVirtualMachines/openjdk11-graalvm/Contents/Home
11.0.8, x86_64: "OpenJDK 11.0.8" /Library/Java/JavaVirtualMachines/openjdk11/Contents/Home
1.8.0_265, x86_64: "OpenJDK 8" /Library/Java/JavaVirtualMachines/openjdk8/Contents/Home
1.8.0_265, x86_64: "OpenJDK 8" /Library/Java/JavaVirtualMachines/openjdk8-openj9/Contents/Home
1.8.0_262+10, x86_64: "GraalVM CE 20.2.0" /Library/Java/JavaVirtualMachines/openjdk8-graalvm/Contents/Home
/Library/Java/JavaVirtualMachines/openjdk15/Contents/Home
I have JAVA_HOME
set to JDK 8:
% echo $JAVA_HOME
/Library/Java/JavaVirtualMachines/openjdk8/Contents/Home
When I try to run VisualVM.app
I get this dialog saying I should use JDK 8 to JDK 14 and that Java 15 is not supported:
![Schermafbeelding 2020-09-21 om 16 18 02](https://user-images.githubusercontent.com/102921/93778315-0c16d080-fc26-11ea-866c-3a945e9ac2ff.png)
When I explicitly pass $JAVA_HOME
via --jdkhome
VisualVM does start as expected:
% /Applications/VisualVM.app/Contents/MacOS/visualvm --jdkhome $JAVA_HOME
I would expect VisualVM to default to using $JAVA_HOME
by default.
VisualVM requires the JRE.
VisualVM requires the JRE.
No, VisualVM requires JDK, not JRE.
If you have JAVA_HOME
env var set, you can run:
visualvm --jdkhome "%JAVA_HOME%"
and make a shortcut if you want launch VisualVM by double-clicking it.
`::visualvm.bat under bin
%~d0
cd %~dp0
visualvm.exe --jdkhome "%JAVA_HOME%"
pause
`
Thanks for the report! Please verify that using the "--jdkhome" parameter works for you - see the First Steps section at the bottom of http://visualvm.github.io/download.html.
This solution worked greatly
Got the same error and just used the "--jdkhome" parameter in this way:
visualvm --jdkhome %JAVA_HOME%
You may or may not need to surround your JAVA_HOME env. variable with double quotes as:
visualvm --jdkhome "%JAVA_HOME%"
This worked fine for me!
visualvm --jdkhome $env:JAVA_HOME
in powershell
I confirm that trailing backslash produces the problem. Can someone please fix that? Thanks! :-)
As a workaround for the trailing backslash problem, the following .bat file works for me:
@echo off
REM Remove the trailing backslash from JAVA_HOME (if it exists)
if "%JAVA_HOME:~-1%"=="\" (
set JAVA_HOME=%JAVA_HOME:~0,-1%
)
visualvm.exe --jdkhome "%JAVA_HOME%"
Running
visualvm.exe
both from Explorer and from Command Prompt shows "Cannot find Java 1.8 or higher." dialog. This is expected because the VisualVM launcher searches for the JavaSoft registry keys on Windows, which is missing. JAVA_HOME is not read by the launcher.
works exactly as designed and expected
Could you consider changing the design? What is the rationale? Why does the launcher read JavaSoft registry and not JAVA_HOME?
--jdkhome worked for me. What I did:
- on the commando pronpt: cd to the bin folder, then 2 )visualvm --jdkhome <path_to_jdk>
https://visualvm.github.io/docs/command-line-options.html
Launcher was changed to also use JAVA_HOME and JDK_HOME environment variables to find JDK. This hopefuly improves the situation on Windows platform.