On this page we’ll see how to use Java on the cluster. Before proceeding, make sure you’ve read the How To Run tutorial first. Java is a popular object-oriented programming language used in general-purpose computing.
Java on taki
Currently the most up to date version of Java is the system default:
[reetam1@taki-usr1 ~]$ which java /usr/ebuild/software/Java/1.8.0_181/bin/java [reetam1@taki-usr1 ~]$ javac -version Picked up _JAVA_OPTIONS: -Xmx2G javac 1.8.0_181 [reetam1@taki-usr1 ~]$
Example batch script
We’ll write a simple java program.See How to Run Programs on taki for an explanation on the basics of MPI and SLURM’s sbatch.
We can launch it with a standard SLURM script.
Once you have saved this code to your workspace, we have to compile it before we can execute it,
[garimak1@taki-usr1 java]$ javac hello.java If successful, no errors or warnings will appear and an executable HelloWorld.class will have been created, in addition to the source code in hello.java.[garimak1@taki-usr1 Hello_Serial]$ ll total 12 -rw-rw---- 1 garimak1 pi_jianwu 140 Dec 5 11:57 hello.java -rw-rw---- 1 garimak1 pi_jianwu 470 Dec 5 11:54 hello.slurm -rw-rw---- 1 garimak1 pi_jianwu 423 Dec 5 14:38 HelloWorld.class[garimak1@taki-usr1 java]$ sbatch hello.slurm Submitted batch job 11610705 [garimak1@taki-usr1 java]$ cat slurm.out Hello, World!
In order to execute Java programs, it is important to understand that Java relies on the Java Virtual Machine (JVM) to execute the Java bytecode (precomputed *.class files). The JVM is responsible for the object heap and therefore the infamous java garbage collection utilities. Java Garbage Collection relies heavily on processor power/utilization. More memory means that Garbage Collection takes longer and works harder at freeing memory. For optimal performance, the general rule is to use a quarter of physical memory. This general rule has been set as default in the JVM Java Options.
Redefine _JAVA_OPTIONS variable
In your slurm script, throw in the following line that will override the JVM default and ask only for an amount of memory that you specify:
This would configure the JVM to only request 1Gb ("1G"). Alternatively, "512M" for 0.5Gb and so on.