OpenJDK
From APIDesign
OpenJDK is a version of JDK released under GPL (with exceptions) open source license. OpenJDK comes with various improvements over the classical Oracle's JDK which often makes the OpenJDK much less usable than the original. One of the problems is the modified launcher parameters as described in Virtualization page. Instead of being helpful, it just makes the whole system unusable. However, at least the system starts.
For a while I've been struggling with Java on my hosted Linux (Cent OS). Whenever I tried:
$ java
Error occurred during initialization of VM
Could not reserve enough space for object heap
Could not create the Java virtual machine.
Why? The system has a lot of resources, so where is the problem? It turned out that the workaround is easy. Just to limit the number of available memory (this by itself is ridiculous, but it shows that allowing virtualization is not the primary driver for evolution of Java technology):
$ java -mx64M Usage: java [-options] class [args...] (to execute a class) or java [-options] -jar jarfile [args...] (to execute a jar file)
The question however is: How to modify each JDK utility (jar, javac, javadoc, etc.) to use this changed setting? Usual Unix style is to locate /etc/java.conf and tweak it. But of course Java is multiplatform, so no such configuration file exists, as far as I can tell. Thus I thought configuring the default options for all Java processes is impossible. However today I realized that
$ java -client
works too fine as well. From that moment it was just a small step to symlink the server directory inside the JDK installation to client:
# cd jre/lib/i386/ # mv server/ server.bak/ # ln -s client server
Now I can use all the JDK functionality without problems. However it took me a while to get there. No surprise nobody offers Java in virtualized environments, when it is so hard to set it up (and PHP is instantly ready).
Btw. this shows that location of your files on disk is an important type of API!