Yes to the first question and no to the second question; it's a virtual machine. Your problems are probably related to unspecified changes in library implementation between versions. Although it could be, say, a race condition.
There are some hoops the VM has to go through. Notably references are treated in class files as if they took the same space as ints on the stack. double and long take up two reference slots. For instance fields, there's some rearrangement the VM usually goes through anyway. This is all done (relatively) transparently.
Also some 64-bit JVMs use "compressed oops". Because data is aligned to around every 8 or 16 bytes, three or four bits of the address are useless (although a "mark" bit may be stolen for some algorithms). This allows 32-bit address data (therefore using half as much bandwidth, and therefore faster) to use heap sizes of 35- or 36-bits on a 64-bit platform.
The Java JNI requires OS libraries of the same "bittiness" as the JVM. If you attempt to build something that depends, for example, on IESHIMS.DLL (lives in %ProgramFiles%\Internet Explorer) you need to take the 32bit version when your JVM is 32bit, the 64bit version when your JVM is 64bit. Likewise for other platforms.
"If you compile your code on an 32 Bit Machine, your code should only run on an 32 Bit Processor. If you want to run your code on an 64 Bit JVM you have to compile your class Files on an 64 Bit Machine using an 64-Bit JDK."
The performance difference comparing an application running on a 64-bit platform versus a 32-bit platform on SPARC is on the order of 10-20% degradation when you move to a 64-bit VM. On AMD64 and EM64T platforms this difference ranges from 0-15% depending on the amount of pointer accessing your application performs.
This is sort of a running annoyance to me, as a performance geek of long standing. Whether or not a particular change "performs better" or not is dependent, first and foremost, on the workload, ie, what you're asking the program to do.
64 bit Java will often perform better on things with heavy computation loads. Java programs, classically, have heavy I/O loads and heavy network loads; 64 bit vs 32 bit may not matter, but operating systems usually do.
I just had an issue with a Java client application running on Win 10 64Bit on a Java 8 32Bit JVM. It was reading 174 MB of data from an HttpsURLConnection's InputStream in 26s which is awfully slow. The server and network were proven not to be the cause of this.
Thinking "Hey, there cannot be a huge difference between 32Bit and 64Bit JRE" it took some time until I tried having the very same code executed by a 64Bit JVM. Fortunately, in the end I did it: It was reading the very same 174MB in 5s!
I have no idea what could be the reason for this, but I can answer this question by "Yes, 64Bit Java is better than 32Bit Java". See also the numbers in the answer of my question regarding this issue.
On most CPU architecures 32-bits is faster than 64-bit, all else being equal. 64-bit pointers require twice as much bandwidth to transfer as 32-bits. However, the x64 instruction set architecture adds a bit of sanity over x86, so it ends up being faster. The amount of handling of long types is usually small.
Of course it also depends upon the implementation of Java. As well as the compiler, you might find differences in the implementation; for instance, NIO assumes 64-bit pointers. Also note that Sun previously only shipped the faster server HotSpot implementation for x64. This meant that if you specified -d64, you would also switch from client to server HotSpot, IIRC.
Java 64bit may be faster than 32bit. At least with my tests it always was! The pointer argument is not valid when less than 4GB are used because then the 64bit-VM will also use short pointers internally. You get however the faster instruction set of the 64bit CPUs!
I tested this with Windows 7 and JDE1.8.0_144, but maybe the real reason are different internal JVM setting. When you use the 64-bit JVM it starts in "server" mode, while the 32-bit VM starts in "client" mode.
I though this was a Windows 11 problem but after trying on my old Windows 10 PC I get the same error. Sorry for the re-post, I thought it was a Windows 11 issue.
Due to a hard disk crash I have to re-install Line6 Edit for my good old Pod 2.0. But the installer depends on being able to download and create jre_setup.exe for Java Runtime v1.6 32-bit and that download fails. Being fully aware of the security issues with outdated Java installs, what are my options?
I'm surprised Windows11 even works with a 32-bit computer. Are you sure you have a 32-bit version of Windows 11? Go to Windows - Settings - OS Build Info. Under Device Specifications - System Type - Does it say 32-bit or 64-bit? My Windows10 64-bit computer runs Line6 Edit fine. Also why does the Java download fail? Is there an error message?
It's not the computer that is 32 bit but rather that the line6 editor is trying to download it. The computer is a new i9 Windows 11 x64.
If you look where the app is installed, it's installed in C:\Program Files (x86)\Line6\ which is used for 32-bit architecture.
When installing it flashes a warning saying it needs the runtime, attempts to download it with a "Connecting" message then fails with another error message with no specifics given. When you run the app, it then gives you the message, "This application requires a 32-bit Java Runtime environment 1.6.0". It sends you to the JRE download but only 64-bit is available, I believe as I cannot find any 32-bit versions on the Java site. Only options appear to be on online file archives and they make me nervous, even though I have BitDefender.
Same error for Windows 10. So, if for any reason you lose your Line 6 edit installation (as I did) you can't reinstall.
Problem solved although I'm not crazy about having old Java on my PC.
I found the Java archives and figured out what appears to be the last version to support 32-bit Java (indicated by windows-i586 in the name, I guess named after Intel Pentiums): -later-archive-downloads.html
This requires that you create an Oracle account. You have to be sure you are signed in when you are on the link above or the download won't work so check the "Accounts" icon in the top right if you have trouble..
I downloaded and ran the file jre-8u311-windows-i586.exe and this time when I ran Line 6 edit, it ran as expected and connected to my Pod 2. and I am back in business! I hope this helps someone!
Problem solved although I'm not crazy about having old Java on my PC.
I downloaded and ran the file jre-8u311-windows-i586.exe and this time when I ran Line 6 edit, it ran as expected and connected to my Pod 2. and I am back in business! I hope this helps someone!
This may or may not be something in which I'm interested at some point, but I heartily commend and thank you for following up and presenting the solution to the problem that you encountered. Wish everyone were so helpful and considerate!
I am having the same issue. I have never had 32-bit Java in my life and when I look up what Java version, it still says I have 64-bit, but Technic launcher says I only have 32-bit therefore I only get 1 Gb of ram. Please help!
I tried the above solution, I've checked the command prompt to see if I have any additional instances of Java installed, I've manually scoured through my files to make sure... I definitely only have 64-bit Java installed and yet Technic refuses to recognize it. Any helpful hints would be greatly appreciated.
for anyone coming to all these years-old threads looking to fix this problem, what helped me is updating whatever version of java i'm using WITHOUT uninstalling the previous version that technic was recognizing, opening the technic launcher, navigating to launcher options and changing which version of java to use. from here i was able to change my ram from 1gb to 4gb perfectly fine.
i have never had java 32bit installed. for whatever reason the technic launcher ran just fine with my 8.231 version of java 64bit, but upgrading to 8.381 made it unable to run. many people in other threads here and on reddit said to uninstall the previous version and keep the latest version, but the only thing that worked for me was having both versions and just switching which version to use within the technic launcher.
So. I have 64 bit Windows 10 but Technic Launcher lunches only with 32 bit Java. I have this problem only on my new pc . On my old pc (which was 64 bit too) it was working fine. I tried reinstalling Technic Launcher and Java and im lost.
c80f0f1006