Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Memory allocation for Java Webstart Application

I'm using a Java webstart application called BLAST2GO I'm running into problems with memory allocation. It needs to load a large data set into memory, so I've been trying to allocate 3-6GB to this application. However, no matter what I set as the max heap size, it always uses 455MB (as indicated by the message bar: 'Memory usage: xxMB of 455MB'). I've tried setting it to very reasonable levels (1024 MB), but still only 455MB are allocation.

Any ideas?

BTW, I'm using Ubuntu 10.04 32-bit with 24GB memory, 8 procs.

Update: Here is the JNLP they provide. I get the same result when I edit the values of the initial-heap-size and max-heap-size attributes.

<jnlp spec="1.0+" codebase="http://bioinfo.cipf.es/blast2go/webstart" href="http://bioinfo.cipf.es/blast2go/webstart/makeJnlp.php?mem=3072">
<information>
<title>Blast2GO 3072M</title>
<vendor>CIPF - UPV - IVIA</vendor>
<homepage href="http://www.blast2go.org"/>
<description>Blast2GO 3072M</description>
<description kind="short">Blast2GO 3072M</description>
<icon href="splash.gif"/>
<offline-allowed/>
</information>
<security>
<all-permissions/>
</security>
<resources>
<j2se version="1.5+" initial-heap-size="64m" max-heap-size="3072M"/>
<jar href="ext/blast2go.jar"/>
<jar href="ext/biojava-1.3.1.jar"/>
<jar href="ext/jfreechart-1.0.10.jar"/>
<jar href="ext/mysql-connector-java-3.0.11-stable-bin.jar"/>
<jar href="ext/zvtm.jar"/>
<jar href="ext/jakarta-regexp-1.4.jar"/>
<jar href="ext/jcommon-1.0.13.jar"/>
<jar href="ext/Simpat1.1.jar"/>
<jar href="ext/iText-2.1.1.jar"/>
<jar href="ext/jdom/activation.jar"/>
<jar href="ext/jdom/ant.jar"/>
<jar href="ext/jdom/jaxen-core.jar"/>
<jar href="ext/jdom/jaxen-jdom.jar"/>
<jar href="ext/jdom/jdom.jar"/>
<jar href="ext/jdom/mail.jar"/>
<jar href="ext/jdom/saxpath.jar"/>
<jar href="ext/jdom/xalan.jar"/>
<jar href="ext/jdom/xerces.jar"/>
<jar href="ext/jdom/xml-apis.jar"/>
<jar href="ext/interpro/commons-cli-1.0.jar"/>
<jar href="ext/interpro/commons-cli.jar"/>
<jar href="ext/interpro/freefluo.jar"/>
<jar href="ext/interpro/servlet.jar"/>
<jar href="ext/interpro/WSInterProScan.jar"/>
<jar href="ext/axis_1_4/axis-ant.jar"/>
<jar href="ext/axis_1_4/axis.jar"/>
<jar href="ext/axis_1_4/commons-discovery-0.2.jar"/>
<jar href="ext/axis_1_4/commons-logging-1.0.4.jar"/>
<jar href="ext/axis_1_4/jaxrpc.jar"/>
<jar href="ext/axis_1_4/keggapi.jar"/>
<jar href="ext/axis_1_4/log4j-1.2.8.jar"/>
<jar href="ext/axis_1_4/saaj.jar"/>
<jar href="ext/axis_1_4/wsdl4j-1.5.1.jar"/>
<jar href="ext/axis2/activation-1.1.jar"/>
<jar href="ext/axis2/annogen-0.1.0.jar"/>
<jar href="ext/axis2/axiom-api-1.2.2.jar"/>
<jar href="ext/axis2/axiom-dom-1.2.2.jar"/>
<jar href="ext/axis2/axiom-impl-1.2.2.jar"/>
<jar href="ext/axis2/axis2-adb-1.1.1.jar"/>
<jar href="ext/axis2/axis2-adb-codegen-1.1.1.jar"/>
<jar href="ext/axis2/axis2-codegen-1.1.1.jar"/>
<jar href="ext/axis2/axis2-java2wsdl-1.1.1.jar"/>
<jar href="ext/axis2/axis2-jaxbri-1.1.1.jar"/>
<jar href="ext/axis2/axis2-jibx-1.1.1.jar"/>
<jar href="ext/axis2/axis2-kernel-1.1.1.jar"/>
<jar href="ext/axis2/axis2-saaj-1.1.1.jar"/>
<jar href="ext/axis2/axis2-soapmonitor-1.1.1.jar"/>
<jar href="ext/axis2/axis2-spring-1.1.1.jar"/>
<jar href="ext/axis2/axis2-tools-1.1.1.jar"/>
<jar href="ext/axis2/axis2-xmlbeans-1.1.1.jar"/>
<jar href="ext/axis2/backport-util-concurrent-2.2.jar"/>
<jar href="ext/axis2/commons-codec-1.3.jar"/>
<jar href="ext/axis2/commons-fileupload-1.1.1.jar"/>
<jar href="ext/axis2/commons-httpclient-3.0.1.jar"/>
<jar href="ext/axis2/commons-io-1.2.jar"/>
<jar href="ext/axis2/commons-logging-1.1.jar"/>
<jar href="ext/axis2/geronimo-spec-jms-1.1-rc4.jar"/>
<jar href="ext/axis2/jakarta-httpcore-4.0-alpha2.jar"/>
<jar href="ext/axis2/jaxb-api-2.0.2.jar"/>
<jar href="ext/axis2/jaxb-impl-2.0.2.jar"/>
<jar href="ext/axis2/jaxb-xjc-2.0.2.jar"/>
<jar href="ext/axis2/jaxen-1.1-beta-10.jar"/>
<jar href="ext/axis2/jibx-bind-1.1.3.jar"/>
<jar href="ext/axis2/jibx-run-1.1.3.jar"/>
<jar href="ext/axis2/mail-1.4.jar"/>
<jar href="ext/axis2/neethi-2.0.jar"/>
<jar href="ext/axis2/servletapi-2.3.jar"/>
<jar href="ext/axis2/stax-api-1.0.1.jar"/>
<jar href="ext/axis2/woden-1.0.0M6.jar"/>
<jar href="ext/axis2/wsdl4j-1.6.2.jar"/>
<jar href="ext/axis2/wstx-asl-3.2.0.jar"/>
<jar href="ext/axis2/xalan-2.7.0.jar"/>
<jar href="ext/axis2/xbean-2.2.0.jar"/>
<jar href="ext/axis2/xercesImpl-2.8.1.jar"/>
<jar href="ext/axis2/xml-apis-1.3.03.jar"/>
<jar href="ext/axis2/XmlSchema-1.2.jar"/>
<jar href="ext/batik/batik-anim.jar"/>
<jar href="ext/batik/batik-awt-util.jar"/>
<jar href="ext/batik/batik-bridge.jar"/>
<jar href="ext/batik/batik-codec.jar"/>
<jar href="ext/batik/batik-css.jar"/>
<jar href="ext/batik/batik-dom.jar"/>
<jar href="ext/batik/batik-extension.jar"/>
<jar href="ext/batik/batik-ext.jar"/>
<jar href="ext/batik/batik-gui-util.jar"/>
<jar href="ext/batik/batik-gvt.jar"/>
<jar href="ext/batik/batik-parser.jar"/>
<jar href="ext/batik/batik-script.jar"/>
<jar href="ext/batik/batik-svg-dom.jar"/>
<jar href="ext/batik/batik-svggen.jar"/>
<jar href="ext/batik/batik-swing.jar"/>
<jar href="ext/batik/batik-transcoder.jar"/>
<jar href="ext/batik/batik-util.jar"/>
<jar href="ext/batik/batik-xml.jar"/>
<jar href="ext/batik/js.jar"/>
<jar href="ext/batik/pdf-transcoder.jar"/>
<jar href="ext/batik/xalan-2.6.0.jar"/>
<jar href="ext/batik/xerces_2_5_0.jar"/>
<jar href="ext/batik/xml-apis-ext.jar"/>
<jar href="ext/batik/xml-apis.jar"/>
</resources>
<application-desc main-class="es.blast2go.prog.MainProg"/>
</jnlp>

