Eclipse and Java 6u21 problems
Oracle recently released Java 6 update 21 which had a small but innocuous change in the way that the
java.dll was created. Unfortunately, this change impacted Eclipse's startup, causing more problems for Eclipse than NetBeans ever had under Sun.
The change was to replace
COMPANY_NAME=Sun Microsystems, Inc. to
COMPANY_NAME=Oracle Corporation in the way that the
dll was generated. Unfortunately, Eclipse uses the name on the DLL to know whether it's safe to append the non-standard
-XX:MaxPermSize or not. Since some JVMs will fail to start when the flag is present but not supported, rather than putting the
-XX:MaxPermSize in Eclipse's startup file (eclipse.ini), a new argument,
--launcher.XXMaxPermSize 256m is permitted, and if the launcher executable on Windows detects that it is a Sun VM, it appends the
This auto-detection happens in the C launcher shim (
eclipse.exe) rather than from the VM – because once the VM is running, you can't change the properties. In order to do this in a quick (and let's face it, dirty) way, the
eclipse.exe launcher looks for the string
Sun Microsystems to determine if the flag should be added.
Even though this rebranding change was Oracle's right (and wouldn't even merit an entry in the release notes), it impacted Eclipse – not only the current 3.6 version, but also any IDEs or RCPs based on 3.5, 3.4 or 3.3. A co-ordinated sequence of fixes is needed in order to fix this (on the Eclipse side); there's a patch for the Eclipse launcher waiting to be applied to the latest, but it may be necessary to respin at least Eclipse 3.5 and maybe 3.4 as well in order to ensure compatibility.
Oracle are to be commended for their quick handling of the situation. Even though they didn't need to resolve the problem, they fixed it in a matter of days and subsequently the next Java build will have the fix in place. (Whether that's a rebuilt 6u21 or 6u22 remains to be seen.) In the meantime, if you're experiencing problems with Eclipse and have recently installed (or had automatically updated) Java 6u21, you can downgrade to Java 6u20 or follow the FAQ to re-enable the permgen size.
Just for the paranoid, I've confirmed that the follow the FAQ instructions work.
Yet another Sun-to-Oracle rebranding issue
Here goes yet another example of this issue.
That is way Feature Detection is preferred to Implementation Sniffing
Eduardo Pérez Ureta