Update: I tried changing the href attribute in the root jnlp tag and I got a very strange message on the terminal. I wonder if Java is re-downloading the JNLP from this URL each time and ignoring my attempts to edit the JNLP. Is there a way I can prevent this?

> javaws blast2go3GB.jnlp 
Error occurred during initialization of VM
CCoouulldd  nnoott  crreesaetrev et heen oJuagvha  svpiarcteu aflo rm aocbhjiencet. 
heap

Final Update: Turns out this was a problem with the Java Version. I got the expected behavior when I downloaded and used Sun Java.

like image 754
Daniel Standage Avatar asked Nov 30 '10 21:11

Daniel Standage


People also ask

How much memory should I allocate to Java?

When allocating memory to a JVM, 10% to 25% of the memory is for the JVM process itself and the remainder is for the code running in the JVM. This means that a JVM that has been allocated 4 GB may only have 3.5 GB available to the code running in the JVM. This resource memory used by the JVM is often called overhead.

What is Java webstart application?

Java Web Start is an application-deployment technology that gives you the power to launch full-featured applications with a single click from your Web browser.

How does JVM allocate memory?

The JVM allocates Java heap memory from the OS and then manages the heap for the Java application. When an application creates a new object, the JVM sub-allocates a contiguous area of heap memory to store it.


2 Answers

You can specify the heap size in the j2se tag like this:

    <resources>
    .........
            <j2se version="1.6.0+" href="" initial-heap-size="1024m" max-heap-size="3000m" />
            <j2se version="1.5.0_05" href="" initial-heap-size="1024m" max-heap-size="3000m" />
            <j2se version="1.4.2_04" href="" initial-heap-size="1024m" max-heap-size="3000m" />        
    .........
    </resources>

And specify every jre version you would use.

like image 145
Enrique Avatar answered Sep 21 '22 08:09

Enrique


If you are running a 32-bit Linux, you can only run a 32-bit JVM which is limited to about 4 Gb memory per instance. I believe this is also the case even if you have more visible to the kernel.

If you really, really need a lot of memory in a single JVM you need to go 64-bit.


EDIT: Java WebStart was not open sourced for OpenJDK so an alternative implementation is used. Try to download and use Sun Java for this instead. It should be enough to download and unzip the JDK, and run bin/javaws foo.jnlp.

like image 25
Thorbjørn Ravn Andersen Avatar answered Sep 22 '22 08:09

Thorbjørn Ravn Andersen