<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;CEAFQHg4cSp7ImA9WhRUFUw.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808</id><updated>2012-01-25T17:31:51.639Z</updated><category term="linux" /><category term="teamcity" /><category term="hibernate" /><category term="rmi" /><category term="idea" /><category term="cryptography" /><category term="quicksort" /><category term="JLS" /><category term="java" /><category term="cache" /><category term="trading" /><category term="security" /><category term="regexp" /><category term="algorithms" /><category term="jvm" /><category term="concurrency" /><category term="keytool" /><category term="exceptions" /><category term="concurrenthashmap" /><category term="io" /><category term="jcaptcha" /><category term="PKI" /><category term="ehcache" /><category term="opensource" /><category term="shell" /><category term="jetty" /><category term="spring" /><category term="javac" /><category term="NIO" /><category term="performance" /><category term="architecture" /><category term="fitnesse" /><category term="jgroups" /><category term="ide" /><category term="sort" /><title>Stas's blog</title><subtitle type="html" /><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://stas-blogspot.blogspot.com/" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>25</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/StasBlog" /><feedburner:info uri="stasblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;CE8NSHw-eSp7ImA9WhRQEUs.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-3549876198104291176</id><published>2011-12-05T09:20:00.001Z</published><updated>2011-12-06T09:14:59.251Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-06T09:14:59.251Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="JLS" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><title>The magic of conditional operator</title><content type="html">Can you guess what is going to be the output of the following piece of code?
&lt;pre class="prettyprint"&gt;
    Object obj = false ? new Long(1) : new Integer(1);
    System.out.println(obj.getClass());
&lt;/pre&gt;
The smart once can guess that it is going to be "class java.lang.Long", otherwise there won't be a question. Now can you answer why? To be honest, I was a surprised by such an outcome, but apparently, according to JLS that is correct behaviour. Here is quotation from &lt;a href="http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.25"&gt;"15.25 Conditional Operator ? :"&lt;/a&gt;:&lt;br/&gt;&lt;br/&gt;
&lt;i&gt;
The type of a conditional expression is determined as follows:
&lt;ul&gt;
    &lt;li&gt;If the second and third operands have the same type (which may be the null type), then that is the type of the conditional expression.&lt;/li&gt;
    &lt;li&gt;If one of the second and third operands is of type boolean and the type of the other is of type Boolean, then the type of the conditional expression is boolean.&lt;/li&gt;
    &lt;li&gt;If one of the second and third operands is of the null type and the type of the other is a reference type, then the type of the conditional expression is that reference type.&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;Otherwise, if the second and third operands have types that are convertible (&lt;a href="http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#190699"&gt;§5.1.8&lt;/a&gt;) to numeric types, then there are several cases:&lt;/b&gt;
        &lt;ul&gt;
        &lt;li&gt;If one of the operands is of type byte or Byte and the other is of type short or Short, then the type of the conditional expression is short.&lt;/li&gt;
        &lt;li&gt;If one of the operands is of type T where T is byte, short, or char, and the other operand is a constant expression of type int whose value is representable in type T, then the type of the conditional expression is T.&lt;/li&gt;
        &lt;li&gt;If one of the operands is of type Byte and the other operand is a constant expression of type int whose value is representable in type byte, then the type of the conditional expression is byte.&lt;/li&gt;
        &lt;li&gt;If one of the operands is of type Short and the other operand is a constant expression of type int whose value is representable in type short, then the type of the conditional expression is short.&lt;/li&gt;
        &lt;li&gt;If one of the operands is of type; Character and the other operand is a constant expression of type int whose value is representable in type char, then the type of the conditional expression is char.&lt;/li&gt;
        &lt;li&gt;&lt;b&gt;Otherwise, binary numeric promotion (&lt;a href="http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#170983"&gt;§5.6.2&lt;/a&gt;) is applied to the operand types, and the type of the conditional expression is the promoted type of the second and third operands. Note that binary numeric promotion performs unboxing conversion (&lt;a href="http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#190699"&gt;§5.1.8&lt;/a&gt;) and value set conversion (&lt;a href="http://java.sun.com/docs/books/jls/third_edition/html/conversions.html#184225"&gt;§5.1.13&lt;/a&gt;).&lt;/b&gt;&lt;/li&gt;
         &lt;/ul&gt;
    &lt;li&gt;Otherwise, the second and third operands are of types S1 and S2 respectively. Let T1 be the type that results from applying boxing conversion to S1, and let T2 be the type that results from applying boxing conversion to S2. The type of the conditional expression is the result of applying capture conversion (§5.1.10) to lub(T1, T2) (§15.12.2.7).&lt;/li&gt;
&lt;/ul&gt;
&lt;/i&gt;
&lt;br/&gt;
In the other words, it says that if second and third operands are convertible to primitive numeric types, then the result type is based on numeric promotion of converted values. Here how it looks after applying these rules:
&lt;pre class="prettyprint"&gt;
Object obj = Long.valueOf(false ? (new Long(1L)).longValue() : (new Integer(1)).intValue());
&lt;/pre&gt;
My opinion, it all looks like a magic, and at the end, that's the price Java paid for autoboxing. Well world is not perfect and that's it's beauty, isn't it? :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-3549876198104291176?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/nWPDi71xHlaP0gokizZ9rVmT6t4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nWPDi71xHlaP0gokizZ9rVmT6t4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/nWPDi71xHlaP0gokizZ9rVmT6t4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/nWPDi71xHlaP0gokizZ9rVmT6t4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=to-9v7BOKCM:Tbo4h1Nvsow:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=to-9v7BOKCM:Tbo4h1Nvsow:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=to-9v7BOKCM:Tbo4h1Nvsow:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=to-9v7BOKCM:Tbo4h1Nvsow:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/to-9v7BOKCM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/3549876198104291176/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=3549876198104291176" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/3549876198104291176?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/3549876198104291176?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/to-9v7BOKCM/java-conditional-operator-magic.html" title="The magic of conditional operator" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2011/12/java-conditional-operator-magic.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEIHRn84eCp7ImA9WhRSEEw.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-7593839267814608200</id><published>2011-11-09T22:29:00.000Z</published><updated>2011-11-11T11:55:37.130Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-11T11:55:37.130Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="io" /><title>Java file flushing performance</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
There are many situations when it is required to ensure that data was written to the disk and write is also required&amp;nbsp;to be fast. The most most common where it has to happen are databases,&amp;nbsp;journalling, etc. Also, it is often required to update some&amp;nbsp;random&amp;nbsp;position in a file. I specifically what to place emphasis on random access here, as far as the rest will cover just cases where it is supported, i.e. I'm not going to mention OutputStream.flush() &amp;amp; related topics. Just&amp;nbsp;haven't&amp;nbsp;tried it, as far as that wasn't my case at the moment.&lt;br /&gt;
&lt;br /&gt;
There are several way of flushing the data to disk in java. These options can be quite different in the way they implemented internally and in their performance. Here is the list of existing things you can do:&lt;br /&gt;
&lt;div style="text-align: left;"&gt;
&lt;/div&gt;
&lt;ul style="text-align: left;"&gt;
&lt;li&gt;FileChannel.force()&lt;/li&gt;
&lt;li&gt;'rws' or 'rwd' mode of RandomAccessFile, which 'works much like the force(boolean) method of the FileChannel class' (from javadoc).&lt;/li&gt;
&lt;li&gt;MappedbyteBuffer.force()&lt;/li&gt;
&lt;li&gt;RandomAccessFile.getFD().sync()&lt;/li&gt;
&lt;li&gt;any close() method. Here I mean seek and close stream each time when access is required. Doing tests, I actually didn't seek, as far was updating data with zero offset.&lt;/li&gt;
&lt;/ul&gt;
Surprisingly (the only&amp;nbsp;unsurprising&amp;nbsp;exception is close()) all these methods gives very different&amp;nbsp;performance&amp;nbsp;and it varies almost randomly on different OSes and file systems. Worth noticing that hardware can also put it's correction on the performance of any of these methods.&amp;nbsp;I have also a strong feeling that performance may vary even with minor change in OS or JVM version number. Here is the table with time it takes to flush 8bytes (keep in mind, that the real&amp;nbsp;amount&amp;nbsp;of flushed data&amp;nbsp;depends&amp;nbsp;on the size of caches and going to be much more that 8byes), just to give a&amp;nbsp;flavour&amp;nbsp;of how different is that:&lt;br /&gt;
&lt;br /&gt;
&lt;table border="1"&gt;
    &lt;tbody&gt;
&lt;tr&gt;
        &lt;td&gt;&lt;/td&gt;
        &lt;td&gt;RandomAccessFile.&lt;br /&gt;
getFD().sync()&lt;/td&gt;&lt;td&gt;RandomAccessFile, rwd mode&lt;/td&gt;
        &lt;td&gt;MappedbyteBuffer.force()&lt;/td&gt;&lt;td&gt;FileChannel.force()&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
        &lt;td&gt;Windows&lt;/td&gt;
        &lt;td&gt;0.2818ms&lt;/td&gt;&lt;td&gt;0.0125ms&lt;/td&gt;
        &lt;td&gt;0.007ms&lt;/td&gt;
        &lt;td&gt;0.139ms&lt;/td&gt;
    &lt;/tr&gt;
&lt;tr&gt;
        &lt;td&gt;Linux&lt;/td&gt;
        &lt;td&gt;0.5354ms&lt;/td&gt;
        &lt;td&gt;0.5144ms&lt;/td&gt;
        &lt;td&gt;0.4663ms&lt;/td&gt;
        &lt;td&gt;0.0093ms&lt;/td&gt;
    &lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;
&lt;br /&gt;
Please, do not treat these numbers as any relevant result. They are here just to give an example how these things can vary.&lt;br /&gt;
&lt;br /&gt;
So, what the conclusion?&amp;nbsp;Conclusion&amp;nbsp;is that if you would need to write high-performance application which does lots of IO, you really need to test different approached on different OSes, on different file systems and,&amp;nbsp;preferably&amp;nbsp; on different JVMs. Do not expect something to be fast on Linux (Solaris, AIX, etc) production box, when it is fast on your Windows (Linux, etc) workstation and vice versa. As can be seen, the difference can be in orders of magnitude.&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-7593839267814608200?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/LOno0WtfelHhCFTShZ1t90D56Sg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LOno0WtfelHhCFTShZ1t90D56Sg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/LOno0WtfelHhCFTShZ1t90D56Sg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/LOno0WtfelHhCFTShZ1t90D56Sg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=_qcXAXsMdmo:EcLrDC5gp3E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=_qcXAXsMdmo:EcLrDC5gp3E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=_qcXAXsMdmo:EcLrDC5gp3E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=_qcXAXsMdmo:EcLrDC5gp3E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/_qcXAXsMdmo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/7593839267814608200/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=7593839267814608200" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/7593839267814608200?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/7593839267814608200?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/_qcXAXsMdmo/java-file-flushing-performance.html" title="Java file flushing performance" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2011/11/java-file-flushing-performance.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUABR30yeip7ImA9WhdSFk8.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-3920835691125182889</id><published>2011-07-25T22:01:00.001+01:00</published><updated>2011-07-25T22:02:36.392+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-25T22:02:36.392+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="jetty" /><title>Embedding Jetty7</title><content type="html">Jetty web container provides the way to build highly modularized web application. It is also as very fast a lightweight. Following example shows how to build simple web application using embedded version of Jetty7.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
The main class:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;package sample.jetty7;

import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.webapp.WebAppContext;

import java.net.URL;

public class SampleServer {
    public static void main(String args[]) throws Exception {
        Server server = new Server(8080);

        final URL warUrl = SampleServer.class.getClassLoader().getResource("webapp");
        final String warUrlString = warUrl.toExternalForm();
        server.setHandler(new WebAppContext(warUrlString, "/"));

        server.start();
        server.join();
    }
}
&lt;/pre&gt;web.xml:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&amp;gt;
&amp;lt;web-app xmlns="http://java.sun.com/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
         version="2.5"&amp;gt;
    &amp;lt;servlet&amp;gt;
        &amp;lt;servlet-name&amp;gt;appServlet&amp;lt;/servlet-name&amp;gt;
        &amp;lt;servlet-class&amp;gt;sample.jetty7.SampleServlet&amp;lt;/servlet-class&amp;gt;
    &amp;lt;/servlet&amp;gt;

    &amp;lt;servlet-mapping&amp;gt;
        &amp;lt;servlet-name&amp;gt;appServlet&amp;lt;/servlet-name&amp;gt;
        &amp;lt;url-pattern&amp;gt;/&amp;lt;url-pattern&amp;gt;
    &amp;lt;/servlet-mapping&amp;gt;
&amp;lt;/web-app&amp;gt;
&lt;/pre&gt;To keep a bit of mystery in the post, I will not provide source for the servlet. It is suggested that reader can find it out on his own.&lt;br /&gt;
&lt;br /&gt;
Here is list of dependencies in ivy format. If required, it shouldn't be a problem to translate it into Maven format or just get jars from some &lt;a href="http://mvnrepository.com"&gt;public repository&lt;/a&gt;.&lt;br /&gt;
&lt;pre class="prettyprint"&gt;&amp;lt;!-- Jetty Core --&amp;gt;
&amp;lt;dependency org="org.eclipse.jetty" name="jetty-server" rev="7.4.4.v20110707"/&amp;gt;
&amp;lt;dependency org="org.eclipse.jetty" name="jetty-webapp" rev="7.4.4.v20110707"/&amp;gt;
&amp;lt;dependency org="org.eclipse.jetty" name="jetty-servlet" rev="7.4.4.v20110707"/&amp;gt;
&amp;lt;dependency org="org.eclipse.jetty" name="jetty-util" rev="7.4.4.v20110707"/&amp;gt;
&amp;lt;dependency org="org.eclipse.jetty" name="jetty-http" rev="7.4.4.v20110707"/&amp;gt;
&amp;lt;dependency org="org.eclipse.jetty" name="jetty-io" rev="7.4.4.v20110707"/&amp;gt;
&amp;lt;dependency org="org.eclipse.jetty" name="jetty-security" rev="7.4.4.v20110707"/&amp;gt;
&amp;lt;dependency org="org.eclipse.jetty" name="jetty-xml" rev="7.4.4.v20110707"/&amp;gt;
&amp;lt;dependency org="org.eclipse.jetty" name="jetty-continuation" rev="7.4.4.v20110707"/&amp;gt;
&amp;lt;!-- JSP Support --&amp;gt;
&amp;lt;dependency org="org.apache.tomcat" name="jasper" rev="6.0.32"/&amp;gt;
&amp;lt;dependency org="org.apache.tomcat" name="jasper-el" rev="6.0.32"/&amp;gt;
&amp;lt;dependency org="org.apache.tomcat" name="jasper-jdt" rev="6.0.29"/&amp;gt;
&amp;lt;dependency org="org.apache.tomcat" name="juli" rev="6.0.32"/&amp;gt;
&amp;lt;dependency org="javax.servlet.jsp" name="jsp-api" rev="2.1"/&amp;gt;
&amp;lt;dependency org="javax.servlet" name="servlet-api" rev="2.5"/&amp;gt;
&lt;/pre&gt;The final step is building a jar file with following structure:&lt;br /&gt;
&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;a href="http://3.bp.blogspot.com/-7XG-bIWglEg/Ti3VASG6yII/AAAAAAAAADU/wgTEGzA-fj0/s1600/jetty_jar_structure.png" imageanchor="1" style=""&gt;&lt;img border="0" height="123" width="138" src="http://3.bp.blogspot.com/-7XG-bIWglEg/Ti3VASG6yII/AAAAAAAAADU/wgTEGzA-fj0/s320/jetty_jar_structure.png" /&gt;&lt;/a&gt;&lt;/div&gt;now just run the main class. It better to run and kill it several times to feel deeply that pleasure of fast startup and small footprint. When you enjoyed enought, take a final deep breath and go to "http://localhost:8080/sample.jsp" to check that it is actually working.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-3920835691125182889?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/A25E9kIXory87LWPXuieOE01OuM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A25E9kIXory87LWPXuieOE01OuM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/A25E9kIXory87LWPXuieOE01OuM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/A25E9kIXory87LWPXuieOE01OuM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=1IBseOZtUUU:2NET_y4xstM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=1IBseOZtUUU:2NET_y4xstM:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=1IBseOZtUUU:2NET_y4xstM:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=1IBseOZtUUU:2NET_y4xstM:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/1IBseOZtUUU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/3920835691125182889/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=3920835691125182889" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/3920835691125182889?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/3920835691125182889?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/1IBseOZtUUU/embedding-jetty7.html" title="Embedding Jetty7" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-7XG-bIWglEg/Ti3VASG6yII/AAAAAAAAADU/wgTEGzA-fj0/s72-c/jetty_jar_structure.png" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2011/07/embedding-jetty7.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8BQX46fCp7ImA9WhRQF0U.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-8630038642300102986</id><published>2011-07-20T14:23:00.007+01:00</published><updated>2011-12-13T14:50:50.014Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-13T14:50:50.014Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="jvm" /><title>The most complete list of -XX options for Java 6 JVM</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
There was a wonderful page with that list (&lt;a href="http://www.md.pp.ru/~eu/jdk6options.html"&gt;http://www.md.pp.ru/~eu/jdk6options.html&lt;/a&gt;), but it seems it's gone now and not available any more. Luckily there is&amp;nbsp;&lt;a href="http://web.archive.org/"&gt;http://web.archive.org&lt;/a&gt;&amp;nbsp;which allows to make time flowing backwards and recover things which have passed away long time back. So, I have just get that page out of grave and copy/pasted here to return that bit of information back to life.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;ul&gt;
&lt;li&gt;&lt;a href="#product"&gt;product&lt;/a&gt;&amp;nbsp;flags are always settable / visible&lt;/li&gt;
&lt;li&gt;&lt;a href="#develop"&gt;develop&lt;/a&gt;&amp;nbsp;flags are settable / visible only during development and are constant in the PRODUCT version&lt;/li&gt;
&lt;li&gt;&lt;a href="#notproduct"&gt;notproduct&lt;/a&gt;&amp;nbsp;flags are settable / visible only during development and are not declared in the PRODUCT version&lt;/li&gt;
&lt;li&gt;&lt;a href="#diagnostic"&gt;diagnostic&lt;/a&gt;&amp;nbsp;options not meant for VM tuning or for product modes. They are to be used for VM quality assurance or field diagnosis of VM bugs. They are hidden so that users will not be encouraged to try them as if they were VM ordinary execution options. However, they are available in the product version of the VM. Under instruction from support engineers, VM customers can turn them on to collect diagnostic information about VM problems. To use a VM diagnostic option, you must first specify +UnlockDiagnosticVMOptions. (This master switch also affects the behavior of -Xprintflags.)&lt;/li&gt;
&lt;li&gt;&lt;a href="#manageable"&gt;manageable&lt;/a&gt;&amp;nbsp;flags are writeable external product flags. They are dynamically writeable through the JDK management interface (com.sun.management.HotSpotDiagnosticMXBean API) and also through JConsole. These flags are external exported interface (see CCC). The list of manageable flags can be queried programmatically through the management interface.&lt;/li&gt;
&lt;li&gt;&lt;a href="#experimental"&gt;experimental&lt;/a&gt;&amp;nbsp;experimental options which become available just after XX:+UnlockExperimentalVMOptions flag is set.&lt;/li&gt;
&lt;li&gt;&lt;a href="#product_rw"&gt;product_rw&lt;/a&gt;&amp;nbsp;flags are writeable internal product flags. They are like "manageable" flags but for internal/private use. The list of product_rw flags are internal/private flags which may be changed/removed in a future release. It can be set through the management interface to get/set value when the name of flag is supplied.&lt;/li&gt;
&lt;li&gt;&lt;a href="#product_pd"&gt;product_pd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="#develop_pd"&gt;develop_pd&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table border="1" cellpadding="3" cellspacing="0" &gt;&lt;tbody&gt;
&lt;tr&gt;&lt;th&gt;Name&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Default&lt;/th&gt;&lt;th&gt;Type&lt;/th&gt;&lt;/tr&gt;
&lt;tr bgcolor="#e0e0e0"&gt;&lt;td colspan="4"&gt;&lt;a href="" name="product"&gt;product&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseMembar"&gt;&lt;/a&gt;&lt;a href="#UseMembar"&gt;UseMembar&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Unstable) Issues membars on thread state transitions&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintCommandLineFlags"&gt;&lt;/a&gt;&lt;a href="#PrintCommandLineFlags"&gt;PrintCommandLineFlags&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Prints flags that appeared on the command line&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="JavaMonitorsInStackTrace"&gt;&lt;/a&gt;&lt;a href="#JavaMonitorsInStackTrace"&gt;JavaMonitorsInStackTrace&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print info. about Java monitor locks when the stacks are dumped&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="LargePageSizeInBytes"&gt;&lt;/a&gt;&lt;a href="#LargePageSizeInBytes"&gt;LargePageSizeInBytes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Large page size (0 to let VM choose the page size&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="LargePageHeapSizeThreshold"&gt;&lt;/a&gt;&lt;a href="#LargePageHeapSizeThreshold"&gt;LargePageHeapSizeThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use large pages if max heap is at least this big&lt;/td&gt;&lt;td&gt;128*M&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ForceTimeHighResolution"&gt;&lt;/a&gt;&lt;a href="#ForceTimeHighResolution"&gt;ForceTimeHighResolution&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Using high time resolution(For Win32 only)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintVMQWaitTime"&gt;&lt;/a&gt;&lt;a href="#PrintVMQWaitTime"&gt;PrintVMQWaitTime&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Prints out the waiting time in VM operation queue&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintJNIResolving"&gt;&lt;/a&gt;&lt;a href="#PrintJNIResolving"&gt;PrintJNIResolving&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Used to implement -v:jni&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseInlineCaches"&gt;&lt;/a&gt;&lt;a href="#UseInlineCaches"&gt;UseInlineCaches&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use Inline Caches for virtual calls&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseCompilerSafepoints"&gt;&lt;/a&gt;&lt;a href="#UseCompilerSafepoints"&gt;UseCompilerSafepoints&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Stop at safepoints in compiled code&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseSplitVerifier"&gt;&lt;/a&gt;&lt;a href="#UseSplitVerifier"&gt;UseSplitVerifier&lt;/a&gt;&lt;/td&gt;&lt;td&gt;use split verifier with StackMapTable attributes&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="FailOverToOldVerifier"&gt;&lt;/a&gt;&lt;a href="#FailOverToOldVerifier"&gt;FailOverToOldVerifier&lt;/a&gt;&lt;/td&gt;&lt;td&gt;fail over to old verifier when split verifier fails&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SuspendRetryCount"&gt;&lt;/a&gt;&lt;a href="#SuspendRetryCount"&gt;SuspendRetryCount&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Maximum retry count for an external suspend request&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SuspendRetryDelay"&gt;&lt;/a&gt;&lt;a href="#SuspendRetryDelay"&gt;SuspendRetryDelay&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Milliseconds to delay per retry (* current_retry_count)&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseSuspendResumeThreadLists"&gt;&lt;/a&gt;&lt;a href="#UseSuspendResumeThreadLists"&gt;UseSuspendResumeThreadLists&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enable SuspendThreadList and ResumeThreadList&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxFDLimit"&gt;&lt;/a&gt;&lt;a href="#MaxFDLimit"&gt;MaxFDLimit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Bump the number of file descriptors to max in solaris.&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="BytecodeVerificationRemote"&gt;&lt;/a&gt;&lt;a href="#BytecodeVerificationRemote"&gt;BytecodeVerificationRemote&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enables the Java bytecode verifier for remote classes&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="BytecodeVerificationLocal"&gt;&lt;/a&gt;&lt;a href="#BytecodeVerificationLocal"&gt;BytecodeVerificationLocal&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enables the Java bytecode verifier for local classes&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="PrintGCApplicationConcurrentTime"&gt;&lt;/a&gt;&lt;a href="#PrintGCApplicationConcurrentTime"&gt;PrintGCApplicationConcurrentTime&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print the time the application has been running&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintGCApplicationStoppedTime"&gt;&lt;/a&gt;&lt;a href="#PrintGCApplicationStoppedTime"&gt;PrintGCApplicationStoppedTime&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print the time the application has been stopped&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ShowMessageBoxOnError"&gt;&lt;/a&gt;&lt;a href="#ShowMessageBoxOnError"&gt;ShowMessageBoxOnError&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Keep process alive on VM fatal error&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SuppressFatalErrorMessage"&gt;&lt;/a&gt;&lt;a href="#SuppressFatalErrorMessage"&gt;SuppressFatalErrorMessage&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Do NO Fatal Error report [Avoid deadlock]&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="OnError"&gt;&lt;/a&gt;&lt;a href="#OnError"&gt;OnError&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Run user-defined commands on fatal error; see VMError.cpp for examples&lt;/td&gt;&lt;td&gt;""&lt;/td&gt;&lt;td&gt;ccstr&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="OnOutOfMemoryError"&gt;&lt;/a&gt;&lt;a href="#OnOutOfMemoryError"&gt;OnOutOfMemoryError&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Run user-defined commands on first java.lang.OutOfMemoryError&lt;/td&gt;&lt;td&gt;""&lt;/td&gt;&lt;td&gt;ccstr&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintCompilation"&gt;&lt;/a&gt;&lt;a href="#PrintCompilation"&gt;PrintCompilation&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print compilations&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="StackTraceInThrowable"&gt;&lt;/a&gt;&lt;a href="#StackTraceInThrowable"&gt;StackTraceInThrowable&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Collect backtrace in throwable when exception happens&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="OmitStackTraceInFastThrow"&gt;&lt;/a&gt;&lt;a href="#OmitStackTraceInFastThrow"&gt;OmitStackTraceInFastThrow&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Omit backtraces for some 'hot' exceptions in optimized code&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ProfilerPrintByteCodeStatistics"&gt;&lt;/a&gt;&lt;a href="#ProfilerPrintByteCodeStatistics"&gt;ProfilerPrintByteCodeStatistics&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Prints byte code statictics when dumping profiler output&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ProfilerRecordPC"&gt;&lt;/a&gt;&lt;a href="#ProfilerRecordPC"&gt;ProfilerRecordPC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Collects tick for each 16 byte interval of compiled code&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ProfileVM"&gt;&lt;/a&gt;&lt;a href="#ProfileVM"&gt;ProfileVM&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Profiles ticks that fall within VM (either in the VM Thread or VM code called through stubs)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ProfileIntervals"&gt;&lt;/a&gt;&lt;a href="#ProfileIntervals"&gt;ProfileIntervals&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Prints profiles for each interval (see ProfileIntervalsTicks)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="RegisterFinalizersAtInit"&gt;&lt;/a&gt;&lt;a href="#RegisterFinalizersAtInit"&gt;RegisterFinalizersAtInit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Register finalizable objects at end of Object.&lt;init&gt;&amp;nbsp;or after allocation.&lt;/init&gt;&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ClassUnloading"&gt;&lt;/a&gt;&lt;a href="#ClassUnloading"&gt;ClassUnloading&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Do unloading of classes&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ConvertYieldToSleep"&gt;&lt;/a&gt;&lt;a href="#ConvertYieldToSleep"&gt;ConvertYieldToSleep&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Converts yield to a sleep of MinSleepInterval to simulate Win32 behavior (SOLARIS only)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseBoundThreads"&gt;&lt;/a&gt;&lt;a href="#UseBoundThreads"&gt;UseBoundThreads&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Bind user level threads to kernel threads (for SOLARIS only)&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseLWPSynchronization"&gt;&lt;/a&gt;&lt;a href="#UseLWPSynchronization"&gt;UseLWPSynchronization&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use LWP-based instead of libthread-based synchronization (SPARC only)&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SyncKnobs"&gt;&lt;/a&gt;&lt;a href="#SyncKnobs"&gt;SyncKnobs&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Unstable) Various monitor synchronization tunables&lt;/td&gt;&lt;td&gt;""&lt;/td&gt;&lt;td&gt;ccstr&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="EmitSync"&gt;&lt;/a&gt;&lt;a href="#EmitSync"&gt;EmitSync&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Unsafe,Unstable) Controls emission of inline sync fast-path code&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AlwaysInflate"&gt;&lt;/a&gt;&lt;a href="#AlwaysInflate"&gt;AlwaysInflate&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Unstable) Force inflation&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="Atomics"&gt;&lt;/a&gt;&lt;a href="#Atomics"&gt;Atomics&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Unsafe,Unstable) Diagnostic - Controls emission of atomics&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="EmitLFence"&gt;&lt;/a&gt;&lt;a href="#EmitLFence"&gt;EmitLFence&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Unsafe,Unstable) Experimental&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AppendRatio"&gt;&lt;/a&gt;&lt;a href="#AppendRatio"&gt;AppendRatio&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Unstable) Monitor queue fairness" ) product(intx, SyncFlags, 0,(Unsafe,Unstable) Experimental Sync flags" ) product(intx, SyncVerbose, 0,(Unstable)" ) product(intx, ClearFPUAtPark, 0,(Unsafe,Unstable)" ) product(intx, hashCode, 0, (Unstable) select hashCode generation algorithm" ) product(intx, WorkAroundNPTLTimedWaitHang, 1, (Unstable, Linux-specific)" avoid NPTL-FUTEX hang pthread_cond_timedwait" ) product(bool, FilterSpuriousWakeups , true, Prevent spurious or premature wakeups from object.wait" (Solaris only)&lt;/td&gt;&lt;td&gt;11&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AdjustConcurrency"&gt;&lt;/a&gt;&lt;a href="#AdjustConcurrency"&gt;AdjustConcurrency&lt;/a&gt;&lt;/td&gt;&lt;td&gt;call thr_setconcurrency at thread create time to avoid LWP starvation on MP systems (For Solaris Only)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ReduceSignalUsage"&gt;&lt;/a&gt;&lt;a href="#ReduceSignalUsage"&gt;ReduceSignalUsage&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Reduce the use of OS signals in Java and/or the VM&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AllowUserSignalHandlers"&gt;&lt;/a&gt;&lt;a href="#AllowUserSignalHandlers"&gt;AllowUserSignalHandlers&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Do not complain if the application installs signal handlers (Solaris &amp;amp; Linux only)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseSignalChaining"&gt;&lt;/a&gt;&lt;a href="#UseSignalChaining"&gt;UseSignalChaining&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use signal-chaining to invoke signal handlers installed by the application (Solaris &amp;amp; Linux only)&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseAltSigs"&gt;&lt;/a&gt;&lt;a href="#UseAltSigs"&gt;UseAltSigs&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use alternate signals instead of SIGUSR1 &amp;amp; SIGUSR2 for VM internal signals. (Solaris only)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseSpinning"&gt;&lt;/a&gt;&lt;a href="#UseSpinning"&gt;UseSpinning&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use spinning in monitor inflation and before entry&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PreSpinYield"&gt;&lt;/a&gt;&lt;a href="#PreSpinYield"&gt;PreSpinYield&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Yield before inner spinning loop&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PostSpinYield"&gt;&lt;/a&gt;&lt;a href="#PostSpinYield"&gt;PostSpinYield&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Yield after inner spinning loop&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AllowJNIEnvProxy"&gt;&lt;/a&gt;&lt;a href="#AllowJNIEnvProxy"&gt;AllowJNIEnvProxy&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Allow JNIEnv proxies for jdbx&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="JNIDetachReleasesMonitors"&gt;&lt;/a&gt;&lt;a href="#JNIDetachReleasesMonitors"&gt;JNIDetachReleasesMonitors&lt;/a&gt;&lt;/td&gt;&lt;td&gt;JNI DetachCurrentThread releases monitors owned by thread&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="RestoreMXCSROnJNICalls"&gt;&lt;/a&gt;&lt;a href="#RestoreMXCSROnJNICalls"&gt;RestoreMXCSROnJNICalls&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Restore MXCSR when returning from JNI calls&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CheckJNICalls"&gt;&lt;/a&gt;&lt;a href="#CheckJNICalls"&gt;CheckJNICalls&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify all arguments to JNI calls&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseFastJNIAccessors"&gt;&lt;/a&gt;&lt;a href="#UseFastJNIAccessors"&gt;UseFastJNIAccessors&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use optimized versions of Get&lt;primitive&gt;Field&lt;/primitive&gt;&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="EagerXrunInit"&gt;&lt;/a&gt;&lt;a href="#EagerXrunInit"&gt;EagerXrunInit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Eagerly initialize -Xrun libraries; allows startup profiling, but not all -Xrun libraries may support the state of the VM at this time&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PreserveAllAnnotations"&gt;&lt;/a&gt;&lt;a href="#PreserveAllAnnotations"&gt;PreserveAllAnnotations&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Preserve RuntimeInvisibleAnnotations as well as RuntimeVisibleAnnotations&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="LazyBootClassLoader"&gt;&lt;/a&gt;&lt;a href="#LazyBootClassLoader"&gt;LazyBootClassLoader&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enable/disable lazy opening of boot class path entries&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseBiasedLocking"&gt;&lt;/a&gt;&lt;a href="#UseBiasedLocking"&gt;UseBiasedLocking&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enable biased locking in JVM&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="BiasedLockingStartupDelay"&gt;&lt;/a&gt;&lt;a href="#BiasedLockingStartupDelay"&gt;BiasedLockingStartupDelay&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of milliseconds to wait before enabling biased locking&lt;/td&gt;&lt;td&gt;4000&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="BiasedLockingBulkRebiasThreshold"&gt;&lt;/a&gt;&lt;a href="#BiasedLockingBulkRebiasThreshold"&gt;BiasedLockingBulkRebiasThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Threshold of number of revocations per type to try to rebias all objects in the heap of that type&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="BiasedLockingBulkRevokeThreshold"&gt;&lt;/a&gt;&lt;a href="#BiasedLockingBulkRevokeThreshold"&gt;BiasedLockingBulkRevokeThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Threshold of number of revocations per type to permanently revoke biases of all objects in the heap of that type&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="BiasedLockingDecayTime"&gt;&lt;/a&gt;&lt;a href="#BiasedLockingDecayTime"&gt;BiasedLockingDecayTime&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Decay time (in milliseconds) to re-enable bulk rebiasing of a type after previous bulk rebias&lt;/td&gt;&lt;td&gt;25000&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceJVMTI"&gt;&lt;/a&gt;&lt;a href="#TraceJVMTI"&gt;TraceJVMTI&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace flags for JVMTI functions and events&lt;/td&gt;&lt;td&gt;""&lt;/td&gt;&lt;td&gt;ccstr&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="StressLdcRewrite"&gt;&lt;/a&gt;&lt;a href="#StressLdcRewrite"&gt;StressLdcRewrite&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Force ldc -&amp;gt; ldc_w rewrite during RedefineClasses&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceRedefineClasses"&gt;&lt;/a&gt;&lt;a href="#TraceRedefineClasses"&gt;TraceRedefineClasses&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace level for JVMTI RedefineClasses&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyMergedCPBytecodes"&gt;&lt;/a&gt;&lt;a href="#VerifyMergedCPBytecodes"&gt;VerifyMergedCPBytecodes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify bytecodes after RedefineClasses constant pool merging&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="HPILibPath"&gt;&lt;/a&gt;&lt;a href="#HPILibPath"&gt;HPILibPath&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Specify alternate path to HPI library&lt;/td&gt;&lt;td&gt;""&lt;/td&gt;&lt;td&gt;ccstr&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceClassResolution"&gt;&lt;/a&gt;&lt;a href="#TraceClassResolution"&gt;TraceClassResolution&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace all constant pool resolutions (for debugging)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceBiasedLocking"&gt;&lt;/a&gt;&lt;a href="#TraceBiasedLocking"&gt;TraceBiasedLocking&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace biased locking in JVM&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceMonitorInflation"&gt;&lt;/a&gt;&lt;a href="#TraceMonitorInflation"&gt;TraceMonitorInflation&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace monitor inflation in JVM&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="Use486InstrsOnly"&gt;&lt;/a&gt;&lt;a href="#Use486InstrsOnly"&gt;Use486InstrsOnly&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use 80486 Compliant instruction subset&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseSerialGC"&gt;&lt;/a&gt;&lt;a href="#UseSerialGC"&gt;UseSerialGC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Tells whether the VM should use serial garbage collector&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseParallelGC"&gt;&lt;/a&gt;&lt;a href="#UseParallelGC"&gt;UseParallelGC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use the Parallel Scavenge garbage collector&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseParallelOldGC"&gt;&lt;/a&gt;&lt;a href="#UseParallelOldGC"&gt;UseParallelOldGC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use the Parallel Old garbage collector&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseParallelOldGCCompacting"&gt;&lt;/a&gt;&lt;a href="#UseParallelOldGCCompacting"&gt;UseParallelOldGCCompacting&lt;/a&gt;&lt;/td&gt;&lt;td&gt;In the Parallel Old garbage collector use parallel compaction&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseParallelDensePrefixUpdate"&gt;&lt;/a&gt;&lt;a href="#UseParallelDensePrefixUpdate"&gt;UseParallelDensePrefixUpdate&lt;/a&gt;&lt;/td&gt;&lt;td&gt;In the Parallel Old garbage collector use parallel dense" prefix update&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="HeapMaximumCompactionInterval"&gt;&lt;/a&gt;&lt;a href="#HeapMaximumCompactionInterval"&gt;HeapMaximumCompactionInterval&lt;/a&gt;&lt;/td&gt;&lt;td&gt;How often should we maximally compact the heap (not allowing any dead space)&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="HeapFirstMaximumCompactionCount"&gt;&lt;/a&gt;&lt;a href="#HeapFirstMaximumCompactionCount"&gt;HeapFirstMaximumCompactionCount&lt;/a&gt;&lt;/td&gt;&lt;td&gt;The collection count for the first maximum compaction&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="UseMaximumCompactionOnSystemGC"&gt;&lt;/a&gt;&lt;a href="#UseMaximumCompactionOnSystemGC"&gt;UseMaximumCompactionOnSystemGC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;In the Parallel Old garbage collector maximum compaction for a system GC&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="ParallelOldDeadWoodLimiterMean"&gt;&lt;/a&gt;&lt;a href="#ParallelOldDeadWoodLimiterMean"&gt;ParallelOldDeadWoodLimiterMean&lt;/a&gt;&lt;/td&gt;&lt;td&gt;The mean used by the par compact dead wood" limiter (a number between 0-100).&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="ParallelOldDeadWoodLimiterStdDev"&gt;&lt;/a&gt;&lt;a href="#ParallelOldDeadWoodLimiterStdDev"&gt;ParallelOldDeadWoodLimiterStdDev&lt;/a&gt;&lt;/td&gt;&lt;td&gt;The standard deviation used by the par compact dead wood" limiter (a number between 0-100).&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseParallelOldGCDensePrefix"&gt;&lt;/a&gt;&lt;a href="#UseParallelOldGCDensePrefix"&gt;UseParallelOldGCDensePrefix&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use a dense prefix with the Parallel Old garbage collector&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ParallelGCThreads"&gt;&lt;/a&gt;&lt;a href="#ParallelGCThreads"&gt;ParallelGCThreads&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of parallel threads parallel gc will use&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ParallelCMSThreads"&gt;&lt;/a&gt;&lt;a href="#ParallelCMSThreads"&gt;ParallelCMSThreads&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Max number of threads CMS will use for concurrent work&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="YoungPLABSize"&gt;&lt;/a&gt;&lt;a href="#YoungPLABSize"&gt;YoungPLABSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Size of young gen promotion labs (in HeapWords)&lt;/td&gt;&lt;td&gt;4096&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="OldPLABSize"&gt;&lt;/a&gt;&lt;a href="#OldPLABSize"&gt;OldPLABSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Size of old gen promotion labs (in HeapWords).&amp;nbsp;&amp;nbsp;See good explanation about that parameter&amp;nbsp;&lt;a href="http://aragozin.blogspot.com/2011/10/java-cg-hotspots-cms-and-heap.html"&gt;here&lt;/a&gt;.&lt;/td&gt;&lt;td&gt;1024&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="GCTaskTimeStampEntries"&gt;&lt;/a&gt;&lt;a href="#GCTaskTimeStampEntries"&gt;GCTaskTimeStampEntries&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of time stamp entries per gc worker thread&lt;/td&gt;&lt;td&gt;200&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AlwaysTenure"&gt;&lt;/a&gt;&lt;a href="#AlwaysTenure"&gt;AlwaysTenure&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Always tenure objects in eden. (ParallelGC only)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="NeverTenure"&gt;&lt;/a&gt;&lt;a href="#NeverTenure"&gt;NeverTenure&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Never tenure objects in eden, May tenure on overflow" (ParallelGC only)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ScavengeBeforeFullGC"&gt;&lt;/a&gt;&lt;a href="#ScavengeBeforeFullGC"&gt;ScavengeBeforeFullGC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Scavenge youngest generation before each full GC," used with UseParallelGC&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseConcMarkSweepGC"&gt;&lt;/a&gt;&lt;a href="#UseConcMarkSweepGC"&gt;UseConcMarkSweepGC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use Concurrent Mark-Sweep GC in the old generation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ExplicitGCInvokesConcurrent"&gt;&lt;/a&gt;&lt;a href="#ExplicitGCInvokesConcurrent"&gt;ExplicitGCInvokesConcurrent&lt;/a&gt;&lt;/td&gt;&lt;td&gt;A System.gc() request invokes a concurrent collection;" (effective only when UseConcMarkSweepGC)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseCMSBestFit"&gt;&lt;/a&gt;&lt;a href="#UseCMSBestFit"&gt;UseCMSBestFit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use CMS best fit allocation strategy&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseCMSCollectionPassing"&gt;&lt;/a&gt;&lt;a href="#UseCMSCollectionPassing"&gt;UseCMSCollectionPassing&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use passing of collection from background to foreground&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseParNewGC"&gt;&lt;/a&gt;&lt;a href="#UseParNewGC"&gt;UseParNewGC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use parallel threads in the new generation.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ParallelGCVerbose"&gt;&lt;/a&gt;&lt;a href="#ParallelGCVerbose"&gt;ParallelGCVerbose&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verbose output for parallel GC.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ParallelGCBufferWastePct"&gt;&lt;/a&gt;&lt;a href="#ParallelGCBufferWastePct"&gt;ParallelGCBufferWastePct&lt;/a&gt;&lt;/td&gt;&lt;td&gt;wasted fraction of parallel allocation buffer.&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ParallelGCRetainPLAB"&gt;&lt;/a&gt;&lt;a href="#ParallelGCRetainPLAB"&gt;ParallelGCRetainPLAB&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Retain parallel allocation buffers across scavenges.&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TargetPLABWastePct"&gt;&lt;/a&gt;&lt;a href="#TargetPLABWastePct"&gt;TargetPLABWastePct&lt;/a&gt;&lt;/td&gt;&lt;td&gt;target wasted space in last buffer as pct of overall allocation&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PLABWeight"&gt;&lt;/a&gt;&lt;a href="#PLABWeight"&gt;PLABWeight&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Percentage (0-100) used to weight the current sample when" computing exponentially decaying average for ResizePLAB.&lt;/td&gt;&lt;td&gt;75&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ResizePLAB"&gt;&lt;/a&gt;&lt;a href="#ResizePLAB"&gt;ResizePLAB&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Dynamically resize (survivor space) promotion labs&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintPLAB"&gt;&lt;/a&gt;&lt;a href="#PrintPLAB"&gt;PrintPLAB&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print (survivor space) promotion labs sizing decisions&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ParGCArrayScanChunk"&gt;&lt;/a&gt;&lt;a href="#ParGCArrayScanChunk"&gt;ParGCArrayScanChunk&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Scan a subset and push remainder, if array is bigger than this&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="ParGCDesiredObjsFromOverflowList"&gt;&lt;/a&gt;&lt;a href="#ParGCDesiredObjsFromOverflowList"&gt;ParGCDesiredObjsFromOverflowList&lt;/a&gt;&lt;/td&gt;&lt;td&gt;The desired number of objects to claim from the overflow list&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSParPromoteBlocksToClaim"&gt;&lt;/a&gt;&lt;a href="#CMSParPromoteBlocksToClaim"&gt;CMSParPromoteBlocksToClaim&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of blocks to attempt to claim when refilling CMS LAB for parallel GC.&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AlwaysPreTouch"&gt;&lt;/a&gt;&lt;a href="#AlwaysPreTouch"&gt;AlwaysPreTouch&lt;/a&gt;&lt;/td&gt;&lt;td&gt;It forces all freshly committed pages to be pre-touched.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSUseOldDefaults"&gt;&lt;/a&gt;&lt;a href="#CMSUseOldDefaults"&gt;CMSUseOldDefaults&lt;/a&gt;&lt;/td&gt;&lt;td&gt;A flag temporarily introduced to allow reverting to some older" default settings; older as of 6.0&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSYoungGenPerWorker"&gt;&lt;/a&gt;&lt;a href="#CMSYoungGenPerWorker"&gt;CMSYoungGenPerWorker&lt;/a&gt;&lt;/td&gt;&lt;td&gt;The amount of young gen chosen by default per GC worker thread available&lt;/td&gt;&lt;td&gt;16*M&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSIncrementalMode"&gt;&lt;/a&gt;&lt;a href="#CMSIncrementalMode"&gt;CMSIncrementalMode&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Whether CMS GC should operate in \"incremental\" mode&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSIncrementalDutyCycle"&gt;&lt;/a&gt;&lt;a href="#CMSIncrementalDutyCycle"&gt;CMSIncrementalDutyCycle&lt;/a&gt;&lt;/td&gt;&lt;td&gt;CMS incremental mode duty cycle (a percentage, 0-100). If" CMSIncrementalPacing is enabled, then this is just the initial" value&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSIncrementalPacing"&gt;&lt;/a&gt;&lt;a href="#CMSIncrementalPacing"&gt;CMSIncrementalPacing&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Whether the CMS incremental mode duty cycle should be automatically adjusted&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSIncrementalDutyCycleMin"&gt;&lt;/a&gt;&lt;a href="#CMSIncrementalDutyCycleMin"&gt;CMSIncrementalDutyCycleMin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Lower bound on the duty cycle when CMSIncrementalPacing is" enabled (a percentage, 0-100).&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSIncrementalSafetyFactor"&gt;&lt;/a&gt;&lt;a href="#CMSIncrementalSafetyFactor"&gt;CMSIncrementalSafetyFactor&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Percentage (0-100) used to add conservatism when computing the" duty cycle.&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSIncrementalOffset"&gt;&lt;/a&gt;&lt;a href="#CMSIncrementalOffset"&gt;CMSIncrementalOffset&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Percentage (0-100) by which the CMS incremental mode duty cycle" is shifted to the right within the period between young GCs&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSExpAvgFactor"&gt;&lt;/a&gt;&lt;a href="#CMSExpAvgFactor"&gt;CMSExpAvgFactor&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Percentage (0-100) used to weight the current sample when" computing exponential averages for CMS statistics.&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMS_FLSWeight"&gt;&lt;/a&gt;&lt;a href="#CMS_FLSWeight"&gt;CMS_FLSWeight&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Percentage (0-100) used to weight the current sample when" computing exponentially decating averages for CMS FLS statistics.&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMS_FLSPadding"&gt;&lt;/a&gt;&lt;a href="#CMS_FLSPadding"&gt;CMS_FLSPadding&lt;/a&gt;&lt;/td&gt;&lt;td&gt;The multiple of deviation from mean to use for buffering" against volatility in free list demand.&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="FLSCoalescePolicy"&gt;&lt;/a&gt;&lt;a href="#FLSCoalescePolicy"&gt;FLSCoalescePolicy&lt;/a&gt;&lt;/td&gt;&lt;td&gt;CMS: Aggression level for coalescing, increasing from 0 to 4&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMS_SweepWeight"&gt;&lt;/a&gt;&lt;a href="#CMS_SweepWeight"&gt;CMS_SweepWeight&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Percentage (0-100) used to weight the current sample when" computing exponentially decaying average for inter-sweep duration.&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMS_SweepPadding"&gt;&lt;/a&gt;&lt;a href="#CMS_SweepPadding"&gt;CMS_SweepPadding&lt;/a&gt;&lt;/td&gt;&lt;td&gt;The multiple of deviation from mean to use for buffering" against volatility in inter-sweep duration.&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMS_SweepTimerThresholdMillis"&gt;&lt;/a&gt;&lt;a href="#CMS_SweepTimerThresholdMillis"&gt;CMS_SweepTimerThresholdMillis&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Skip block flux-rate sampling for an epoch unless inter-sweep duration exceeds this threhold in milliseconds&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSClassUnloadingEnabled"&gt;&lt;/a&gt;&lt;a href="#CMSClassUnloadingEnabled"&gt;CMSClassUnloadingEnabled&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Whether class unloading enabled when using CMS GC&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSCompactWhenClearAllSoftRefs"&gt;&lt;/a&gt;&lt;a href="#CMSCompactWhenClearAllSoftRefs"&gt;CMSCompactWhenClearAllSoftRefs&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Compact when asked to collect CMS gen with clear_all_soft_refs&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseCMSCompactAtFullCollection"&gt;&lt;/a&gt;&lt;a href="#UseCMSCompactAtFullCollection"&gt;UseCMSCompactAtFullCollection&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use mark sweep compact at full collections&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSFullGCsBeforeCompaction"&gt;&lt;/a&gt;&lt;a href="#CMSFullGCsBeforeCompaction"&gt;CMSFullGCsBeforeCompaction&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of CMS full collection done before compaction if &amp;gt; 0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSIndexedFreeListReplenish"&gt;&lt;/a&gt;&lt;a href="#CMSIndexedFreeListReplenish"&gt;CMSIndexedFreeListReplenish&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Replenish and indexed free list with this number of chunks&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSLoopWarn"&gt;&lt;/a&gt;&lt;a href="#CMSLoopWarn"&gt;CMSLoopWarn&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Warn in case of excessive CMS looping&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSMarkStackSize"&gt;&lt;/a&gt;&lt;a href="#CMSMarkStackSize"&gt;CMSMarkStackSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Size of CMS marking stack&lt;/td&gt;&lt;td&gt;32*K&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSMarkStackSizeMax"&gt;&lt;/a&gt;&lt;a href="#CMSMarkStackSizeMax"&gt;CMSMarkStackSizeMax&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Max size of CMS marking stack&lt;/td&gt;&lt;td&gt;4*M&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSMaxAbortablePrecleanLoops"&gt;&lt;/a&gt;&lt;a href="#CMSMaxAbortablePrecleanLoops"&gt;CMSMaxAbortablePrecleanLoops&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Temporary, subject to experimentation)" Maximum number of abortable preclean iterations, if &amp;gt; 0&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSMaxAbortablePrecleanTime"&gt;&lt;/a&gt;&lt;a href="#CMSMaxAbortablePrecleanTime"&gt;CMSMaxAbortablePrecleanTime&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Temporary, subject to experimentation)" Maximum time in abortable preclean in ms&lt;/td&gt;&lt;td&gt;5000&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="CMSAbortablePrecleanMinWorkPerIteration"&gt;&lt;/a&gt;&lt;a href="#CMSAbortablePrecleanMinWorkPerIteration"&gt;CMSAbortablePrecleanMinWorkPerIteration&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Temporary, subject to experimentation)" Nominal minimum work per abortable preclean iteration&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSAbortablePrecleanWaitMillis"&gt;&lt;/a&gt;&lt;a href="#CMSAbortablePrecleanWaitMillis"&gt;CMSAbortablePrecleanWaitMillis&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Temporary, subject to experimentation)" Time that we sleep between iterations when not given" enough work per iteration&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSRescanMultiple"&gt;&lt;/a&gt;&lt;a href="#CMSRescanMultiple"&gt;CMSRescanMultiple&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Size (in cards) of CMS parallel rescan task&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSConcMarkMultiple"&gt;&lt;/a&gt;&lt;a href="#CMSConcMarkMultiple"&gt;CMSConcMarkMultiple&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Size (in cards) of CMS concurrent MT marking task&lt;/td&gt;&lt;td&gt;32&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSRevisitStackSize"&gt;&lt;/a&gt;&lt;a href="#CMSRevisitStackSize"&gt;CMSRevisitStackSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Size of CMS KlassKlass revisit stack&lt;/td&gt;&lt;td&gt;1*M&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSAbortSemantics"&gt;&lt;/a&gt;&lt;a href="#CMSAbortSemantics"&gt;CMSAbortSemantics&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Whether abort-on-overflow semantics is implemented&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSParallelRemarkEnabled"&gt;&lt;/a&gt;&lt;a href="#CMSParallelRemarkEnabled"&gt;CMSParallelRemarkEnabled&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Whether parallel remark enabled (only if ParNewGC)&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="CMSParallelSurvivorRemarkEnabled"&gt;&lt;/a&gt;&lt;a href="#CMSParallelSurvivorRemarkEnabled"&gt;CMSParallelSurvivorRemarkEnabled&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Whether parallel remark of survivor space" enabled (effective only if CMSParallelRemarkEnabled)&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSPLABRecordAlways"&gt;&lt;/a&gt;&lt;a href="#CMSPLABRecordAlways"&gt;CMSPLABRecordAlways&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Whether to always record survivor space PLAB bdries" (effective only if CMSParallelSurvivorRemarkEnabled)&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSConcurrentMTEnabled"&gt;&lt;/a&gt;&lt;a href="#CMSConcurrentMTEnabled"&gt;CMSConcurrentMTEnabled&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Whether multi-threaded concurrent work enabled (if ParNewGC)&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSPermGenPrecleaningEnabled"&gt;&lt;/a&gt;&lt;a href="#CMSPermGenPrecleaningEnabled"&gt;CMSPermGenPrecleaningEnabled&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Whether concurrent precleaning enabled in perm gen" (effective only when CMSPrecleaningEnabled is true)&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSPermGenSweepingEnabled"&gt;&lt;/a&gt;&lt;a href="#CMSPermGenSweepingEnabled"&gt;CMSPermGenSweepingEnabled&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Whether sweeping of perm gen is enabled&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSPrecleaningEnabled"&gt;&lt;/a&gt;&lt;a href="#CMSPrecleaningEnabled"&gt;CMSPrecleaningEnabled&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Whether concurrent precleaning enabled&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSPrecleanIter"&gt;&lt;/a&gt;&lt;a href="#CMSPrecleanIter"&gt;CMSPrecleanIter&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Maximum number of precleaning iteration passes&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSPrecleanNumerator"&gt;&lt;/a&gt;&lt;a href="#CMSPrecleanNumerator"&gt;CMSPrecleanNumerator&lt;/a&gt;&lt;/td&gt;&lt;td&gt;CMSPrecleanNumerator:CMSPrecleanDenominator yields convergence" ratio&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSPrecleanDenominator"&gt;&lt;/a&gt;&lt;a href="#CMSPrecleanDenominator"&gt;CMSPrecleanDenominator&lt;/a&gt;&lt;/td&gt;&lt;td&gt;CMSPrecleanNumerator:CMSPrecleanDenominator yields convergence" ratio&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSPrecleanRefLists1"&gt;&lt;/a&gt;&lt;a href="#CMSPrecleanRefLists1"&gt;CMSPrecleanRefLists1&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Preclean ref lists during (initial) preclean phase&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSPrecleanRefLists2"&gt;&lt;/a&gt;&lt;a href="#CMSPrecleanRefLists2"&gt;CMSPrecleanRefLists2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Preclean ref lists during abortable preclean phase&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSPrecleanSurvivors1"&gt;&lt;/a&gt;&lt;a href="#CMSPrecleanSurvivors1"&gt;CMSPrecleanSurvivors1&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Preclean survivors during (initial) preclean phase&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSPrecleanSurvivors2"&gt;&lt;/a&gt;&lt;a href="#CMSPrecleanSurvivors2"&gt;CMSPrecleanSurvivors2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Preclean survivors during abortable preclean phase&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSPrecleanThreshold"&gt;&lt;/a&gt;&lt;a href="#CMSPrecleanThreshold"&gt;CMSPrecleanThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Don't re-iterate if #dirty cards less than this&lt;/td&gt;&lt;td&gt;1000&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSCleanOnEnter"&gt;&lt;/a&gt;&lt;a href="#CMSCleanOnEnter"&gt;CMSCleanOnEnter&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Clean-on-enter optimization for reducing number of dirty cards&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSRemarkVerifyVariant"&gt;&lt;/a&gt;&lt;a href="#CMSRemarkVerifyVariant"&gt;CMSRemarkVerifyVariant&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Choose variant (1,2) of verification following remark&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="CMSScheduleRemarkEdenSizeThreshold"&gt;&lt;/a&gt;&lt;a href="#CMSScheduleRemarkEdenSizeThreshold"&gt;CMSScheduleRemarkEdenSizeThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;If Eden used is below this value, don't try to schedule remark&lt;/td&gt;&lt;td&gt;2*M&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="CMSScheduleRemarkEdenPenetration"&gt;&lt;/a&gt;&lt;a href="#CMSScheduleRemarkEdenPenetration"&gt;CMSScheduleRemarkEdenPenetration&lt;/a&gt;&lt;/td&gt;&lt;td&gt;The Eden occupancy % at which to try and schedule remark pause&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="CMSScheduleRemarkSamplingRatio"&gt;&lt;/a&gt;&lt;a href="#CMSScheduleRemarkSamplingRatio"&gt;CMSScheduleRemarkSamplingRatio&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Start sampling Eden top at least before yg occupancy reaches" 1/&lt;ratio&gt;&amp;nbsp;of the size at which we plan to schedule remark&lt;/ratio&gt;&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSSamplingGrain"&gt;&lt;/a&gt;&lt;a href="#CMSSamplingGrain"&gt;CMSSamplingGrain&lt;/a&gt;&lt;/td&gt;&lt;td&gt;The minimum distance between eden samples for CMS (see above)&lt;/td&gt;&lt;td&gt;16*K&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSScavengeBeforeRemark"&gt;&lt;/a&gt;&lt;a href="#CMSScavengeBeforeRemark"&gt;CMSScavengeBeforeRemark&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Attempt scavenge before the CMS remark step&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSWorkQueueDrainThreshold"&gt;&lt;/a&gt;&lt;a href="#CMSWorkQueueDrainThreshold"&gt;CMSWorkQueueDrainThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Don't drain below this size per parallel worker/thief&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSWaitDuration"&gt;&lt;/a&gt;&lt;a href="#CMSWaitDuration"&gt;CMSWaitDuration&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Time in milliseconds that CMS thread waits for young GC&lt;/td&gt;&lt;td&gt;2000&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSYield"&gt;&lt;/a&gt;&lt;a href="#CMSYield"&gt;CMSYield&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Yield between steps of concurrent mark &amp;amp; sweep&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSBitMapYieldQuantum"&gt;&lt;/a&gt;&lt;a href="#CMSBitMapYieldQuantum"&gt;CMSBitMapYieldQuantum&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Bitmap operations should process at most this many bits" between yields&lt;/td&gt;&lt;td&gt;10*M&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="BlockOffsetArrayUseUnallocatedBlock"&gt;&lt;/a&gt;&lt;a href="#BlockOffsetArrayUseUnallocatedBlock"&gt;BlockOffsetArrayUseUnallocatedBlock&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Maintain _unallocated_block in BlockOffsetArray" (currently applicable only to CMS collector)&lt;/td&gt;&lt;td&gt;trueInDebug&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="RefDiscoveryPolicy"&gt;&lt;/a&gt;&lt;a href="#RefDiscoveryPolicy"&gt;RefDiscoveryPolicy&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Whether reference-based(0) or referent-based(1)&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ParallelRefProcEnabled"&gt;&lt;/a&gt;&lt;a href="#ParallelRefProcEnabled"&gt;ParallelRefProcEnabled&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enable parallel reference processing whenever possible&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSTriggerRatio"&gt;&lt;/a&gt;&lt;a href="#CMSTriggerRatio"&gt;CMSTriggerRatio&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Percentage of MinHeapFreeRatio in CMS generation that is allocated before a CMS collection cycle commences&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSBootstrapOccupancy"&gt;&lt;/a&gt;&lt;a href="#CMSBootstrapOccupancy"&gt;CMSBootstrapOccupancy&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Percentage CMS generation occupancy at which to initiate CMS collection for bootstrapping collection stats&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSInitiatingOccupancyFraction"&gt;&lt;/a&gt;&lt;a href="#CMSInitiatingOccupancyFraction"&gt;CMSInitiatingOccupancyFraction&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Percentage CMS generation occupancy to start a CMS collection cycle (A negative value means that CMSTirggerRatio is used). See good explanation about that parameter &lt;a href="http://aragozin.blogspot.com/2011/10/java-cg-hotspots-cms-and-heap.html"&gt;here&lt;/a&gt;.&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseCMSInitiatingOccupancyOnly"&gt;&lt;/a&gt;&lt;a href="#UseCMSInitiatingOccupancyOnly"&gt;UseCMSInitiatingOccupancyOnly&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Only use occupancy as a crierion for starting a CMS collection.&amp;nbsp;&amp;nbsp;See good explanation about that parameter&amp;nbsp;&lt;a href="http://aragozin.blogspot.com/2011/10/java-cg-hotspots-cms-and-heap.html"&gt;here&lt;/a&gt;.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="HandlePromotionFailure"&gt;&lt;/a&gt;&lt;a href="#HandlePromotionFailure"&gt;HandlePromotionFailure&lt;/a&gt;&lt;/td&gt;&lt;td&gt;The youngest generation collection does not require" a guarantee of full promotion of all live objects.&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PreserveMarkStackSize"&gt;&lt;/a&gt;&lt;a href="#PreserveMarkStackSize"&gt;PreserveMarkStackSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Size for stack used in promotion failure handling&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ZeroTLAB"&gt;&lt;/a&gt;&lt;a href="#ZeroTLAB"&gt;ZeroTLAB&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Zero out the newly created &lt;a href="#TLAB"&gt;TLAB&lt;/a&gt;&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintTLAB"&gt;&lt;/a&gt;&lt;a href="#PrintTLAB"&gt;PrintTLAB&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print various &lt;a href="#TLAB"&gt;TLAB&lt;/a&gt; related information&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TLABStats"&gt;&lt;/a&gt;&lt;a href="#TLABStats"&gt;TLABStats&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print various &lt;a href="#TLAB"&gt;TLAB&lt;/a&gt; related information&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AlwaysActAsServerClassMachine"&gt;&lt;/a&gt;&lt;a href="#AlwaysActAsServerClassMachine"&gt;AlwaysActAsServerClassMachine&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Always act like a server-class machine&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DefaultMaxRAM"&gt;&lt;/a&gt;&lt;a href="#DefaultMaxRAM"&gt;DefaultMaxRAM&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Maximum real memory size for setting server class heap size&lt;/td&gt;&lt;td&gt;G&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DefaultMaxRAMFraction"&gt;&lt;/a&gt;&lt;a href="#DefaultMaxRAMFraction"&gt;DefaultMaxRAMFraction&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Fraction (1/n) of real memory used for server class max heap&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DefaultInitialRAMFraction"&gt;&lt;/a&gt;&lt;a href="#DefaultInitialRAMFraction"&gt;DefaultInitialRAMFraction&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Fraction (1/n) of real memory used for server class initial heap&lt;/td&gt;&lt;td&gt;64&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseAutoGCSelectPolicy"&gt;&lt;/a&gt;&lt;a href="#UseAutoGCSelectPolicy"&gt;UseAutoGCSelectPolicy&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use automatic collection selection policy&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AutoGCSelectPauseMillis"&gt;&lt;/a&gt;&lt;a href="#AutoGCSelectPauseMillis"&gt;AutoGCSelectPauseMillis&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Automatic GC selection pause threshhold in ms&lt;/td&gt;&lt;td&gt;5000&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseAdaptiveSizePolicy"&gt;&lt;/a&gt;&lt;a href="#UseAdaptiveSizePolicy"&gt;UseAdaptiveSizePolicy&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use adaptive generation sizing policies&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UsePSAdaptiveSurvivorSizePolicy"&gt;&lt;/a&gt;&lt;a href="#UsePSAdaptiveSurvivorSizePolicy"&gt;UsePSAdaptiveSurvivorSizePolicy&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use adaptive survivor sizing policies&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="UseAdaptiveGenerationSizePolicyAtMinorCollection"&gt;&lt;/a&gt;&lt;a href="#UseAdaptiveGenerationSizePolicyAtMinorCollection"&gt;UseAdaptiveGenerationSizePolicyAtMinorCollection&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use adaptive young-old sizing policies at minor collections&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="UseAdaptiveGenerationSizePolicyAtMajorCollection"&gt;&lt;/a&gt;&lt;a href="#UseAdaptiveGenerationSizePolicyAtMajorCollection"&gt;UseAdaptiveGenerationSizePolicyAtMajorCollection&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use adaptive young-old sizing policies at major collections&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="UseAdaptiveSizePolicyWithSystemGC"&gt;&lt;/a&gt;&lt;a href="#UseAdaptiveSizePolicyWithSystemGC"&gt;UseAdaptiveSizePolicyWithSystemGC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use statistics from System.GC for adaptive size policy&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseAdaptiveGCBoundary"&gt;&lt;/a&gt;&lt;a href="#UseAdaptiveGCBoundary"&gt;UseAdaptiveGCBoundary&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Allow young-old boundary to move&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AdaptiveSizeThroughPutPolicy"&gt;&lt;/a&gt;&lt;a href="#AdaptiveSizeThroughPutPolicy"&gt;AdaptiveSizeThroughPutPolicy&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Policy for changeing generation size for throughput goals&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AdaptiveSizePausePolicy"&gt;&lt;/a&gt;&lt;a href="#AdaptiveSizePausePolicy"&gt;AdaptiveSizePausePolicy&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Policy for changing generation size for pause goals&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AdaptiveSizePolicyInitializingSteps"&gt;&lt;/a&gt;&lt;a href="#AdaptiveSizePolicyInitializingSteps"&gt;AdaptiveSizePolicyInitializingSteps&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of steps where heuristics is used before data is used&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AdaptiveSizePolicyOutputInterval"&gt;&lt;/a&gt;&lt;a href="#AdaptiveSizePolicyOutputInterval"&gt;AdaptiveSizePolicyOutputInterval&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Collecton interval for printing information, zero =&amp;gt; never&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="UseAdaptiveSizePolicyFootprintGoal"&gt;&lt;/a&gt;&lt;a href="#UseAdaptiveSizePolicyFootprintGoal"&gt;UseAdaptiveSizePolicyFootprintGoal&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use adaptive minimum footprint as a goal&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AdaptiveSizePolicyWeight"&gt;&lt;/a&gt;&lt;a href="#AdaptiveSizePolicyWeight"&gt;AdaptiveSizePolicyWeight&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Weight given to exponential resizing, between 0 and 100&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AdaptiveTimeWeight"&gt;&lt;/a&gt;&lt;a href="#AdaptiveTimeWeight"&gt;AdaptiveTimeWeight&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Weight given to time in adaptive policy, between 0 and 100&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PausePadding"&gt;&lt;/a&gt;&lt;a href="#PausePadding"&gt;PausePadding&lt;/a&gt;&lt;/td&gt;&lt;td&gt;How much buffer to keep for pause time&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PromotedPadding"&gt;&lt;/a&gt;&lt;a href="#PromotedPadding"&gt;PromotedPadding&lt;/a&gt;&lt;/td&gt;&lt;td&gt;How much buffer to keep for promotion failure&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SurvivorPadding"&gt;&lt;/a&gt;&lt;a href="#SurvivorPadding"&gt;SurvivorPadding&lt;/a&gt;&lt;/td&gt;&lt;td&gt;How much buffer to keep for survivor overflow&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AdaptivePermSizeWeight"&gt;&lt;/a&gt;&lt;a href="#AdaptivePermSizeWeight"&gt;AdaptivePermSizeWeight&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Weight for perm gen exponential resizing, between 0 and 100&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PermGenPadding"&gt;&lt;/a&gt;&lt;a href="#PermGenPadding"&gt;PermGenPadding&lt;/a&gt;&lt;/td&gt;&lt;td&gt;How much buffer to keep for perm gen sizing&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ThresholdTolerance"&gt;&lt;/a&gt;&lt;a href="#ThresholdTolerance"&gt;ThresholdTolerance&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Allowed collection cost difference between generations&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="AdaptiveSizePolicyCollectionCostMargin"&gt;&lt;/a&gt;&lt;a href="#AdaptiveSizePolicyCollectionCostMargin"&gt;AdaptiveSizePolicyCollectionCostMargin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;If collection costs are within margin, reduce both by full delta&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="YoungGenerationSizeIncrement"&gt;&lt;/a&gt;&lt;a href="#YoungGenerationSizeIncrement"&gt;YoungGenerationSizeIncrement&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Adaptive size percentage change in young generation&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="YoungGenerationSizeSupplement"&gt;&lt;/a&gt;&lt;a href="#YoungGenerationSizeSupplement"&gt;YoungGenerationSizeSupplement&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Supplement to YoungedGenerationSizeIncrement used at startup&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="YoungGenerationSizeSupplementDecay"&gt;&lt;/a&gt;&lt;a href="#YoungGenerationSizeSupplementDecay"&gt;YoungGenerationSizeSupplementDecay&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Decay factor to YoungedGenerationSizeSupplement&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TenuredGenerationSizeIncrement"&gt;&lt;/a&gt;&lt;a href="#TenuredGenerationSizeIncrement"&gt;TenuredGenerationSizeIncrement&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Adaptive size percentage change in tenured generation&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TenuredGenerationSizeSupplement"&gt;&lt;/a&gt;&lt;a href="#TenuredGenerationSizeSupplement"&gt;TenuredGenerationSizeSupplement&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Supplement to TenuredGenerationSizeIncrement used at startup&lt;/td&gt;&lt;td&gt;80&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="TenuredGenerationSizeSupplementDecay"&gt;&lt;/a&gt;&lt;a href="#TenuredGenerationSizeSupplementDecay"&gt;TenuredGenerationSizeSupplementDecay&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Decay factor to TenuredGenerationSizeIncrement&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxGCPauseMillis"&gt;&lt;/a&gt;&lt;a href="#MaxGCPauseMillis"&gt;MaxGCPauseMillis&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Adaptive size policy maximum GC pause time goal in msec&lt;/td&gt;&lt;td&gt;max_uintx&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxGCMinorPauseMillis"&gt;&lt;/a&gt;&lt;a href="#MaxGCMinorPauseMillis"&gt;MaxGCMinorPauseMillis&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Adaptive size policy maximum GC minor pause time goal in msec&lt;/td&gt;&lt;td&gt;max_uintx&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="GCTimeRatio"&gt;&lt;/a&gt;&lt;a href="#GCTimeRatio"&gt;GCTimeRatio&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Adaptive size policy application time to GC time ratio&lt;/td&gt;&lt;td&gt;99&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AdaptiveSizeDecrementScaleFactor"&gt;&lt;/a&gt;&lt;a href="#AdaptiveSizeDecrementScaleFactor"&gt;AdaptiveSizeDecrementScaleFactor&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Adaptive size scale down factor for shrinking&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseAdaptiveSizeDecayMajorGCCost"&gt;&lt;/a&gt;&lt;a href="#UseAdaptiveSizeDecayMajorGCCost"&gt;UseAdaptiveSizeDecayMajorGCCost&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Adaptive size decays the major cost for long major intervals&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="AdaptiveSizeMajorGCDecayTimeScale"&gt;&lt;/a&gt;&lt;a href="#AdaptiveSizeMajorGCDecayTimeScale"&gt;AdaptiveSizeMajorGCDecayTimeScale&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Time scale over which major costs decay&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MinSurvivorRatio"&gt;&lt;/a&gt;&lt;a href="#MinSurvivorRatio"&gt;MinSurvivorRatio&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Minimum ratio of young generation/survivor space size&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InitialSurvivorRatio"&gt;&lt;/a&gt;&lt;a href="#InitialSurvivorRatio"&gt;InitialSurvivorRatio&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Initial ratio of eden/survivor space size&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="BaseFootPrintEstimate"&gt;&lt;/a&gt;&lt;a href="#BaseFootPrintEstimate"&gt;BaseFootPrintEstimate&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Estimate of footprint other than Java Heap&lt;/td&gt;&lt;td&gt;256*M&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseGCOverheadLimit"&gt;&lt;/a&gt;&lt;a href="#UseGCOverheadLimit"&gt;UseGCOverheadLimit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use policy to limit of proportion of time spent in GC before an OutOfMemory error is thrown&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="GCTimeLimit"&gt;&lt;/a&gt;&lt;a href="#GCTimeLimit"&gt;GCTimeLimit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Limit of proportion of time spent in GC before an OutOfMemory" error is thrown (used with GCHeapFreeLimit)&lt;/td&gt;&lt;td&gt;98&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="GCHeapFreeLimit"&gt;&lt;/a&gt;&lt;a href="#GCHeapFreeLimit"&gt;GCHeapFreeLimit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Minimum percentage of free space after a full GC before an OutOfMemoryError is thrown (used with GCTimeLimit)&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintAdaptiveSizePolicy"&gt;&lt;/a&gt;&lt;a href="#PrintAdaptiveSizePolicy"&gt;PrintAdaptiveSizePolicy&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print information about AdaptiveSizePolicy&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DisableExplicitGC"&gt;&lt;/a&gt;&lt;a href="#DisableExplicitGC"&gt;DisableExplicitGC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Tells whether calling System.gc() does a full GC&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CollectGen0First"&gt;&lt;/a&gt;&lt;a href="#CollectGen0First"&gt;CollectGen0First&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Collect youngest generation before each full GC&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="BindGCTaskThreadsToCPUs"&gt;&lt;/a&gt;&lt;a href="#BindGCTaskThreadsToCPUs"&gt;BindGCTaskThreadsToCPUs&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Bind GCTaskThreads to CPUs if possible&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseGCTaskAffinity"&gt;&lt;/a&gt;&lt;a href="#UseGCTaskAffinity"&gt;UseGCTaskAffinity&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use worker affinity when asking for GCTasks&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ProcessDistributionStride"&gt;&lt;/a&gt;&lt;a href="#ProcessDistributionStride"&gt;ProcessDistributionStride&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Stride through processors when distributing processes&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSCoordinatorYieldSleepCount"&gt;&lt;/a&gt;&lt;a href="#CMSCoordinatorYieldSleepCount"&gt;CMSCoordinatorYieldSleepCount&lt;/a&gt;&lt;/td&gt;&lt;td&gt;number of times the coordinator GC thread will sleep while yielding before giving up and resuming GC&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSYieldSleepCount"&gt;&lt;/a&gt;&lt;a href="#CMSYieldSleepCount"&gt;CMSYieldSleepCount&lt;/a&gt;&lt;/td&gt;&lt;td&gt;number of times a GC thread (minus the coordinator) will sleep while yielding before giving up and resuming GC&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintGCTaskTimeStamps"&gt;&lt;/a&gt;&lt;a href="#PrintGCTaskTimeStamps"&gt;PrintGCTaskTimeStamps&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print timestamps for individual gc worker thread tasks&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceClassLoadingPreorder"&gt;&lt;/a&gt;&lt;a href="#TraceClassLoadingPreorder"&gt;TraceClassLoadingPreorder&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace all classes loaded in order referenced (not loaded)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceGen0Time"&gt;&lt;/a&gt;&lt;a href="#TraceGen0Time"&gt;TraceGen0Time&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace accumulated time for Gen 0 collection&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceGen1Time"&gt;&lt;/a&gt;&lt;a href="#TraceGen1Time"&gt;TraceGen1Time&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace accumulated time for Gen 1 collection&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintTenuringDistribution"&gt;&lt;/a&gt;&lt;a href="#PrintTenuringDistribution"&gt;PrintTenuringDistribution&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print tenuring age information&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintHeapAtSIGBREAK"&gt;&lt;/a&gt;&lt;a href="#PrintHeapAtSIGBREAK"&gt;PrintHeapAtSIGBREAK&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print heap layout in response to SIGBREAK&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceParallelOldGCTasks"&gt;&lt;/a&gt;&lt;a href="#TraceParallelOldGCTasks"&gt;TraceParallelOldGCTasks&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace multithreaded GC activity&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintParallelOldGCPhaseTimes"&gt;&lt;/a&gt;&lt;a href="#PrintParallelOldGCPhaseTimes"&gt;PrintParallelOldGCPhaseTimes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print the time taken by each parallel old gc phase." PrintGCDetails must also be enabled.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CITime"&gt;&lt;/a&gt;&lt;a href="#CITime"&gt;CITime&lt;/a&gt;&lt;/td&gt;&lt;td&gt;collect timing information for compilation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="Inline"&gt;&lt;/a&gt;&lt;a href="#Inline"&gt;Inline&lt;/a&gt;&lt;/td&gt;&lt;td&gt;enable inlining&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ClipInlining"&gt;&lt;/a&gt;&lt;a href="#ClipInlining"&gt;ClipInlining&lt;/a&gt;&lt;/td&gt;&lt;td&gt;clip inlining if aggregate method exceeds DesiredMethodLimit&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseTypeProfile"&gt;&lt;/a&gt;&lt;a href="#UseTypeProfile"&gt;UseTypeProfile&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Check interpreter profile for historically monomorphic calls&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TypeProfileMinimumRatio"&gt;&lt;/a&gt;&lt;a href="#TypeProfileMinimumRatio"&gt;TypeProfileMinimumRatio&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Minimum ratio of profiled majority type to all minority types&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="Tier1UpdateMethodData"&gt;&lt;/a&gt;&lt;a href="#Tier1UpdateMethodData"&gt;Tier1UpdateMethodData&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Update methodDataOops in Tier1-generated code&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintVMOptions"&gt;&lt;/a&gt;&lt;a href="#PrintVMOptions"&gt;PrintVMOptions&lt;/a&gt;&lt;/td&gt;&lt;td&gt;print VM flag settings&lt;/td&gt;&lt;td&gt;trueInDebug&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ErrorFile"&gt;&lt;/a&gt;&lt;a href="#ErrorFile"&gt;ErrorFile&lt;/a&gt;&lt;/td&gt;&lt;td&gt;If an error occurs, save the error data to this file [default: ./hs_err_pid%p.log] (%p replaced with pid)&lt;/td&gt;&lt;td&gt;""&lt;/td&gt;&lt;td&gt;ccstr&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DisplayVMOutputToStderr"&gt;&lt;/a&gt;&lt;a href="#DisplayVMOutputToStderr"&gt;DisplayVMOutputToStderr&lt;/a&gt;&lt;/td&gt;&lt;td&gt;If DisplayVMOutput is true, display all VM output to stderr&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DisplayVMOutputToStdout"&gt;&lt;/a&gt;&lt;a href="#DisplayVMOutputToStdout"&gt;DisplayVMOutputToStdout&lt;/a&gt;&lt;/td&gt;&lt;td&gt;If DisplayVMOutput is true, display all VM output to stdout&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseHeavyMonitors"&gt;&lt;/a&gt;&lt;a href="#UseHeavyMonitors"&gt;UseHeavyMonitors&lt;/a&gt;&lt;/td&gt;&lt;td&gt;use heavyweight instead of lightweight Java monitors&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="RangeCheckElimination"&gt;&lt;/a&gt;&lt;a href="#RangeCheckElimination"&gt;RangeCheckElimination&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Split loop iterations to eliminate range checks&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SplitIfBlocks"&gt;&lt;/a&gt;&lt;a href="#SplitIfBlocks"&gt;SplitIfBlocks&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Clone compares and control flow through merge points to fold some branches&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AggressiveOpts"&gt;&lt;/a&gt;&lt;a href="#AggressiveOpts"&gt;AggressiveOpts&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enable aggressive optimizations - see arguments.cpp&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintInterpreter"&gt;&lt;/a&gt;&lt;a href="#PrintInterpreter"&gt;PrintInterpreter&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Prints the generated interpreter code&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseInterpreter"&gt;&lt;/a&gt;&lt;a href="#UseInterpreter"&gt;UseInterpreter&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use interpreter for non-compiled methods&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseNiagaraInstrs"&gt;&lt;/a&gt;&lt;a href="#UseNiagaraInstrs"&gt;UseNiagaraInstrs&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use Niagara-efficient instruction subset&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseLoopCounter"&gt;&lt;/a&gt;&lt;a href="#UseLoopCounter"&gt;UseLoopCounter&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Increment invocation counter on backward branch&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseFastEmptyMethods"&gt;&lt;/a&gt;&lt;a href="#UseFastEmptyMethods"&gt;UseFastEmptyMethods&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use fast method entry code for empty methods&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseFastAccessorMethods"&gt;&lt;/a&gt;&lt;a href="#UseFastAccessorMethods"&gt;UseFastAccessorMethods&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use fast method entry code for accessor methods&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="EnableJVMPIInstructionStartEvent"&gt;&lt;/a&gt;&lt;a href="#EnableJVMPIInstructionStartEvent"&gt;EnableJVMPIInstructionStartEvent&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enable JVMPI_EVENT_INSTRUCTION_START events - slows down interpretation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="JVMPICheckGCCompatibility"&gt;&lt;/a&gt;&lt;a href="#JVMPICheckGCCompatibility"&gt;JVMPICheckGCCompatibility&lt;/a&gt;&lt;/td&gt;&lt;td&gt;If JVMPI is used, make sure that we are using a JVMPI-compatible garbage collector&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ProfileMaturityPercentage"&gt;&lt;/a&gt;&lt;a href="#ProfileMaturityPercentage"&gt;ProfileMaturityPercentage&lt;/a&gt;&lt;/td&gt;&lt;td&gt;number of method invocations/branches (expressed as % of CompileThreshold) before using the method's profile&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseCompiler"&gt;&lt;/a&gt;&lt;a href="#UseCompiler"&gt;UseCompiler&lt;/a&gt;&lt;/td&gt;&lt;td&gt;use compilation&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseCounterDecay"&gt;&lt;/a&gt;&lt;a href="#UseCounterDecay"&gt;UseCounterDecay&lt;/a&gt;&lt;/td&gt;&lt;td&gt;adjust recompilation counters&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AlwaysCompileLoopMethods"&gt;&lt;/a&gt;&lt;a href="#AlwaysCompileLoopMethods"&gt;AlwaysCompileLoopMethods&lt;/a&gt;&lt;/td&gt;&lt;td&gt;when using recompilation, never interpret methods containing loops&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DontCompileHugeMethods"&gt;&lt;/a&gt;&lt;a href="#DontCompileHugeMethods"&gt;DontCompileHugeMethods&lt;/a&gt;&lt;/td&gt;&lt;td&gt;don't compile methods &amp;gt; HugeMethodLimit&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="EstimateArgEscape"&gt;&lt;/a&gt;&lt;a href="#EstimateArgEscape"&gt;EstimateArgEscape&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Analyze bytecodes to estimate escape state of arguments&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="BCEATraceLevel"&gt;&lt;/a&gt;&lt;a href="#BCEATraceLevel"&gt;BCEATraceLevel&lt;/a&gt;&lt;/td&gt;&lt;td&gt;How much tracing to do of bytecode escape analysis estimates&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxBCEAEstimateLevel"&gt;&lt;/a&gt;&lt;a href="#MaxBCEAEstimateLevel"&gt;MaxBCEAEstimateLevel&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Maximum number of nested calls that are analyzed by BC EA.&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxBCEAEstimateSize"&gt;&lt;/a&gt;&lt;a href="#MaxBCEAEstimateSize"&gt;MaxBCEAEstimateSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Maximum bytecode size of a method to be analyzed by BC EA.&lt;/td&gt;&lt;td&gt;150&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SelfDestructTimer"&gt;&lt;/a&gt;&lt;a href="#SelfDestructTimer"&gt;SelfDestructTimer&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Will cause VM to terminate after a given time (in minutes) (0 means off)&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxJavaStackTraceDepth"&gt;&lt;/a&gt;&lt;a href="#MaxJavaStackTraceDepth"&gt;MaxJavaStackTraceDepth&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Max. no. of lines in the stack trace for Java exceptions (0 means all)&lt;/td&gt;&lt;td&gt;1024&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="NmethodSweepFraction"&gt;&lt;/a&gt;&lt;a href="#NmethodSweepFraction"&gt;NmethodSweepFraction&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of invocations of sweeper to cover all nmethods&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxInlineSize"&gt;&lt;/a&gt;&lt;a href="#MaxInlineSize"&gt;MaxInlineSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;maximum bytecode size of a method to be inlined&lt;/td&gt;&lt;td&gt;35&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ProfileIntervalsTicks"&gt;&lt;/a&gt;&lt;a href="#ProfileIntervalsTicks"&gt;ProfileIntervalsTicks&lt;/a&gt;&lt;/td&gt;&lt;td&gt;# of ticks between printing of interval profile (+ProfileIntervals)&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="EventLogLength"&gt;&lt;/a&gt;&lt;a href="#EventLogLength"&gt;EventLogLength&lt;/a&gt;&lt;/td&gt;&lt;td&gt;maximum nof events in event log&lt;/td&gt;&lt;td&gt;2000&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PerMethodRecompilationCutoff"&gt;&lt;/a&gt;&lt;a href="#PerMethodRecompilationCutoff"&gt;PerMethodRecompilationCutoff&lt;/a&gt;&lt;/td&gt;&lt;td&gt;After recompiling N times, stay in the interpreter (-1=&amp;gt;'Inf')&lt;/td&gt;&lt;td&gt;400&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PerBytecodeRecompilationCutoff"&gt;&lt;/a&gt;&lt;a href="#PerBytecodeRecompilationCutoff"&gt;PerBytecodeRecompilationCutoff&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Per-BCI limit on repeated recompilation (-1=&amp;gt;'Inf')&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PerMethodTrapLimit"&gt;&lt;/a&gt;&lt;a href="#PerMethodTrapLimit"&gt;PerMethodTrapLimit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Limit on traps (of one kind) in a method (includes inlines)&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PerBytecodeTrapLimit"&gt;&lt;/a&gt;&lt;a href="#PerBytecodeTrapLimit"&gt;PerBytecodeTrapLimit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Limit on traps (of one kind) at a particular BCI&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AliasLevel"&gt;&lt;/a&gt;&lt;a href="#AliasLevel"&gt;AliasLevel&lt;/a&gt;&lt;/td&gt;&lt;td&gt;0 for no aliasing, 1 for oop/field/static/array split, 2 for best&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ReadSpinIterations"&gt;&lt;/a&gt;&lt;a href="#ReadSpinIterations"&gt;ReadSpinIterations&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of read attempts before a yield (spin inner loop)&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PreBlockSpin"&gt;&lt;/a&gt;&lt;a href="#PreBlockSpin"&gt;PreBlockSpin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of times to spin in an inflated lock before going to an OS lock&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxHeapSize"&gt;&lt;/a&gt;&lt;a href="#MaxHeapSize"&gt;MaxHeapSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Default maximum size for object heap (in bytes)&lt;/td&gt;&lt;td&gt;ScaleForWordSize (64*M)&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxNewSize"&gt;&lt;/a&gt;&lt;a href="#MaxNewSize"&gt;MaxNewSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Maximum size of new generation (in bytes)&lt;/td&gt;&lt;td&gt;max_uintx&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PretenureSizeThreshold"&gt;&lt;/a&gt;&lt;a href="#PretenureSizeThreshold"&gt;PretenureSizeThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Max size in bytes of objects allocated in DefNew generation&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MinTLABSize"&gt;&lt;/a&gt;&lt;a href="#MinTLABSize"&gt;MinTLABSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Minimum allowed TLAB size (in bytes)&lt;/td&gt;&lt;td&gt;2*K&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TLABAllocationWeight"&gt;&lt;/a&gt;&lt;a href="#TLABAllocationWeight"&gt;TLABAllocationWeight&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Allocation averaging weight&lt;/td&gt;&lt;td&gt;35&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TLABWasteTargetPercent"&gt;&lt;/a&gt;&lt;a href="#TLABWasteTargetPercent"&gt;TLABWasteTargetPercent&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Percentage of Eden that can be wasted&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TLABRefillWasteFraction"&gt;&lt;/a&gt;&lt;a href="#TLABRefillWasteFraction"&gt;TLABRefillWasteFraction&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Max TLAB waste at a refill (internal fragmentation)&lt;/td&gt;&lt;td&gt;64&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TLABWasteIncrement"&gt;&lt;/a&gt;&lt;a href="#TLABWasteIncrement"&gt;TLABWasteIncrement&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Increment allowed waste at slow allocation&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxLiveObjectEvacuationRatio"&gt;&lt;/a&gt;&lt;a href="#MaxLiveObjectEvacuationRatio"&gt;MaxLiveObjectEvacuationRatio&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Max percent of eden objects that will be live at scavenge&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="OldSize"&gt;&lt;/a&gt;&lt;a href="#OldSize"&gt;OldSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Default size of tenured generation (in bytes)&lt;/td&gt;&lt;td&gt;ScaleForWordSize (4096*K)&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MinHeapFreeRatio"&gt;&lt;/a&gt;&lt;a href="#MinHeapFreeRatio"&gt;MinHeapFreeRatio&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Min percentage of heap free after GC to avoid expansion&lt;/td&gt;&lt;td&gt;40&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxHeapFreeRatio"&gt;&lt;/a&gt;&lt;a href="#MaxHeapFreeRatio"&gt;MaxHeapFreeRatio&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Max percentage of heap free after GC to avoid shrinking&lt;/td&gt;&lt;td&gt;70&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SoftRefLRUPolicyMSPerMB"&gt;&lt;/a&gt;&lt;a href="#SoftRefLRUPolicyMSPerMB"&gt;SoftRefLRUPolicyMSPerMB&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of milliseconds per MB of free space in the heap&lt;/td&gt;&lt;td&gt;1000&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MinHeapDeltaBytes"&gt;&lt;/a&gt;&lt;a href="#MinHeapDeltaBytes"&gt;MinHeapDeltaBytes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Min change in heap space due to GC (in bytes)&lt;/td&gt;&lt;td&gt;ScaleForWordSize (128*K)&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MinPermHeapExpansion"&gt;&lt;/a&gt;&lt;a href="#MinPermHeapExpansion"&gt;MinPermHeapExpansion&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Min expansion of permanent heap (in bytes)&lt;/td&gt;&lt;td&gt;ScaleForWordSize (256*K)&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxPermHeapExpansion"&gt;&lt;/a&gt;&lt;a href="#MaxPermHeapExpansion"&gt;MaxPermHeapExpansion&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Max expansion of permanent heap without full GC (in bytes)&lt;/td&gt;&lt;td&gt;ScaleForWordSize (4*M)&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="QueuedAllocationWarningCount"&gt;&lt;/a&gt;&lt;a href="#QueuedAllocationWarningCount"&gt;QueuedAllocationWarningCount&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of times an allocation that queues behind a GC will retry before printing a warning&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxTenuringThreshold"&gt;&lt;/a&gt;&lt;a href="#MaxTenuringThreshold"&gt;MaxTenuringThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Maximum value for tenuring threshold. See more info about that flag &lt;a href="http://cybergav.in/2009/12/12/the-maxtenuringthreshold-for-a-hotspot-jvm/"&gt;here&lt;/a&gt;.&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InitialTenuringThreshold"&gt;&lt;/a&gt;&lt;a href="#InitialTenuringThreshold"&gt;InitialTenuringThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Initial value for tenuring threshold&lt;/td&gt;&lt;td&gt;7&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TargetSurvivorRatio"&gt;&lt;/a&gt;&lt;a href="#TargetSurvivorRatio"&gt;TargetSurvivorRatio&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Desired percentage of survivor space used after scavenge&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MarkSweepDeadRatio"&gt;&lt;/a&gt;&lt;a href="#MarkSweepDeadRatio"&gt;MarkSweepDeadRatio&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Percentage (0-100) of the old gen allowed as dead wood. "Serial mark sweep treats this as both the min and max value." CMS uses this value only if it falls back to mark sweep." Par compact uses a variable scale based on the density of the" generation and treats this as the max value when the heap is" either completely full or completely empty. Par compact also" has a smaller default value; see arguments.cpp.&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PermMarkSweepDeadRatio"&gt;&lt;/a&gt;&lt;a href="#PermMarkSweepDeadRatio"&gt;PermMarkSweepDeadRatio&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Percentage (0-100) of the perm gen allowed as dead wood." See MarkSweepDeadRatio for collector-specific comments.&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MarkSweepAlwaysCompactCount"&gt;&lt;/a&gt;&lt;a href="#MarkSweepAlwaysCompactCount"&gt;MarkSweepAlwaysCompactCount&lt;/a&gt;&lt;/td&gt;&lt;td&gt;How often should we fully compact the heap (ignoring the dead space parameters)&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintCMSStatistics"&gt;&lt;/a&gt;&lt;a href="#PrintCMSStatistics"&gt;PrintCMSStatistics&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Statistics for CMS&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintCMSInitiationStatistics"&gt;&lt;/a&gt;&lt;a href="#PrintCMSInitiationStatistics"&gt;PrintCMSInitiationStatistics&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Statistics for initiating a CMS collection&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintFLSStatistics"&gt;&lt;/a&gt;&lt;a href="#PrintFLSStatistics"&gt;PrintFLSStatistics&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Statistics for CMS' FreeListSpace&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintFLSCensus"&gt;&lt;/a&gt;&lt;a href="#PrintFLSCensus"&gt;PrintFLSCensus&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Census for CMS' FreeListSpace&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DeferThrSuspendLoopCount"&gt;&lt;/a&gt;&lt;a href="#DeferThrSuspendLoopCount"&gt;DeferThrSuspendLoopCount&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Unstable) Number of times to iterate in safepoint loop before blocking VM threads&lt;/td&gt;&lt;td&gt;4000&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DeferPollingPageLoopCount"&gt;&lt;/a&gt;&lt;a href="#DeferPollingPageLoopCount"&gt;DeferPollingPageLoopCount&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Unsafe,Unstable) Number of iterations in safepoint loop before changing safepoint polling page to RO&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SafepointSpinBeforeYield"&gt;&lt;/a&gt;&lt;a href="#SafepointSpinBeforeYield"&gt;SafepointSpinBeforeYield&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Unstable)&lt;/td&gt;&lt;td&gt;2000&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseDepthFirstScavengeOrder"&gt;&lt;/a&gt;&lt;a href="#UseDepthFirstScavengeOrder"&gt;UseDepthFirstScavengeOrder&lt;/a&gt;&lt;/td&gt;&lt;td&gt;true: the scavenge order will be depth-first, false: the scavenge order will be breadth-first&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="GCDrainStackTargetSize"&gt;&lt;/a&gt;&lt;a href="#GCDrainStackTargetSize"&gt;GCDrainStackTargetSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;how many entries we'll try to leave on the stack during parallel GC&lt;/td&gt;&lt;td&gt;64&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ThreadSafetyMargin"&gt;&lt;/a&gt;&lt;a href="#ThreadSafetyMargin"&gt;ThreadSafetyMargin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Thread safety margin is used on fixed-stack LinuxThreads (on Linux/x86 only) to prevent heap-stack collision. Set to 0 to disable this feature&lt;/td&gt;&lt;td&gt;50*M&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CodeCacheMinimumFreeSpace"&gt;&lt;/a&gt;&lt;a href="#CodeCacheMinimumFreeSpace"&gt;CodeCacheMinimumFreeSpace&lt;/a&gt;&lt;/td&gt;&lt;td&gt;When less than X space left, we stop compiling.&lt;/td&gt;&lt;td&gt;500*K&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CompileOnly"&gt;&lt;/a&gt;&lt;a href="#CompileOnly"&gt;CompileOnly&lt;/a&gt;&lt;/td&gt;&lt;td&gt;List of methods (pkg/class.name) to restrict compilation to&lt;/td&gt;&lt;td&gt;""&lt;/td&gt;&lt;td&gt;ccstr&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CompileCommandFile"&gt;&lt;/a&gt;&lt;a href="#CompileCommandFile"&gt;CompileCommandFile&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Read compiler commands from this file [.hotspot_compiler]&lt;/td&gt;&lt;td&gt;""&lt;/td&gt;&lt;td&gt;ccstr&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CompileCommand"&gt;&lt;/a&gt;&lt;a href="#CompileCommand"&gt;CompileCommand&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Prepend to .hotspot_compiler; e.g. log,java/lang/String.&lt;init&gt;&lt;/init&gt;&lt;/td&gt;&lt;td&gt;""&lt;/td&gt;&lt;td&gt;ccstr&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CICompilerCountPerCPU"&gt;&lt;/a&gt;&lt;a href="#CICompilerCountPerCPU"&gt;CICompilerCountPerCPU&lt;/a&gt;&lt;/td&gt;&lt;td&gt;1 compiler thread for log(N CPUs)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseThreadPriorities"&gt;&lt;/a&gt;&lt;a href="#UseThreadPriorities"&gt;UseThreadPriorities&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use native thread priorities&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ThreadPriorityPolicy"&gt;&lt;/a&gt;&lt;a href="#ThreadPriorityPolicy"&gt;ThreadPriorityPolicy&lt;/a&gt;&lt;/td&gt;&lt;td&gt;0 : Normal. VM chooses priorities that are appropriate for normal applications. On Solaris NORM_PRIORITY and above are mapped to normal native priority. Java priorities below NORM_PRIORITY" map to lower native priority values. On Windows applications" are allowed to use higher native priorities. However, with ThreadPriorityPolicy=0, VM will not use the highest possible" native priority, THREAD_PRIORITY_TIME_CRITICAL, as it may interfere with system threads. On Linux thread priorities are ignored because the OS does not support static priority in SCHED_OTHER scheduling class which is the only choice for" non-root, non-realtime applications. 1 : Aggressive. Java thread priorities map over to the entire range of native thread priorities. Higher Java thread priorities map to higher native thread priorities. This policy should be used with care, as sometimes it can cause performance degradation in the application and/or the entire system. On Linux this policy requires root privilege.&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ThreadPriorityVerbose"&gt;&lt;/a&gt;&lt;a href="#ThreadPriorityVerbose"&gt;ThreadPriorityVerbose&lt;/a&gt;&lt;/td&gt;&lt;td&gt;print priority changes&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DefaultThreadPriority"&gt;&lt;/a&gt;&lt;a href="#DefaultThreadPriority"&gt;DefaultThreadPriority&lt;/a&gt;&lt;/td&gt;&lt;td&gt;what native priority threads run at if not specified elsewhere (-1 means no change)&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CompilerThreadPriority"&gt;&lt;/a&gt;&lt;a href="#CompilerThreadPriority"&gt;CompilerThreadPriority&lt;/a&gt;&lt;/td&gt;&lt;td&gt;what priority should compiler threads run at (-1 means no change)&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VMThreadPriority"&gt;&lt;/a&gt;&lt;a href="#VMThreadPriority"&gt;VMThreadPriority&lt;/a&gt;&lt;/td&gt;&lt;td&gt;what priority should VM threads run at (-1 means no change)&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CompilerThreadHintNoPreempt"&gt;&lt;/a&gt;&lt;a href="#CompilerThreadHintNoPreempt"&gt;CompilerThreadHintNoPreempt&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Solaris only) Give compiler threads an extra quanta&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VMThreadHintNoPreempt"&gt;&lt;/a&gt;&lt;a href="#VMThreadHintNoPreempt"&gt;VMThreadHintNoPreempt&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Solaris only) Give VM thread an extra quanta&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="JavaPriority1_To_OSPriority"&gt;&lt;/a&gt;&lt;a href="#JavaPriority1_To_OSPriority"&gt;JavaPriority1_To_OSPriority&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Map Java priorities to OS priorities&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="JavaPriority2_To_OSPriority"&gt;&lt;/a&gt;&lt;a href="#JavaPriority2_To_OSPriority"&gt;JavaPriority2_To_OSPriority&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Map Java priorities to OS priorities&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="JavaPriority3_To_OSPriority"&gt;&lt;/a&gt;&lt;a href="#JavaPriority3_To_OSPriority"&gt;JavaPriority3_To_OSPriority&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Map Java priorities to OS priorities&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="JavaPriority4_To_OSPriority"&gt;&lt;/a&gt;&lt;a href="#JavaPriority4_To_OSPriority"&gt;JavaPriority4_To_OSPriority&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Map Java priorities to OS priorities&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="JavaPriority5_To_OSPriority"&gt;&lt;/a&gt;&lt;a href="#JavaPriority5_To_OSPriority"&gt;JavaPriority5_To_OSPriority&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Map Java priorities to OS priorities&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="JavaPriority6_To_OSPriority"&gt;&lt;/a&gt;&lt;a href="#JavaPriority6_To_OSPriority"&gt;JavaPriority6_To_OSPriority&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Map Java priorities to OS priorities&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="JavaPriority7_To_OSPriority"&gt;&lt;/a&gt;&lt;a href="#JavaPriority7_To_OSPriority"&gt;JavaPriority7_To_OSPriority&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Map Java priorities to OS priorities&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="JavaPriority8_To_OSPriority"&gt;&lt;/a&gt;&lt;a href="#JavaPriority8_To_OSPriority"&gt;JavaPriority8_To_OSPriority&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Map Java priorities to OS priorities&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="JavaPriority9_To_OSPriority"&gt;&lt;/a&gt;&lt;a href="#JavaPriority9_To_OSPriority"&gt;JavaPriority9_To_OSPriority&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Map Java priorities to OS priorities&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="JavaPriority10_To_OSPriority"&gt;&lt;/a&gt;&lt;a href="#JavaPriority10_To_OSPriority"&gt;JavaPriority10_To_OSPriority&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Map Java priorities to OS priorities&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="StarvationMonitorInterval"&gt;&lt;/a&gt;&lt;a href="#StarvationMonitorInterval"&gt;StarvationMonitorInterval&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Pause between each check in ms&lt;/td&gt;&lt;td&gt;200&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="Tier1BytecodeLimit"&gt;&lt;/a&gt;&lt;a href="#Tier1BytecodeLimit"&gt;Tier1BytecodeLimit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Must have at least this many bytecodes before tier1" invocation counters are used&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="StressTieredRuntime"&gt;&lt;/a&gt;&lt;a href="#StressTieredRuntime"&gt;StressTieredRuntime&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Alternate client and server compiler on compile requests&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InterpreterProfilePercentage"&gt;&lt;/a&gt;&lt;a href="#InterpreterProfilePercentage"&gt;InterpreterProfilePercentage&lt;/a&gt;&lt;/td&gt;&lt;td&gt;number of method invocations/branches (expressed as % of CompileThreshold) before profiling in the interpreter&lt;/td&gt;&lt;td&gt;33&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxDirectMemorySize"&gt;&lt;/a&gt;&lt;a href="#MaxDirectMemorySize"&gt;MaxDirectMemorySize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Maximum total size of NIO direct-buffer allocations&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseUnsupportedDeprecatedJVMPI"&gt;&lt;/a&gt;&lt;a href="#UseUnsupportedDeprecatedJVMPI"&gt;UseUnsupportedDeprecatedJVMPI&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Flag to temporarily re-enable the, soon to be removed, experimental interface JVMPI.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UsePerfData"&gt;&lt;/a&gt;&lt;a href="#UsePerfData"&gt;UsePerfData&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Flag to disable jvmstat instrumentation for performance testing" and problem isolation purposes.&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PerfDataSaveToFile"&gt;&lt;/a&gt;&lt;a href="#PerfDataSaveToFile"&gt;PerfDataSaveToFile&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Save PerfData memory to hsperfdata_&lt;pid&gt;&amp;nbsp;file on exit&lt;/pid&gt;&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PerfDataSamplingInterval"&gt;&lt;/a&gt;&lt;a href="#PerfDataSamplingInterval"&gt;PerfDataSamplingInterval&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Data sampling interval in milliseconds&lt;/td&gt;&lt;td&gt;50 /*ms*/&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PerfDisableSharedMem"&gt;&lt;/a&gt;&lt;a href="#PerfDisableSharedMem"&gt;PerfDisableSharedMem&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Store performance data in standard memory&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PerfDataMemorySize"&gt;&lt;/a&gt;&lt;a href="#PerfDataMemorySize"&gt;PerfDataMemorySize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Size of performance data memory region. Will be rounded up to a multiple of the native os page size.&lt;/td&gt;&lt;td&gt;32*K&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PerfMaxStringConstLength"&gt;&lt;/a&gt;&lt;a href="#PerfMaxStringConstLength"&gt;PerfMaxStringConstLength&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Maximum PerfStringConstant string length before truncation&lt;/td&gt;&lt;td&gt;1024&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PerfAllowAtExitRegistration"&gt;&lt;/a&gt;&lt;a href="#PerfAllowAtExitRegistration"&gt;PerfAllowAtExitRegistration&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Allow registration of atexit() methods&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PerfBypassFileSystemCheck"&gt;&lt;/a&gt;&lt;a href="#PerfBypassFileSystemCheck"&gt;PerfBypassFileSystemCheck&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Bypass Win32 file system criteria checks (Windows Only)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UnguardOnExecutionViolation"&gt;&lt;/a&gt;&lt;a href="#UnguardOnExecutionViolation"&gt;UnguardOnExecutionViolation&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Unguard page and retry on no-execute fault (Win32 only)" 0=off, 1=conservative, 2=aggressive&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ManagementServer"&gt;&lt;/a&gt;&lt;a href="#ManagementServer"&gt;ManagementServer&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Create JMX Management Server&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DisableAttachMechanism"&gt;&lt;/a&gt;&lt;a href="#DisableAttachMechanism"&gt;DisableAttachMechanism&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Disable mechanism that allows tools to attach to this VM&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="StartAttachListener"&gt;&lt;/a&gt;&lt;a href="#StartAttachListener"&gt;StartAttachListener&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Always start Attach Listener at VM startup&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseSharedSpaces"&gt;&lt;/a&gt;&lt;a href="#UseSharedSpaces"&gt;UseSharedSpaces&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use shared spaces in the permanent generation&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="RequireSharedSpaces"&gt;&lt;/a&gt;&lt;a href="#RequireSharedSpaces"&gt;RequireSharedSpaces&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Require shared spaces in the permanent generation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ForceSharedSpaces"&gt;&lt;/a&gt;&lt;a href="#ForceSharedSpaces"&gt;ForceSharedSpaces&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Require shared spaces in the permanent generation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DumpSharedSpaces"&gt;&lt;/a&gt;&lt;a href="#DumpSharedSpaces"&gt;DumpSharedSpaces&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Special mode: JVM reads a class list, loads classes, builds shared spaces, and dumps the shared spaces to a file to be used in future JVM runs.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintSharedSpaces"&gt;&lt;/a&gt;&lt;a href="#PrintSharedSpaces"&gt;PrintSharedSpaces&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print usage of shared spaces&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SharedDummyBlockSize"&gt;&lt;/a&gt;&lt;a href="#SharedDummyBlockSize"&gt;SharedDummyBlockSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Size of dummy block used to shift heap addresses (in bytes)&lt;/td&gt;&lt;td&gt;512*M&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SharedReadWriteSize"&gt;&lt;/a&gt;&lt;a href="#SharedReadWriteSize"&gt;SharedReadWriteSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Size of read-write space in permanent generation (in bytes)&lt;/td&gt;&lt;td&gt;12*M&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SharedReadOnlySize"&gt;&lt;/a&gt;&lt;a href="#SharedReadOnlySize"&gt;SharedReadOnlySize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Size of read-only space in permanent generation (in bytes)&lt;/td&gt;&lt;td&gt;8*M&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SharedMiscDataSize"&gt;&lt;/a&gt;&lt;a href="#SharedMiscDataSize"&gt;SharedMiscDataSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Size of the shared data area adjacent to the heap (in bytes)&lt;/td&gt;&lt;td&gt;4*M&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SharedMiscCodeSize"&gt;&lt;/a&gt;&lt;a href="#SharedMiscCodeSize"&gt;SharedMiscCodeSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Size of the shared code area adjacent to the heap (in bytes)&lt;/td&gt;&lt;td&gt;4*M&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TaggedStackInterpreter"&gt;&lt;/a&gt;&lt;a href="#TaggedStackInterpreter"&gt;TaggedStackInterpreter&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Insert tags in interpreter execution stack for oopmap generaion&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ExtendedDTraceProbes"&gt;&lt;/a&gt;&lt;a href="#ExtendedDTraceProbes"&gt;ExtendedDTraceProbes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enable performance-impacting dtrace probes&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DTraceMethodProbes"&gt;&lt;/a&gt;&lt;a href="#DTraceMethodProbes"&gt;DTraceMethodProbes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enable dtrace probes for method-entry and method-exit&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DTraceAllocProbes"&gt;&lt;/a&gt;&lt;a href="#DTraceAllocProbes"&gt;DTraceAllocProbes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enable dtrace probes for object allocation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DTraceMonitorProbes"&gt;&lt;/a&gt;&lt;a href="#DTraceMonitorProbes"&gt;DTraceMonitorProbes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enable dtrace probes for monitor events&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="RelaxAccessControlCheck"&gt;&lt;/a&gt;&lt;a href="#RelaxAccessControlCheck"&gt;RelaxAccessControlCheck&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Relax the access control checks in the verifier&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseVMInterruptibleIO"&gt;&lt;/a&gt;&lt;a href="#UseVMInterruptibleIO"&gt;UseVMInterruptibleIO&lt;/a&gt;&lt;/td&gt;&lt;td&gt;(Unstable, Solaris-specific) Thread interrupt before or with EINTR for I/O operations results in OS_INTRPT&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AggressiveHeap"&gt;&lt;/a&gt;&lt;a href="#AggressiveHeap"&gt;AggressiveHeap&lt;/a&gt;&lt;/td&gt;&lt;td&gt;The option inspects the server resources (size of memory and number of processors), and attempts to set various parameters to be optimal for long-running, memory allocation-intensive jobs. The JVM team view AggressiveHeap as an anachronism and would like to see it go away. Instead, we'd prefer for you to determine which of the individual options that AggressiveHeap sets actually impact your app, and then set those on the command line directly. You can check the Open JDK source code to see what AggressiveHeap actually does (arguments.cpp)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseCompressedStrings"&gt;&lt;/a&gt;&lt;a href="#UseCompressedStrings"&gt;UseCompressedStrings&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use a byte[] for Strings which can be represented as pure ASCII. (Introduced in Java 6 Update 21 Performance Release)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="OptimizeStringConcat"&gt;&lt;/a&gt;&lt;a href="#OptimizeStringConcat"&gt;OptimizeStringConcat&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Optimize String concatenation operations where possible. (Introduced in Java 6 Update 20)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseStringCache"&gt;&lt;/a&gt;&lt;a href="#UseStringCache"&gt;UseStringCache&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enables caching of commonly allocated strings.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;

&lt;tr bgcolor="#e0e0e0"&gt;&lt;td colspan="4"&gt;&lt;a href="" name="manageable"&gt;manageable&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="HeapDumpOnOutOfMemoryError"&gt;&lt;/a&gt;&lt;a href="#HeapDumpOnOutOfMemoryError"&gt;HeapDumpOnOutOfMemoryError&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Dump heap to file when java.lang.OutOfMemoryError is thrown&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="HeapDumpPath"&gt;&lt;/a&gt;&lt;a href="#HeapDumpPath"&gt;HeapDumpPath&lt;/a&gt;&lt;/td&gt;&lt;td&gt;When HeapDumpOnOutOfMemoryError is on, the path (filename or" directory) of the dump file (defaults to java_pid&lt;pid&gt;.hprof" in the working directory)&lt;/pid&gt;&lt;/td&gt;&lt;td&gt;""&lt;/td&gt;&lt;td&gt;ccstr&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintGC"&gt;&lt;/a&gt;&lt;a href="#PrintGC"&gt;PrintGC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print message at garbage collect&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintGCDetails"&gt;&lt;/a&gt;&lt;a href="#PrintGCDetails"&gt;PrintGCDetails&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print more details at garbage collect&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintGCTimeStamps"&gt;&lt;/a&gt;&lt;a href="#PrintGCTimeStamps"&gt;PrintGCTimeStamps&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print timestamps at garbage collect&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintClassHistogram"&gt;&lt;/a&gt;&lt;a href="#PrintClassHistogram"&gt;PrintClassHistogram&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print a histogram of class instances&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintConcurrentLocks"&gt;&lt;/a&gt;&lt;a href="#PrintConcurrentLocks"&gt;PrintConcurrentLocks&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print java.util.concurrent locks in thread dump&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;

&lt;tr bgcolor="#e0e0e0"&gt;&lt;td colspan="4"&gt;&lt;a href="" name="experimental"&gt;experimental&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseG1GC"&gt;&lt;/a&gt;&lt;a href="#UseG1GC"&gt;UseG1GC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Switch on G1 for Java6. G1 is default for Java7, so there is no such option there.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;

&lt;tr bgcolor="#e0e0e0"&gt;&lt;td colspan="4"&gt;&lt;a href="" name="product_rw"&gt;product_rw&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceClassLoading"&gt;&lt;/a&gt;&lt;a href="#TraceClassLoading"&gt;TraceClassLoading&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace all classes loaded&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceClassUnloading"&gt;&lt;/a&gt;&lt;a href="#TraceClassUnloading"&gt;TraceClassUnloading&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace unloading of classes&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceLoaderConstraints"&gt;&lt;/a&gt;&lt;a href="#TraceLoaderConstraints"&gt;TraceLoaderConstraints&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace loader constraints&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintHeapAtGC"&gt;&lt;/a&gt;&lt;a href="#PrintHeapAtGC"&gt;PrintHeapAtGC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print heap layout before and after each GC&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;

&lt;tr bgcolor="#e0e0e0"&gt;&lt;td colspan="4"&gt;&lt;a href="" name="develop"&gt;develop&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceItables"&gt;&lt;/a&gt;&lt;a href="#TraceItables"&gt;TraceItables&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace initialization and use of itables&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TracePcPatching"&gt;&lt;/a&gt;&lt;a href="#TracePcPatching"&gt;TracePcPatching&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace usage of frame::patch_pc&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceJumps"&gt;&lt;/a&gt;&lt;a href="#TraceJumps"&gt;TraceJumps&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace assembly jumps in thread ring buffer&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceRelocator"&gt;&lt;/a&gt;&lt;a href="#TraceRelocator"&gt;TraceRelocator&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace the bytecode relocator&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceLongCompiles"&gt;&lt;/a&gt;&lt;a href="#TraceLongCompiles"&gt;TraceLongCompiles&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print out every time compilation is longer than a given threashold&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SafepointALot"&gt;&lt;/a&gt;&lt;a href="#SafepointALot"&gt;SafepointALot&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Generates a lot of safepoints. Works with GuaranteedSafepointInterval&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="BailoutToInterpreterForThrows"&gt;&lt;/a&gt;&lt;a href="#BailoutToInterpreterForThrows"&gt;BailoutToInterpreterForThrows&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Compiled methods which throws/catches exceptions will be deopt and intp.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="NoYieldsInMicrolock"&gt;&lt;/a&gt;&lt;a href="#NoYieldsInMicrolock"&gt;NoYieldsInMicrolock&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Disable yields in microlock&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceOopMapGeneration"&gt;&lt;/a&gt;&lt;a href="#TraceOopMapGeneration"&gt;TraceOopMapGeneration&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Shows oopmap generation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MethodFlushing"&gt;&lt;/a&gt;&lt;a href="#MethodFlushing"&gt;MethodFlushing&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Reclamation of zombie and not-entrant methods&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyStack"&gt;&lt;/a&gt;&lt;a href="#VerifyStack"&gt;VerifyStack&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify stack of each thread when it is entering a runtime call&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceDerivedPointers"&gt;&lt;/a&gt;&lt;a href="#TraceDerivedPointers"&gt;TraceDerivedPointers&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace traversal of derived pointers on stack&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InlineArrayCopy"&gt;&lt;/a&gt;&lt;a href="#InlineArrayCopy"&gt;InlineArrayCopy&lt;/a&gt;&lt;/td&gt;&lt;td&gt;inline arraycopy native that is known to be part of base library DLL&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InlineObjectHash"&gt;&lt;/a&gt;&lt;a href="#InlineObjectHash"&gt;InlineObjectHash&lt;/a&gt;&lt;/td&gt;&lt;td&gt;inline Object::hashCode() native that is known to be part of base library DLL&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InlineNatives"&gt;&lt;/a&gt;&lt;a href="#InlineNatives"&gt;InlineNatives&lt;/a&gt;&lt;/td&gt;&lt;td&gt;inline natives that are known to be part of base library DLL&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InlineMathNatives"&gt;&lt;/a&gt;&lt;a href="#InlineMathNatives"&gt;InlineMathNatives&lt;/a&gt;&lt;/td&gt;&lt;td&gt;inline SinD, CosD, etc.&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InlineClassNatives"&gt;&lt;/a&gt;&lt;a href="#InlineClassNatives"&gt;InlineClassNatives&lt;/a&gt;&lt;/td&gt;&lt;td&gt;inline Class.isInstance, etc&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InlineAtomicLong"&gt;&lt;/a&gt;&lt;a href="#InlineAtomicLong"&gt;InlineAtomicLong&lt;/a&gt;&lt;/td&gt;&lt;td&gt;inline sun.misc.AtomicLong&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InlineThreadNatives"&gt;&lt;/a&gt;&lt;a href="#InlineThreadNatives"&gt;InlineThreadNatives&lt;/a&gt;&lt;/td&gt;&lt;td&gt;inline Thread.currentThread, etc&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InlineReflectionGetCallerClass"&gt;&lt;/a&gt;&lt;a href="#InlineReflectionGetCallerClass"&gt;InlineReflectionGetCallerClass&lt;/a&gt;&lt;/td&gt;&lt;td&gt;inline sun.reflect.Reflection.getCallerClass(), known to be part of base library DLL&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InlineUnsafeOps"&gt;&lt;/a&gt;&lt;a href="#InlineUnsafeOps"&gt;InlineUnsafeOps&lt;/a&gt;&lt;/td&gt;&lt;td&gt;inline memory ops (native methods) from sun.misc.Unsafe&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ConvertCmpD2CmpF"&gt;&lt;/a&gt;&lt;a href="#ConvertCmpD2CmpF"&gt;ConvertCmpD2CmpF&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Convert cmpD to cmpF when one input is constant in float range&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ConvertFloat2IntClipping"&gt;&lt;/a&gt;&lt;a href="#ConvertFloat2IntClipping"&gt;ConvertFloat2IntClipping&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Convert float2int clipping idiom to integer clipping&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SpecialStringCompareTo"&gt;&lt;/a&gt;&lt;a href="#SpecialStringCompareTo"&gt;SpecialStringCompareTo&lt;/a&gt;&lt;/td&gt;&lt;td&gt;special version of string compareTo&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SpecialStringIndexOf"&gt;&lt;/a&gt;&lt;a href="#SpecialStringIndexOf"&gt;SpecialStringIndexOf&lt;/a&gt;&lt;/td&gt;&lt;td&gt;special version of string indexOf&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceCallFixup"&gt;&lt;/a&gt;&lt;a href="#TraceCallFixup"&gt;TraceCallFixup&lt;/a&gt;&lt;/td&gt;&lt;td&gt;traces all call fixups&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DeoptimizeALot"&gt;&lt;/a&gt;&lt;a href="#DeoptimizeALot"&gt;DeoptimizeALot&lt;/a&gt;&lt;/td&gt;&lt;td&gt;deoptimize at every exit from the runtime system&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DeoptimizeOnlyAt"&gt;&lt;/a&gt;&lt;a href="#DeoptimizeOnlyAt"&gt;DeoptimizeOnlyAt&lt;/a&gt;&lt;/td&gt;&lt;td&gt;a comma separated list of bcis to deoptimize at&lt;/td&gt;&lt;td&gt;""&lt;/td&gt;&lt;td&gt;ccstr&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="Debugging"&gt;&lt;/a&gt;&lt;a href="#Debugging"&gt;Debugging&lt;/a&gt;&lt;/td&gt;&lt;td&gt;set when executing debug methods in debug.ccp (to prevent triggering assertions)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceHandleAllocation"&gt;&lt;/a&gt;&lt;a href="#TraceHandleAllocation"&gt;TraceHandleAllocation&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Prints out warnings when suspicious many handles are allocated&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ShowSafepointMsgs"&gt;&lt;/a&gt;&lt;a href="#ShowSafepointMsgs"&gt;ShowSafepointMsgs&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Show msg. about safepoint synch.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SafepointTimeout"&gt;&lt;/a&gt;&lt;a href="#SafepointTimeout"&gt;SafepointTimeout&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Time out and warn or fail after SafepointTimeoutDelay milliseconds if failed to reach safepoint&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DieOnSafepointTimeout"&gt;&lt;/a&gt;&lt;a href="#DieOnSafepointTimeout"&gt;DieOnSafepointTimeout&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Die upon failure to reach safepoint (see SafepointTimeout)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ForceFloatExceptions"&gt;&lt;/a&gt;&lt;a href="#ForceFloatExceptions"&gt;ForceFloatExceptions&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Force exceptions on FP stack under/overflow&lt;/td&gt;&lt;td&gt;trueInDebug&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SoftMatchFailure"&gt;&lt;/a&gt;&lt;a href="#SoftMatchFailure"&gt;SoftMatchFailure&lt;/a&gt;&lt;/td&gt;&lt;td&gt;If the DFA fails to match a node, print a message and bail out&lt;/td&gt;&lt;td&gt;trueInProduct&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyStackAtCalls"&gt;&lt;/a&gt;&lt;a href="#VerifyStackAtCalls"&gt;VerifyStackAtCalls&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify that the stack pointer is unchanged after calls&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceJavaAssertions"&gt;&lt;/a&gt;&lt;a href="#TraceJavaAssertions"&gt;TraceJavaAssertions&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace java language assertions&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ZapDeadCompiledLocals"&gt;&lt;/a&gt;&lt;a href="#ZapDeadCompiledLocals"&gt;ZapDeadCompiledLocals&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Zap dead locals in compiler frames&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseMallocOnly"&gt;&lt;/a&gt;&lt;a href="#UseMallocOnly"&gt;UseMallocOnly&lt;/a&gt;&lt;/td&gt;&lt;td&gt;use only malloc/free for allocation (no resource area/arena)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintMalloc"&gt;&lt;/a&gt;&lt;a href="#PrintMalloc"&gt;PrintMalloc&lt;/a&gt;&lt;/td&gt;&lt;td&gt;print all malloc/free calls&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ZapResourceArea"&gt;&lt;/a&gt;&lt;a href="#ZapResourceArea"&gt;ZapResourceArea&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Zap freed resource/arena space with 0xABABABAB&lt;/td&gt;&lt;td&gt;trueInDebug&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ZapJNIHandleArea"&gt;&lt;/a&gt;&lt;a href="#ZapJNIHandleArea"&gt;ZapJNIHandleArea&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Zap freed JNI handle space with 0xFEFEFEFE&lt;/td&gt;&lt;td&gt;trueInDebug&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ZapUnusedHeapArea"&gt;&lt;/a&gt;&lt;a href="#ZapUnusedHeapArea"&gt;ZapUnusedHeapArea&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Zap unused heap space with 0xBAADBABE&lt;/td&gt;&lt;td&gt;trueInDebug&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintVMMessages"&gt;&lt;/a&gt;&lt;a href="#PrintVMMessages"&gt;PrintVMMessages&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print vm messages on console&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="Verbose"&gt;&lt;/a&gt;&lt;a href="#Verbose"&gt;Verbose&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Prints additional debugging information from other modes&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintMiscellaneous"&gt;&lt;/a&gt;&lt;a href="#PrintMiscellaneous"&gt;PrintMiscellaneous&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Prints uncategorized debugging information (requires +Verbose)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="WizardMode"&gt;&lt;/a&gt;&lt;a href="#WizardMode"&gt;WizardMode&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Prints much more debugging information&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SegmentedHeapDumpThreshold"&gt;&lt;/a&gt;&lt;a href="#SegmentedHeapDumpThreshold"&gt;SegmentedHeapDumpThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Generate a segmented heap dump (JAVA PROFILE 1.0.2 format) when the heap usage is larger than this&lt;/td&gt;&lt;td&gt;2*G&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="HeapDumpSegmentSize"&gt;&lt;/a&gt;&lt;a href="#HeapDumpSegmentSize"&gt;HeapDumpSegmentSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Approximate segment size when generating a segmented heap dump&lt;/td&gt;&lt;td&gt;1*G&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="BreakAtWarning"&gt;&lt;/a&gt;&lt;a href="#BreakAtWarning"&gt;BreakAtWarning&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Execute breakpoint upon encountering VM warning&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceVMOperation"&gt;&lt;/a&gt;&lt;a href="#TraceVMOperation"&gt;TraceVMOperation&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace vm operations&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseFakeTimers"&gt;&lt;/a&gt;&lt;a href="#UseFakeTimers"&gt;UseFakeTimers&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Tells whether the VM should use system time or a fake timer&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintAssembly"&gt;&lt;/a&gt;&lt;a href="#PrintAssembly"&gt;PrintAssembly&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print assembly code&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintNMethods"&gt;&lt;/a&gt;&lt;a href="#PrintNMethods"&gt;PrintNMethods&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print assembly code for nmethods when generated&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintNativeNMethods"&gt;&lt;/a&gt;&lt;a href="#PrintNativeNMethods"&gt;PrintNativeNMethods&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print assembly code for native nmethods when generated&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintDebugInfo"&gt;&lt;/a&gt;&lt;a href="#PrintDebugInfo"&gt;PrintDebugInfo&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print debug information for all nmethods when generated&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintRelocations"&gt;&lt;/a&gt;&lt;a href="#PrintRelocations"&gt;PrintRelocations&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print relocation information for all nmethods when generated&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintDependencies"&gt;&lt;/a&gt;&lt;a href="#PrintDependencies"&gt;PrintDependencies&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print dependency information for all nmethods when generated&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintExceptionHandlers"&gt;&lt;/a&gt;&lt;a href="#PrintExceptionHandlers"&gt;PrintExceptionHandlers&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print exception handler tables for all nmethods when generated&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InterceptOSException"&gt;&lt;/a&gt;&lt;a href="#InterceptOSException"&gt;InterceptOSException&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Starts debugger when an implicit OS (e.g., NULL) exception happens&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintCodeCache2"&gt;&lt;/a&gt;&lt;a href="#PrintCodeCache2"&gt;PrintCodeCache2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print detailed info on the compiled_code cache when exiting&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintStubCode"&gt;&lt;/a&gt;&lt;a href="#PrintStubCode"&gt;PrintStubCode&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print generated stub code&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintJVMWarnings"&gt;&lt;/a&gt;&lt;a href="#PrintJVMWarnings"&gt;PrintJVMWarnings&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Prints warnings for unimplemented JVM functions&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InitializeJavaLangSystem"&gt;&lt;/a&gt;&lt;a href="#InitializeJavaLangSystem"&gt;InitializeJavaLangSystem&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Initialize java.lang.System - turn off for individual method debugging&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InitializeJavaLangString"&gt;&lt;/a&gt;&lt;a href="#InitializeJavaLangString"&gt;InitializeJavaLangString&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Initialize java.lang.String - turn off for individual method debugging&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InitializeJavaLangExceptionsErrors"&gt;&lt;/a&gt;&lt;a href="#InitializeJavaLangExceptionsErrors"&gt;InitializeJavaLangExceptionsErrors&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Initialize various error and exception classes - turn off for individual method debugging&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="RegisterReferences"&gt;&lt;/a&gt;&lt;a href="#RegisterReferences"&gt;RegisterReferences&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Tells whether the VM should register soft/weak/final/phantom references&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="IgnoreRewrites"&gt;&lt;/a&gt;&lt;a href="#IgnoreRewrites"&gt;IgnoreRewrites&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Supress rewrites of bytecodes in the oopmap generator. This is unsafe!&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintCodeCacheExtension"&gt;&lt;/a&gt;&lt;a href="#PrintCodeCacheExtension"&gt;PrintCodeCacheExtension&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print extension of code cache&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UsePrivilegedStack"&gt;&lt;/a&gt;&lt;a href="#UsePrivilegedStack"&gt;UsePrivilegedStack&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enable the security JVM functions&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="IEEEPrecision"&gt;&lt;/a&gt;&lt;a href="#IEEEPrecision"&gt;IEEEPrecision&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enables IEEE precision (for INTEL only)&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ProtectionDomainVerification"&gt;&lt;/a&gt;&lt;a href="#ProtectionDomainVerification"&gt;ProtectionDomainVerification&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verifies protection domain before resolution in system dictionary&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DisableStartThread"&gt;&lt;/a&gt;&lt;a href="#DisableStartThread"&gt;DisableStartThread&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Disable starting of additional Java threads (for debugging only)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MemProfiling"&gt;&lt;/a&gt;&lt;a href="#MemProfiling"&gt;MemProfiling&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Write memory usage profiling to log file&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseDetachedThreads"&gt;&lt;/a&gt;&lt;a href="#UseDetachedThreads"&gt;UseDetachedThreads&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use detached threads that are recycled upon termination (for SOLARIS only)&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UsePthreads"&gt;&lt;/a&gt;&lt;a href="#UsePthreads"&gt;UsePthreads&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use pthread-based instead of libthread-based synchronization (SPARC only)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UpdateHotSpotCompilerFileOnError"&gt;&lt;/a&gt;&lt;a href="#UpdateHotSpotCompilerFileOnError"&gt;UpdateHotSpotCompilerFileOnError&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Should the system attempt to update the compiler file when an error occurs?&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="LoadLineNumberTables"&gt;&lt;/a&gt;&lt;a href="#LoadLineNumberTables"&gt;LoadLineNumberTables&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Tells whether the class file parser loads line number tables&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="LoadLocalVariableTables"&gt;&lt;/a&gt;&lt;a href="#LoadLocalVariableTables"&gt;LoadLocalVariableTables&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Tells whether the class file parser loads local variable tables&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="LoadLocalVariableTypeTables"&gt;&lt;/a&gt;&lt;a href="#LoadLocalVariableTypeTables"&gt;LoadLocalVariableTypeTables&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Tells whether the class file parser loads local variable type tables&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="PreallocatedOutOfMemoryErrorCount"&gt;&lt;/a&gt;&lt;a href="#PreallocatedOutOfMemoryErrorCount"&gt;PreallocatedOutOfMemoryErrorCount&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of OutOfMemoryErrors preallocated with backtrace&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintBiasedLockingStatistics"&gt;&lt;/a&gt;&lt;a href="#PrintBiasedLockingStatistics"&gt;PrintBiasedLockingStatistics&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print statistics of biased locking in JVM&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceJVMPI"&gt;&lt;/a&gt;&lt;a href="#TraceJVMPI"&gt;TraceJVMPI&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace JVMPI&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceJNICalls"&gt;&lt;/a&gt;&lt;a href="#TraceJNICalls"&gt;TraceJNICalls&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace JNI calls&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceJNIHandleAllocation"&gt;&lt;/a&gt;&lt;a href="#TraceJNIHandleAllocation"&gt;TraceJNIHandleAllocation&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace allocation/deallocation of JNI handle blocks&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceThreadEvents"&gt;&lt;/a&gt;&lt;a href="#TraceThreadEvents"&gt;TraceThreadEvents&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace all thread events&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceBytecodes"&gt;&lt;/a&gt;&lt;a href="#TraceBytecodes"&gt;TraceBytecodes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace bytecode execution&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceClassInitialization"&gt;&lt;/a&gt;&lt;a href="#TraceClassInitialization"&gt;TraceClassInitialization&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace class initialization&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceExceptions"&gt;&lt;/a&gt;&lt;a href="#TraceExceptions"&gt;TraceExceptions&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace exceptions&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceICs"&gt;&lt;/a&gt;&lt;a href="#TraceICs"&gt;TraceICs&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace inline cache changes&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceInlineCacheClearing"&gt;&lt;/a&gt;&lt;a href="#TraceInlineCacheClearing"&gt;TraceInlineCacheClearing&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace clearing of inline caches in nmethods&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceDependencies"&gt;&lt;/a&gt;&lt;a href="#TraceDependencies"&gt;TraceDependencies&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace dependencies&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyDependencies"&gt;&lt;/a&gt;&lt;a href="#VerifyDependencies"&gt;VerifyDependencies&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Exercise and verify the compilation dependency mechanism&lt;/td&gt;&lt;td&gt;trueInDebug&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceNewOopMapGeneration"&gt;&lt;/a&gt;&lt;a href="#TraceNewOopMapGeneration"&gt;TraceNewOopMapGeneration&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace OopMapGeneration&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="TraceNewOopMapGenerationDetailed"&gt;&lt;/a&gt;&lt;a href="#TraceNewOopMapGenerationDetailed"&gt;TraceNewOopMapGenerationDetailed&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace OopMapGeneration: print detailed cell states&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TimeOopMap"&gt;&lt;/a&gt;&lt;a href="#TimeOopMap"&gt;TimeOopMap&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Time calls to GenerateOopMap::compute_map() in sum&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TimeOopMap2"&gt;&lt;/a&gt;&lt;a href="#TimeOopMap2"&gt;TimeOopMap2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Time calls to GenerateOopMap::compute_map() individually&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceMonitorMismatch"&gt;&lt;/a&gt;&lt;a href="#TraceMonitorMismatch"&gt;TraceMonitorMismatch&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace monitor matching failures during OopMapGeneration&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceOopMapRewrites"&gt;&lt;/a&gt;&lt;a href="#TraceOopMapRewrites"&gt;TraceOopMapRewrites&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace rewritting of method oops during oop map generation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceSafepoint"&gt;&lt;/a&gt;&lt;a href="#TraceSafepoint"&gt;TraceSafepoint&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace safepoint operations&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceICBuffer"&gt;&lt;/a&gt;&lt;a href="#TraceICBuffer"&gt;TraceICBuffer&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace usage of IC buffer&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceCompiledIC"&gt;&lt;/a&gt;&lt;a href="#TraceCompiledIC"&gt;TraceCompiledIC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace changes of compiled IC&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceStartupTime"&gt;&lt;/a&gt;&lt;a href="#TraceStartupTime"&gt;TraceStartupTime&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace setup time&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceHPI"&gt;&lt;/a&gt;&lt;a href="#TraceHPI"&gt;TraceHPI&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace Host Porting Interface (HPI)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceProtectionDomainVerification"&gt;&lt;/a&gt;&lt;a href="#TraceProtectionDomainVerification"&gt;TraceProtectionDomainVerification&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace protection domain verifcation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceClearedExceptions"&gt;&lt;/a&gt;&lt;a href="#TraceClearedExceptions"&gt;TraceClearedExceptions&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Prints when an exception is forcibly cleared&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseParallelOldGCChunkPointerCalc"&gt;&lt;/a&gt;&lt;a href="#UseParallelOldGCChunkPointerCalc"&gt;UseParallelOldGCChunkPointerCalc&lt;/a&gt;&lt;/td&gt;&lt;td&gt;In the Parallel Old garbage collector use chucks to calculate" new object locations&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyParallelOldWithMarkSweep"&gt;&lt;/a&gt;&lt;a href="#VerifyParallelOldWithMarkSweep"&gt;VerifyParallelOldWithMarkSweep&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use the MarkSweep code to verify phases of Parallel Old&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="VerifyParallelOldWithMarkSweepInterval"&gt;&lt;/a&gt;&lt;a href="#VerifyParallelOldWithMarkSweepInterval"&gt;VerifyParallelOldWithMarkSweepInterval&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Interval at which the MarkSweep code is used to verify phases of Parallel Old&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ParallelOldMTUnsafeMarkBitMap"&gt;&lt;/a&gt;&lt;a href="#ParallelOldMTUnsafeMarkBitMap"&gt;ParallelOldMTUnsafeMarkBitMap&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use the Parallel Old MT unsafe in marking the bitmap&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="ParallelOldMTUnsafeUpdateLiveData"&gt;&lt;/a&gt;&lt;a href="#ParallelOldMTUnsafeUpdateLiveData"&gt;ParallelOldMTUnsafeUpdateLiveData&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use the Parallel Old MT unsafe in update of live size&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceChunkTasksQueuing"&gt;&lt;/a&gt;&lt;a href="#TraceChunkTasksQueuing"&gt;TraceChunkTasksQueuing&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace the queuing of the chunk tasks&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ScavengeWithObjectsInToSpace"&gt;&lt;/a&gt;&lt;a href="#ScavengeWithObjectsInToSpace"&gt;ScavengeWithObjectsInToSpace&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Allow scavenges to occur when to_space contains objects.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseCMSAdaptiveFreeLists"&gt;&lt;/a&gt;&lt;a href="#UseCMSAdaptiveFreeLists"&gt;UseCMSAdaptiveFreeLists&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use Adaptive Free Lists in the CMS generation&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseAsyncConcMarkSweepGC"&gt;&lt;/a&gt;&lt;a href="#UseAsyncConcMarkSweepGC"&gt;UseAsyncConcMarkSweepGC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use Asynchronous Concurrent Mark-Sweep GC in the old generation&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="RotateCMSCollectionTypes"&gt;&lt;/a&gt;&lt;a href="#RotateCMSCollectionTypes"&gt;RotateCMSCollectionTypes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Rotate the CMS collections among concurrent and STW&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSTraceIncrementalMode"&gt;&lt;/a&gt;&lt;a href="#CMSTraceIncrementalMode"&gt;CMSTraceIncrementalMode&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace CMS incremental mode&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSTraceIncrementalPacing"&gt;&lt;/a&gt;&lt;a href="#CMSTraceIncrementalPacing"&gt;CMSTraceIncrementalPacing&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace CMS incremental mode pacing computation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSTraceThreadState"&gt;&lt;/a&gt;&lt;a href="#CMSTraceThreadState"&gt;CMSTraceThreadState&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace the CMS thread state (enable the trace_state() method)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSDictionaryChoice"&gt;&lt;/a&gt;&lt;a href="#CMSDictionaryChoice"&gt;CMSDictionaryChoice&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use BinaryTreeDictionary as default in the CMS generation&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSOverflowEarlyRestoration"&gt;&lt;/a&gt;&lt;a href="#CMSOverflowEarlyRestoration"&gt;CMSOverflowEarlyRestoration&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Whether preserved marks should be restored early&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSTraceSweeper"&gt;&lt;/a&gt;&lt;a href="#CMSTraceSweeper"&gt;CMSTraceSweeper&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace some actions of the CMS sweeper&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="FLSVerifyDictionary"&gt;&lt;/a&gt;&lt;a href="#FLSVerifyDictionary"&gt;FLSVerifyDictionary&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Do lots of (expensive) FLS dictionary verification&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyBlockOffsetArray"&gt;&lt;/a&gt;&lt;a href="#VerifyBlockOffsetArray"&gt;VerifyBlockOffsetArray&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Do (expensive!) block offset array verification&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceCMSState"&gt;&lt;/a&gt;&lt;a href="#TraceCMSState"&gt;TraceCMSState&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace the state of the CMS collection&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSTestInFreeList"&gt;&lt;/a&gt;&lt;a href="#CMSTestInFreeList"&gt;CMSTestInFreeList&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Check if the coalesced range is already in the free lists as claimed.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSIgnoreResurrection"&gt;&lt;/a&gt;&lt;a href="#CMSIgnoreResurrection"&gt;CMSIgnoreResurrection&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Ignore object resurrection during the verification.&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="FullGCALot"&gt;&lt;/a&gt;&lt;a href="#FullGCALot"&gt;FullGCALot&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Force full gc at every Nth exit from the runtime system (N=FullGCALotInterval)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PromotionFailureALotCount"&gt;&lt;/a&gt;&lt;a href="#PromotionFailureALotCount"&gt;PromotionFailureALotCount&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of promotion failures occurring at ParGCAllocBuffer" refill attempts (ParNew) or promotion attempts (other young collectors)&lt;/td&gt;&lt;td&gt;1000&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PromotionFailureALotInterval"&gt;&lt;/a&gt;&lt;a href="#PromotionFailureALotInterval"&gt;PromotionFailureALotInterval&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Total collections between promotion failures alot&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="WorkStealingSleepMillis"&gt;&lt;/a&gt;&lt;a href="#WorkStealingSleepMillis"&gt;WorkStealingSleepMillis&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Sleep time when sleep is used for yields&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="WorkStealingYieldsBeforeSleep"&gt;&lt;/a&gt;&lt;a href="#WorkStealingYieldsBeforeSleep"&gt;WorkStealingYieldsBeforeSleep&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of yields before a sleep is done during workstealing&lt;/td&gt;&lt;td&gt;1000&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceAdaptiveGCBoundary"&gt;&lt;/a&gt;&lt;a href="#TraceAdaptiveGCBoundary"&gt;TraceAdaptiveGCBoundary&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace young-old boundary moves&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="PSAdaptiveSizePolicyResizeVirtualSpaceAlot"&gt;&lt;/a&gt;&lt;a href="#PSAdaptiveSizePolicyResizeVirtualSpaceAlot"&gt;PSAdaptiveSizePolicyResizeVirtualSpaceAlot&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Resize the virtual spaces of the young or old generations&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="PSAdjustTenuredGenForMinorPause"&gt;&lt;/a&gt;&lt;a href="#PSAdjustTenuredGenForMinorPause"&gt;PSAdjustTenuredGenForMinorPause&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Adjust tenured generation to achive a minor pause goal&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PSAdjustYoungGenForMajorPause"&gt;&lt;/a&gt;&lt;a href="#PSAdjustYoungGenForMajorPause"&gt;PSAdjustYoungGenForMajorPause&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Adjust young generation to achive a major pause goal&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AdaptiveSizePolicyReadyThreshold"&gt;&lt;/a&gt;&lt;a href="#AdaptiveSizePolicyReadyThreshold"&gt;AdaptiveSizePolicyReadyThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of collections before the adaptive sizing is started&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="AdaptiveSizePolicyGCTimeLimitThreshold"&gt;&lt;/a&gt;&lt;a href="#AdaptiveSizePolicyGCTimeLimitThreshold"&gt;AdaptiveSizePolicyGCTimeLimitThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of consecutive collections before gc time limit fires&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UsePrefetchQueue"&gt;&lt;/a&gt;&lt;a href="#UsePrefetchQueue"&gt;UsePrefetchQueue&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use the prefetch queue during PS promotion&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ConcGCYieldTimeout"&gt;&lt;/a&gt;&lt;a href="#ConcGCYieldTimeout"&gt;ConcGCYieldTimeout&lt;/a&gt;&lt;/td&gt;&lt;td&gt;If non-zero, assert that GC threads yield within this # of ms.&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceReferenceGC"&gt;&lt;/a&gt;&lt;a href="#TraceReferenceGC"&gt;TraceReferenceGC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace handling of soft/weak/final/phantom references&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceFinalizerRegistration"&gt;&lt;/a&gt;&lt;a href="#TraceFinalizerRegistration"&gt;TraceFinalizerRegistration&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace registration of final references&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceWorkGang"&gt;&lt;/a&gt;&lt;a href="#TraceWorkGang"&gt;TraceWorkGang&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace activities of work gangs&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceBlockOffsetTable"&gt;&lt;/a&gt;&lt;a href="#TraceBlockOffsetTable"&gt;TraceBlockOffsetTable&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print BlockOffsetTable maps&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceCardTableModRefBS"&gt;&lt;/a&gt;&lt;a href="#TraceCardTableModRefBS"&gt;TraceCardTableModRefBS&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print CardTableModRefBS maps&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceGCTaskManager"&gt;&lt;/a&gt;&lt;a href="#TraceGCTaskManager"&gt;TraceGCTaskManager&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace actions of the GC task manager&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceGCTaskQueue"&gt;&lt;/a&gt;&lt;a href="#TraceGCTaskQueue"&gt;TraceGCTaskQueue&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace actions of the GC task queues&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceGCTaskThread"&gt;&lt;/a&gt;&lt;a href="#TraceGCTaskThread"&gt;TraceGCTaskThread&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace actions of the GC task threads&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceParallelOldGCMarkingPhase"&gt;&lt;/a&gt;&lt;a href="#TraceParallelOldGCMarkingPhase"&gt;TraceParallelOldGCMarkingPhase&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace parallel old gc marking phase&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceParallelOldGCSummaryPhase"&gt;&lt;/a&gt;&lt;a href="#TraceParallelOldGCSummaryPhase"&gt;TraceParallelOldGCSummaryPhase&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace parallel old gc summary phase&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="TraceParallelOldGCCompactionPhase"&gt;&lt;/a&gt;&lt;a href="#TraceParallelOldGCCompactionPhase"&gt;TraceParallelOldGCCompactionPhase&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace parallel old gc compaction phase&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceParallelOldGCDensePrefix"&gt;&lt;/a&gt;&lt;a href="#TraceParallelOldGCDensePrefix"&gt;TraceParallelOldGCDensePrefix&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace parallel old gc dense prefix computation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="IgnoreLibthreadGPFault"&gt;&lt;/a&gt;&lt;a href="#IgnoreLibthreadGPFault"&gt;IgnoreLibthreadGPFault&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Suppress workaround for libthread GP fault&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CIPrintCompilerName"&gt;&lt;/a&gt;&lt;a href="#CIPrintCompilerName"&gt;CIPrintCompilerName&lt;/a&gt;&lt;/td&gt;&lt;td&gt;when CIPrint is active, print the name of the active compiler&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CIPrintCompileQueue"&gt;&lt;/a&gt;&lt;a href="#CIPrintCompileQueue"&gt;CIPrintCompileQueue&lt;/a&gt;&lt;/td&gt;&lt;td&gt;display the contents of the compile queue whenever a compilation is enqueued&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CIPrintRequests"&gt;&lt;/a&gt;&lt;a href="#CIPrintRequests"&gt;CIPrintRequests&lt;/a&gt;&lt;/td&gt;&lt;td&gt;display every request for compilation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CITimeEach"&gt;&lt;/a&gt;&lt;a href="#CITimeEach"&gt;CITimeEach&lt;/a&gt;&lt;/td&gt;&lt;td&gt;display timing information after each successful compilation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CICountOSR"&gt;&lt;/a&gt;&lt;a href="#CICountOSR"&gt;CICountOSR&lt;/a&gt;&lt;/td&gt;&lt;td&gt;use a separate counter when assigning ids to osr compilations&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CICompileNatives"&gt;&lt;/a&gt;&lt;a href="#CICompileNatives"&gt;CICompileNatives&lt;/a&gt;&lt;/td&gt;&lt;td&gt;compile native methods if supported by the compiler&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CIPrintMethodCodes"&gt;&lt;/a&gt;&lt;a href="#CIPrintMethodCodes"&gt;CIPrintMethodCodes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;print method bytecodes of the compiled code&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CIPrintTypeFlow"&gt;&lt;/a&gt;&lt;a href="#CIPrintTypeFlow"&gt;CIPrintTypeFlow&lt;/a&gt;&lt;/td&gt;&lt;td&gt;print the results of ciTypeFlow analysis&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CITraceTypeFlow"&gt;&lt;/a&gt;&lt;a href="#CITraceTypeFlow"&gt;CITraceTypeFlow&lt;/a&gt;&lt;/td&gt;&lt;td&gt;detailed per-bytecode tracing of ciTypeFlow analysis&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CICloneLoopTestLimit"&gt;&lt;/a&gt;&lt;a href="#CICloneLoopTestLimit"&gt;CICloneLoopTestLimit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;size limit for blocks heuristically cloned in ciTypeFlow&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseStackBanging"&gt;&lt;/a&gt;&lt;a href="#UseStackBanging"&gt;UseStackBanging&lt;/a&gt;&lt;/td&gt;&lt;td&gt;use stack banging for stack overflow checks (required for proper StackOverflow handling; disable only to measure cost of stackbanging)&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="Use24BitFPMode"&gt;&lt;/a&gt;&lt;a href="#Use24BitFPMode"&gt;Use24BitFPMode&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Set 24-bit FPU mode on a per-compile basis&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="Use24BitFP"&gt;&lt;/a&gt;&lt;a href="#Use24BitFP"&gt;Use24BitFP&lt;/a&gt;&lt;/td&gt;&lt;td&gt;use FP instructions that produce 24-bit precise results&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseStrictFP"&gt;&lt;/a&gt;&lt;a href="#UseStrictFP"&gt;UseStrictFP&lt;/a&gt;&lt;/td&gt;&lt;td&gt;use strict fp if modifier strictfp is set&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="GenerateSynchronizationCode"&gt;&lt;/a&gt;&lt;a href="#GenerateSynchronizationCode"&gt;GenerateSynchronizationCode&lt;/a&gt;&lt;/td&gt;&lt;td&gt;generate locking/unlocking code for synchronized methods and monitors&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="GenerateCompilerNullChecks"&gt;&lt;/a&gt;&lt;a href="#GenerateCompilerNullChecks"&gt;GenerateCompilerNullChecks&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Generate explicit null checks for loads/stores/calls&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="GenerateRangeChecks"&gt;&lt;/a&gt;&lt;a href="#GenerateRangeChecks"&gt;GenerateRangeChecks&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Generate range checks for array accesses&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintSafepointStatistics"&gt;&lt;/a&gt;&lt;a href="#PrintSafepointStatistics"&gt;PrintSafepointStatistics&lt;/a&gt;&lt;/td&gt;&lt;td&gt;print statistics about safepoint synchronization&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InlineAccessors"&gt;&lt;/a&gt;&lt;a href="#InlineAccessors"&gt;InlineAccessors&lt;/a&gt;&lt;/td&gt;&lt;td&gt;inline accessor methods (get/set)&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseCHA"&gt;&lt;/a&gt;&lt;a href="#UseCHA"&gt;UseCHA&lt;/a&gt;&lt;/td&gt;&lt;td&gt;enable CHA&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintInlining"&gt;&lt;/a&gt;&lt;a href="#PrintInlining"&gt;PrintInlining&lt;/a&gt;&lt;/td&gt;&lt;td&gt;prints inlining optimizations&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="EagerInitialization"&gt;&lt;/a&gt;&lt;a href="#EagerInitialization"&gt;EagerInitialization&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Eagerly initialize classes if possible&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceMethodReplacement"&gt;&lt;/a&gt;&lt;a href="#TraceMethodReplacement"&gt;TraceMethodReplacement&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print when methods are replaced do to recompilation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintMethodFlushing"&gt;&lt;/a&gt;&lt;a href="#PrintMethodFlushing"&gt;PrintMethodFlushing&lt;/a&gt;&lt;/td&gt;&lt;td&gt;print the nmethods being flushed&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseRelocIndex"&gt;&lt;/a&gt;&lt;a href="#UseRelocIndex"&gt;UseRelocIndex&lt;/a&gt;&lt;/td&gt;&lt;td&gt;use an index to speed random access to relocations&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="StressCodeBuffers"&gt;&lt;/a&gt;&lt;a href="#StressCodeBuffers"&gt;StressCodeBuffers&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Exercise code buffer expansion and other rare state changes&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DebugVtables"&gt;&lt;/a&gt;&lt;a href="#DebugVtables"&gt;DebugVtables&lt;/a&gt;&lt;/td&gt;&lt;td&gt;add debugging code to vtable dispatch&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintVtables"&gt;&lt;/a&gt;&lt;a href="#PrintVtables"&gt;PrintVtables&lt;/a&gt;&lt;/td&gt;&lt;td&gt;print vtables when printing klass&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceCreateZombies"&gt;&lt;/a&gt;&lt;a href="#TraceCreateZombies"&gt;TraceCreateZombies&lt;/a&gt;&lt;/td&gt;&lt;td&gt;trace creation of zombie nmethods&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MonomorphicArrayCheck"&gt;&lt;/a&gt;&lt;a href="#MonomorphicArrayCheck"&gt;MonomorphicArrayCheck&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Uncommon-trap array store checks that require full type check&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DelayCompilationDuringStartup"&gt;&lt;/a&gt;&lt;a href="#DelayCompilationDuringStartup"&gt;DelayCompilationDuringStartup&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Delay invoking the compiler until main application class is loaded&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CompileTheWorld"&gt;&lt;/a&gt;&lt;a href="#CompileTheWorld"&gt;CompileTheWorld&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Compile all methods in all classes in bootstrap class path (stress test)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CompileTheWorldPreloadClasses"&gt;&lt;/a&gt;&lt;a href="#CompileTheWorldPreloadClasses"&gt;CompileTheWorldPreloadClasses&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Preload all classes used by a class before start loading&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceIterativeGVN"&gt;&lt;/a&gt;&lt;a href="#TraceIterativeGVN"&gt;TraceIterativeGVN&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print progress during Iterative Global Value Numbering&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="FillDelaySlots"&gt;&lt;/a&gt;&lt;a href="#FillDelaySlots"&gt;FillDelaySlots&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Fill delay slots (on SPARC only)&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyIterativeGVN"&gt;&lt;/a&gt;&lt;a href="#VerifyIterativeGVN"&gt;VerifyIterativeGVN&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify Def-Use modifications during sparse Iterative Global Value Numbering&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TimeLivenessAnalysis"&gt;&lt;/a&gt;&lt;a href="#TimeLivenessAnalysis"&gt;TimeLivenessAnalysis&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Time computation of bytecode liveness analysis&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceLivenessGen"&gt;&lt;/a&gt;&lt;a href="#TraceLivenessGen"&gt;TraceLivenessGen&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace the generation of liveness analysis information&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintDominators"&gt;&lt;/a&gt;&lt;a href="#PrintDominators"&gt;PrintDominators&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print out dominator trees for GVN&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseLoopSafepoints"&gt;&lt;/a&gt;&lt;a href="#UseLoopSafepoints"&gt;UseLoopSafepoints&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Generate Safepoint nodes in every loop&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DeutschShiffmanExceptions"&gt;&lt;/a&gt;&lt;a href="#DeutschShiffmanExceptions"&gt;DeutschShiffmanExceptions&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Fast check to find exception handler for precisely typed exceptions&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="FastAllocateSizeLimit"&gt;&lt;/a&gt;&lt;a href="#FastAllocateSizeLimit"&gt;FastAllocateSizeLimit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Inline allocations larger than this in doublewords must go slow&lt;/td&gt;&lt;td&gt;100000&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseVTune"&gt;&lt;/a&gt;&lt;a href="#UseVTune"&gt;UseVTune&lt;/a&gt;&lt;/td&gt;&lt;td&gt;enable support for Intel's VTune profiler&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CountCompiledCalls"&gt;&lt;/a&gt;&lt;a href="#CountCompiledCalls"&gt;CountCompiledCalls&lt;/a&gt;&lt;/td&gt;&lt;td&gt;counts method invocations&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CountJNICalls"&gt;&lt;/a&gt;&lt;a href="#CountJNICalls"&gt;CountJNICalls&lt;/a&gt;&lt;/td&gt;&lt;td&gt;counts jni method invocations&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ClearInterpreterLocals"&gt;&lt;/a&gt;&lt;a href="#ClearInterpreterLocals"&gt;ClearInterpreterLocals&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Always clear local variables of interpreter activations upon entry&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseFastSignatureHandlers"&gt;&lt;/a&gt;&lt;a href="#UseFastSignatureHandlers"&gt;UseFastSignatureHandlers&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use fast signature handlers for native calls&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseV8InstrsOnly"&gt;&lt;/a&gt;&lt;a href="#UseV8InstrsOnly"&gt;UseV8InstrsOnly&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use SPARC-V8 Compliant instruction subset&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseCASForSwap"&gt;&lt;/a&gt;&lt;a href="#UseCASForSwap"&gt;UseCASForSwap&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Do not use swap instructions, but only CAS (in a loop) on SPARC&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PoisonOSREntry"&gt;&lt;/a&gt;&lt;a href="#PoisonOSREntry"&gt;PoisonOSREntry&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Detect abnormal calls to OSR code&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CountBytecodes"&gt;&lt;/a&gt;&lt;a href="#CountBytecodes"&gt;CountBytecodes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Count number of bytecodes executed&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintBytecodeHistogram"&gt;&lt;/a&gt;&lt;a href="#PrintBytecodeHistogram"&gt;PrintBytecodeHistogram&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print histogram of the executed bytecodes&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintBytecodePairHistogram"&gt;&lt;/a&gt;&lt;a href="#PrintBytecodePairHistogram"&gt;PrintBytecodePairHistogram&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print histogram of the executed bytecode pairs&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintSignatureHandlers"&gt;&lt;/a&gt;&lt;a href="#PrintSignatureHandlers"&gt;PrintSignatureHandlers&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print code generated for native method signature handlers&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyOops"&gt;&lt;/a&gt;&lt;a href="#VerifyOops"&gt;VerifyOops&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Do plausibility checks for oops&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CheckUnhandledOops"&gt;&lt;/a&gt;&lt;a href="#CheckUnhandledOops"&gt;CheckUnhandledOops&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Check for unhandled oops in VM code&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyJNIFields"&gt;&lt;/a&gt;&lt;a href="#VerifyJNIFields"&gt;VerifyJNIFields&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify jfieldIDs for instance fields&lt;/td&gt;&lt;td&gt;trueInDebug&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyFPU"&gt;&lt;/a&gt;&lt;a href="#VerifyFPU"&gt;VerifyFPU&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify FPU state (check for NaN's, etc.)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyThread"&gt;&lt;/a&gt;&lt;a href="#VerifyThread"&gt;VerifyThread&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Watch the thread register for corruption (SPARC only)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyActivationFrameSize"&gt;&lt;/a&gt;&lt;a href="#VerifyActivationFrameSize"&gt;VerifyActivationFrameSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify that activation frame didn't become smaller than its minimal size&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceFrequencyInlining"&gt;&lt;/a&gt;&lt;a href="#TraceFrequencyInlining"&gt;TraceFrequencyInlining&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace frequency based inlining&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintMethodData"&gt;&lt;/a&gt;&lt;a href="#PrintMethodData"&gt;PrintMethodData&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print the results of +ProfileInterpreter at end of run&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyDataPointer"&gt;&lt;/a&gt;&lt;a href="#VerifyDataPointer"&gt;VerifyDataPointer&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify the method data pointer during interpreter profiling&lt;/td&gt;&lt;td&gt;trueInDebug&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceCompilationPolicy"&gt;&lt;/a&gt;&lt;a href="#TraceCompilationPolicy"&gt;TraceCompilationPolicy&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace compilation policy&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TimeCompilationPolicy"&gt;&lt;/a&gt;&lt;a href="#TimeCompilationPolicy"&gt;TimeCompilationPolicy&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Time the compilation policy&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CounterHalfLifeTime"&gt;&lt;/a&gt;&lt;a href="#CounterHalfLifeTime"&gt;CounterHalfLifeTime&lt;/a&gt;&lt;/td&gt;&lt;td&gt;half-life time of invocation counters (in secs)&lt;/td&gt;&lt;td&gt;30&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CounterDecayMinIntervalLength"&gt;&lt;/a&gt;&lt;a href="#CounterDecayMinIntervalLength"&gt;CounterDecayMinIntervalLength&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Min. ms. between invocation of CounterDecay&lt;/td&gt;&lt;td&gt;500&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceDeoptimization"&gt;&lt;/a&gt;&lt;a href="#TraceDeoptimization"&gt;TraceDeoptimization&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace deoptimization&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DebugDeoptimization"&gt;&lt;/a&gt;&lt;a href="#DebugDeoptimization"&gt;DebugDeoptimization&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Tracing various information while debugging deoptimization&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="GuaranteedSafepointInterval"&gt;&lt;/a&gt;&lt;a href="#GuaranteedSafepointInterval"&gt;GuaranteedSafepointInterval&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Guarantee a safepoint (at least) every so many milliseconds (0 means none)&lt;/td&gt;&lt;td&gt;1000&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SafepointTimeoutDelay"&gt;&lt;/a&gt;&lt;a href="#SafepointTimeoutDelay"&gt;SafepointTimeoutDelay&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Delay in milliseconds for option SafepointTimeout&lt;/td&gt;&lt;td&gt;10000&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MallocCatchPtr"&gt;&lt;/a&gt;&lt;a href="#MallocCatchPtr"&gt;MallocCatchPtr&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Hit breakpoint when mallocing/freeing this pointer&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TotalHandleAllocationLimit"&gt;&lt;/a&gt;&lt;a href="#TotalHandleAllocationLimit"&gt;TotalHandleAllocationLimit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Threshold for total handle allocation when +TraceHandleAllocation is used&lt;/td&gt;&lt;td&gt;1024&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="StackPrintLimit"&gt;&lt;/a&gt;&lt;a href="#StackPrintLimit"&gt;StackPrintLimit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;number of stack frames to print in VM-level stack dump&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxInlineLevel"&gt;&lt;/a&gt;&lt;a href="#MaxInlineLevel"&gt;MaxInlineLevel&lt;/a&gt;&lt;/td&gt;&lt;td&gt;maximum number of nested calls that are inlined&lt;/td&gt;&lt;td&gt;9&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxRecursiveInlineLevel"&gt;&lt;/a&gt;&lt;a href="#MaxRecursiveInlineLevel"&gt;MaxRecursiveInlineLevel&lt;/a&gt;&lt;/td&gt;&lt;td&gt;maximum number of nested recursive calls that are inlined&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InlineSmallCode"&gt;&lt;/a&gt;&lt;a href="#InlineSmallCode"&gt;InlineSmallCode&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Only inline already compiled methods if their code size is less than this&lt;/td&gt;&lt;td&gt;1000&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxTrivialSize"&gt;&lt;/a&gt;&lt;a href="#MaxTrivialSize"&gt;MaxTrivialSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;maximum bytecode size of a trivial method to be inlined&lt;/td&gt;&lt;td&gt;6&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MinInliningThreshold"&gt;&lt;/a&gt;&lt;a href="#MinInliningThreshold"&gt;MinInliningThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;min. invocation count a method needs to have to be inlined&lt;/td&gt;&lt;td&gt;250&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AlignEntryCode"&gt;&lt;/a&gt;&lt;a href="#AlignEntryCode"&gt;AlignEntryCode&lt;/a&gt;&lt;/td&gt;&lt;td&gt;aligns entry code to specified value (in bytes)&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MethodHistogramCutoff"&gt;&lt;/a&gt;&lt;a href="#MethodHistogramCutoff"&gt;MethodHistogramCutoff&lt;/a&gt;&lt;/td&gt;&lt;td&gt;cutoff value for method invoc. histogram (+CountCalls)&lt;/td&gt;&lt;td&gt;100&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="ProfilerNumberOfInterpretedMethods"&gt;&lt;/a&gt;&lt;a href="#ProfilerNumberOfInterpretedMethods"&gt;ProfilerNumberOfInterpretedMethods&lt;/a&gt;&lt;/td&gt;&lt;td&gt;# of interpreted methods to show in profile&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="ProfilerNumberOfCompiledMethods"&gt;&lt;/a&gt;&lt;a href="#ProfilerNumberOfCompiledMethods"&gt;ProfilerNumberOfCompiledMethods&lt;/a&gt;&lt;/td&gt;&lt;td&gt;# of compiled methods to show in profile&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ProfilerNumberOfStubMethods"&gt;&lt;/a&gt;&lt;a href="#ProfilerNumberOfStubMethods"&gt;ProfilerNumberOfStubMethods&lt;/a&gt;&lt;/td&gt;&lt;td&gt;# of stub methods to show in profile&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="ProfilerNumberOfRuntimeStubNodes"&gt;&lt;/a&gt;&lt;a href="#ProfilerNumberOfRuntimeStubNodes"&gt;ProfilerNumberOfRuntimeStubNodes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;# of runtime stub nodes to show in profile&lt;/td&gt;&lt;td&gt;25&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DontYieldALotInterval"&gt;&lt;/a&gt;&lt;a href="#DontYieldALotInterval"&gt;DontYieldALotInterval&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Interval between which yields will be dropped (milliseconds)&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MinSleepInterval"&gt;&lt;/a&gt;&lt;a href="#MinSleepInterval"&gt;MinSleepInterval&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Minimum sleep() interval (milliseconds) when ConvertSleepToYield is off (used for SOLARIS)&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ProfilerPCTickThreshold"&gt;&lt;/a&gt;&lt;a href="#ProfilerPCTickThreshold"&gt;ProfilerPCTickThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of ticks in a PC buckets to be a hotspot&lt;/td&gt;&lt;td&gt;15&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="StressNonEntrant"&gt;&lt;/a&gt;&lt;a href="#StressNonEntrant"&gt;StressNonEntrant&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Mark nmethods non-entrant at registration&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TypeProfileWidth"&gt;&lt;/a&gt;&lt;a href="#TypeProfileWidth"&gt;TypeProfileWidth&lt;/a&gt;&lt;/td&gt;&lt;td&gt;number of receiver types to record in call profile&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="BciProfileWidth"&gt;&lt;/a&gt;&lt;a href="#BciProfileWidth"&gt;BciProfileWidth&lt;/a&gt;&lt;/td&gt;&lt;td&gt;number of return bci's to record in ret profile&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="FreqCountInvocations"&gt;&lt;/a&gt;&lt;a href="#FreqCountInvocations"&gt;FreqCountInvocations&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Scaling factor for branch frequencies (deprecated)&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InlineFrequencyRatio"&gt;&lt;/a&gt;&lt;a href="#InlineFrequencyRatio"&gt;InlineFrequencyRatio&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Ratio of call site execution to caller method invocation&lt;/td&gt;&lt;td&gt;20&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InlineThrowCount"&gt;&lt;/a&gt;&lt;a href="#InlineThrowCount"&gt;InlineThrowCount&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Force inlining of interpreted methods that throw this often&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InlineThrowMaxSize"&gt;&lt;/a&gt;&lt;a href="#InlineThrowMaxSize"&gt;InlineThrowMaxSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Force inlining of throwing methods smaller than this&lt;/td&gt;&lt;td&gt;200&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyAliases"&gt;&lt;/a&gt;&lt;a href="#VerifyAliases"&gt;VerifyAliases&lt;/a&gt;&lt;/td&gt;&lt;td&gt;perform extra checks on the results of alias analysis&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ProfilerNodeSize"&gt;&lt;/a&gt;&lt;a href="#ProfilerNodeSize"&gt;ProfilerNodeSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Size in K to allocate for the Profile Nodes of each thread&lt;/td&gt;&lt;td&gt;1024&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td style="word-break:break-all;"&gt;&lt;a href="" name="V8AtomicOperationUnderLockSpinCount"&gt;&lt;/a&gt;&lt;a href="#V8AtomicOperationUnderLockSpinCount"&gt;V8AtomicOperationUnderLockSpinCount&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of times to spin wait on a v8 atomic operation lock&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ExitAfterGCNum"&gt;&lt;/a&gt;&lt;a href="#ExitAfterGCNum"&gt;ExitAfterGCNum&lt;/a&gt;&lt;/td&gt;&lt;td&gt;If non-zero, exit after this GC.&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="GCExpandToAllocateDelayMillis"&gt;&lt;/a&gt;&lt;a href="#GCExpandToAllocateDelayMillis"&gt;GCExpandToAllocateDelayMillis&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Delay in ms between expansion and allocation&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CodeCacheSegmentSize"&gt;&lt;/a&gt;&lt;a href="#CodeCacheSegmentSize"&gt;CodeCacheSegmentSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Code cache segment size (in bytes) - smallest unit of allocation&lt;/td&gt;&lt;td&gt;64&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="BinarySwitchThreshold"&gt;&lt;/a&gt;&lt;a href="#BinarySwitchThreshold"&gt;BinarySwitchThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Minimal number of lookupswitch entries for rewriting to binary switch&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="StopInterpreterAt"&gt;&lt;/a&gt;&lt;a href="#StopInterpreterAt"&gt;StopInterpreterAt&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Stops interpreter execution at specified bytecode number&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceBytecodesAt"&gt;&lt;/a&gt;&lt;a href="#TraceBytecodesAt"&gt;TraceBytecodesAt&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Traces bytecodes starting with specified bytecode number&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CIStart"&gt;&lt;/a&gt;&lt;a href="#CIStart"&gt;CIStart&lt;/a&gt;&lt;/td&gt;&lt;td&gt;the id of the first compilation to permit&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CIStop"&gt;&lt;/a&gt;&lt;a href="#CIStop"&gt;CIStop&lt;/a&gt;&lt;/td&gt;&lt;td&gt;the id of the last compilation to permit&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CIStartOSR"&gt;&lt;/a&gt;&lt;a href="#CIStartOSR"&gt;CIStartOSR&lt;/a&gt;&lt;/td&gt;&lt;td&gt;the id of the first osr compilation to permit (CICountOSR must be on)&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CIStopOSR"&gt;&lt;/a&gt;&lt;a href="#CIStopOSR"&gt;CIStopOSR&lt;/a&gt;&lt;/td&gt;&lt;td&gt;the id of the last osr compilation to permit (CICountOSR must be on)&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CIBreakAtOSR"&gt;&lt;/a&gt;&lt;a href="#CIBreakAtOSR"&gt;CIBreakAtOSR&lt;/a&gt;&lt;/td&gt;&lt;td&gt;id of osr compilation to break at&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CIBreakAt"&gt;&lt;/a&gt;&lt;a href="#CIBreakAt"&gt;CIBreakAt&lt;/a&gt;&lt;/td&gt;&lt;td&gt;id of compilation to break at&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CIFireOOMAt"&gt;&lt;/a&gt;&lt;a href="#CIFireOOMAt"&gt;CIFireOOMAt&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Fire OutOfMemoryErrors throughout CI for testing the compiler (non-negative value throws OOM after this many CI accesses in each compile)&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CIFireOOMAtDelay"&gt;&lt;/a&gt;&lt;a href="#CIFireOOMAtDelay"&gt;CIFireOOMAtDelay&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Wait for this many CI accesses to occur in all compiles before beginning to throw OutOfMemoryErrors in each compile&lt;/td&gt;&lt;td&gt;-1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="NewCodeParameter"&gt;&lt;/a&gt;&lt;a href="#NewCodeParameter"&gt;NewCodeParameter&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Testing Only: Create a dedicated integer parameter before putback&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MinOopMapAllocation"&gt;&lt;/a&gt;&lt;a href="#MinOopMapAllocation"&gt;MinOopMapAllocation&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Minimum number of OopMap entries in an OopMapSet&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="LongCompileThreshold"&gt;&lt;/a&gt;&lt;a href="#LongCompileThreshold"&gt;LongCompileThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Used with +TraceLongCompiles&lt;/td&gt;&lt;td&gt;50&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxRecompilationSearchLength"&gt;&lt;/a&gt;&lt;a href="#MaxRecompilationSearchLength"&gt;MaxRecompilationSearchLength&lt;/a&gt;&lt;/td&gt;&lt;td&gt;max. # frames to inspect searching for recompilee&lt;/td&gt;&lt;td&gt;10&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxInterpretedSearchLength"&gt;&lt;/a&gt;&lt;a href="#MaxInterpretedSearchLength"&gt;MaxInterpretedSearchLength&lt;/a&gt;&lt;/td&gt;&lt;td&gt;max. # interp. frames to skip when searching for recompilee&lt;/td&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DesiredMethodLimit"&gt;&lt;/a&gt;&lt;a href="#DesiredMethodLimit"&gt;DesiredMethodLimit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;desired max. method size (in bytecodes) after inlining&lt;/td&gt;&lt;td&gt;8000&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="HugeMethodLimit"&gt;&lt;/a&gt;&lt;a href="#HugeMethodLimit"&gt;HugeMethodLimit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;don't compile methods larger than this if +DontCompileHugeMethods&lt;/td&gt;&lt;td&gt;8000&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseNewReflection"&gt;&lt;/a&gt;&lt;a href="#UseNewReflection"&gt;UseNewReflection&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Temporary flag for transition to reflection based on dynamic bytecode generation in 1.4; can no longer be turned off in 1.4 JDK, and is unneeded in 1.3 JDK, but marks most places VM changes were needed&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyReflectionBytecodes"&gt;&lt;/a&gt;&lt;a href="#VerifyReflectionBytecodes"&gt;VerifyReflectionBytecodes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Force verification of 1.4 reflection bytecodes. Does not work in situations like that described in 4486457 or for constructors generated for serialization, so can not be enabled in product.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="FastSuperclassLimit"&gt;&lt;/a&gt;&lt;a href="#FastSuperclassLimit"&gt;FastSuperclassLimit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Depth of hardwired instanceof accelerator array&lt;/td&gt;&lt;td&gt;8&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PerfTraceDataCreation"&gt;&lt;/a&gt;&lt;a href="#PerfTraceDataCreation"&gt;PerfTraceDataCreation&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace creation of Performance Data Entries&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PerfTraceMemOps"&gt;&lt;/a&gt;&lt;a href="#PerfTraceMemOps"&gt;PerfTraceMemOps&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace PerfMemory create/attach/detach calls&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SharedOptimizeColdStartPolicy"&gt;&lt;/a&gt;&lt;a href="#SharedOptimizeColdStartPolicy"&gt;SharedOptimizeColdStartPolicy&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Reordering policy for SharedOptimizeColdStart 0=favor classload-time locality, 1=balanced, 2=favor runtime locality&lt;/td&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;

&lt;tr bgcolor="#e0e0e0"&gt;&lt;td colspan="4"&gt;&lt;a href="" name="product_pd"&gt;product_pd&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseLargePages"&gt;&lt;/a&gt;&lt;a href="#UseLargePages"&gt;UseLargePages&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use large page memory&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseSSE"&gt;&lt;/a&gt;&lt;a href="#UseSSE"&gt;UseSSE&lt;/a&gt;&lt;/td&gt;&lt;td&gt;0=fpu stack,1=SSE for floats,2=SSE/SSE2 for all (x86/amd only)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseISM"&gt;&lt;/a&gt;&lt;a href="#UseISM"&gt;UseISM&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use Intimate Shared Memory. [Not accepted for non-Solaris platforms.] For details, see &lt;a href="http://www.oracle.com/technetwork/java/ism-139376.html"&gt;Intimate Shared Memory&lt;/a&gt;.&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseMPSS"&gt;&lt;/a&gt;&lt;a href="#UseMPSS"&gt;UseMPSS&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use Multiple Page Size Support w/4mb pages for the heap. Do not use with ISM as this replaces the need for ISM. (Introduced in 1.4.0 update 1, Relevant to Solaris 9 and newer.) [1.4.1 and earlier: false]&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="BackgroundCompilation"&gt;&lt;/a&gt;&lt;a href="#BackgroundCompilation"&gt;BackgroundCompilation&lt;/a&gt;&lt;/td&gt;&lt;td&gt;A thread requesting compilation is not blocked during compilation&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseVectoredExceptions"&gt;&lt;/a&gt;&lt;a href="#UseVectoredExceptions"&gt;UseVectoredExceptions&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Temp Flag - Use Vectored Exceptions rather than SEH (Windows Only)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DontYieldALot"&gt;&lt;/a&gt;&lt;a href="#DontYieldALot"&gt;DontYieldALot&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Throw away obvious excess yield calls (for SOLARIS only)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ConvertSleepToYield"&gt;&lt;/a&gt;&lt;a href="#ConvertSleepToYield"&gt;ConvertSleepToYield&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Converts sleep(0) to thread yield (may be off for SOLARIS to improve GUI)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseTLAB"&gt;&lt;/a&gt;&lt;a href="#UseTLAB"&gt;UseTLAB&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use thread-local object allocation&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ResizeTLAB"&gt;&lt;/a&gt;&lt;a href="#ResizeTLAB"&gt;ResizeTLAB&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Dynamically resize tlab size for threads&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="NeverActAsServerClassMachine"&gt;&lt;/a&gt;&lt;a href="#NeverActAsServerClassMachine"&gt;NeverActAsServerClassMachine&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Never act like a server-class machine&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrefetchCopyIntervalInBytes"&gt;&lt;/a&gt;&lt;a href="#PrefetchCopyIntervalInBytes"&gt;PrefetchCopyIntervalInBytes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;How far ahead to prefetch destination area (&amp;lt;= 0 means off)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrefetchScanIntervalInBytes"&gt;&lt;/a&gt;&lt;a href="#PrefetchScanIntervalInBytes"&gt;PrefetchScanIntervalInBytes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;How far ahead to prefetch scan area (&amp;lt;= 0 means off)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrefetchFieldsAhead"&gt;&lt;/a&gt;&lt;a href="#PrefetchFieldsAhead"&gt;PrefetchFieldsAhead&lt;/a&gt;&lt;/td&gt;&lt;td&gt;How many fields ahead to prefetch in oop scan (&amp;lt;= 0 means off)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CompilationPolicyChoice"&gt;&lt;/a&gt;&lt;a href="#CompilationPolicyChoice"&gt;CompilationPolicyChoice&lt;/a&gt;&lt;/td&gt;&lt;td&gt;which compilation policy&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="RewriteBytecodes"&gt;&lt;/a&gt;&lt;a href="#RewriteBytecodes"&gt;RewriteBytecodes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Allow rewriting of bytecodes (bytecodes are not immutable)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="RewriteFrequentPairs"&gt;&lt;/a&gt;&lt;a href="#RewriteFrequentPairs"&gt;RewriteFrequentPairs&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Rewrite frequently used bytecode pairs into a single bytecode&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseOnStackReplacement"&gt;&lt;/a&gt;&lt;a href="#UseOnStackReplacement"&gt;UseOnStackReplacement&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use on stack replacement, calls runtime if invoc. counter overflows in loop&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PreferInterpreterNativeStubs"&gt;&lt;/a&gt;&lt;a href="#PreferInterpreterNativeStubs"&gt;PreferInterpreterNativeStubs&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use always interpreter stubs for native methods invoked via interpreter&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name=" AllocatePrefetchStyle"&gt;&lt;/a&gt;&lt;a href="# AllocatePrefetchStyle"&gt;AllocatePrefetchStyle&lt;/a&gt;&lt;/td&gt;&lt;td&gt;0=no prefetch, 1=dead load, 2=prefetch instruction&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name=" AllocatePrefetchDistance"&gt;&lt;/a&gt;&lt;a href="# AllocatePrefetchDistance"&gt;AllocatePrefetchDistance&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Distance to prefetch ahead of allocation pointer&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="FreqInlineSize"&gt;&lt;/a&gt;&lt;a href="#FreqInlineSize"&gt;FreqInlineSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;maximum bytecode size of a frequent method to be inlined&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PreInflateSpin"&gt;&lt;/a&gt;&lt;a href="#PreInflateSpin"&gt;PreInflateSpin&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of times to spin wait before inflation&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="NewSize"&gt;&lt;/a&gt;&lt;a href="#NewSize"&gt;NewSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Default size of new generation (in bytes)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TLABSize"&gt;&lt;/a&gt;&lt;a href="#TLABSize"&gt;TLABSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Default (or starting) size of TLAB (in bytes)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SurvivorRatio"&gt;&lt;/a&gt;&lt;a href="#SurvivorRatio"&gt;SurvivorRatio&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Ratio of eden/survivor space size&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="NewRatio"&gt;&lt;/a&gt;&lt;a href="#NewRatio"&gt;NewRatio&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Ratio of new/old generation sizes&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="NewSizeThreadIncrease"&gt;&lt;/a&gt;&lt;a href="#NewSizeThreadIncrease"&gt;NewSizeThreadIncrease&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Additional size added to desired new generation size per non-daemon thread (in bytes)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PermSize"&gt;&lt;/a&gt;&lt;a href="#PermSize"&gt;PermSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Default size of permanent generation (in bytes)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxPermSize"&gt;&lt;/a&gt;&lt;a href="#MaxPermSize"&gt;MaxPermSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Maximum size of permanent generation (in bytes)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="StackYellowPages"&gt;&lt;/a&gt;&lt;a href="#StackYellowPages"&gt;StackYellowPages&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of yellow zone (recoverable overflows) pages&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="StackRedPages"&gt;&lt;/a&gt;&lt;a href="#StackRedPages"&gt;StackRedPages&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of red zone (unrecoverable overflows) pages&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="StackShadowPages"&gt;&lt;/a&gt;&lt;a href="#StackShadowPages"&gt;StackShadowPages&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of shadow zone (for overflow checking) pages" this should exceed the depth of the VM and native call stack&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ThreadStackSize"&gt;&lt;/a&gt;&lt;a href="#ThreadStackSize"&gt;ThreadStackSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Thread Stack Size (in Kbytes)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VMThreadStackSize"&gt;&lt;/a&gt;&lt;a href="#VMThreadStackSize"&gt;VMThreadStackSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Non-Java Thread Stack Size (in Kbytes)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CompilerThreadStackSize"&gt;&lt;/a&gt;&lt;a href="#CompilerThreadStackSize"&gt;CompilerThreadStackSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Compiler Thread Stack Size (in Kbytes)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InitialCodeCacheSize"&gt;&lt;/a&gt;&lt;a href="#InitialCodeCacheSize"&gt;InitialCodeCacheSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Initial code cache size (in bytes)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ReservedCodeCacheSize"&gt;&lt;/a&gt;&lt;a href="#ReservedCodeCacheSize"&gt;ReservedCodeCacheSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Reserved code cache size (in bytes) - maximum code cache size&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CodeCacheExpansionSize"&gt;&lt;/a&gt;&lt;a href="#CodeCacheExpansionSize"&gt;CodeCacheExpansionSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Code cache expansion size (in bytes)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CompileThreshold"&gt;&lt;/a&gt;&lt;a href="#CompileThreshold"&gt;CompileThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;number of method invocations/branches before (re-)compiling&lt;/td&gt;&lt;td&gt;10000&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="Tier2CompileThreshold"&gt;&lt;/a&gt;&lt;a href="#Tier2CompileThreshold"&gt;Tier2CompileThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;threshold at which a tier 2 compilation is invoked&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="Tier2BackEdgeThreshold"&gt;&lt;/a&gt;&lt;a href="#Tier2BackEdgeThreshold"&gt;Tier2BackEdgeThreshold&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Back edge threshold at which a tier 2 compilation is invoked&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TieredCompilation"&gt;&lt;/a&gt;&lt;a href="#TieredCompilation"&gt;TieredCompilation&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enable two-tier compilation&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="OnStackReplacePercentage"&gt;&lt;/a&gt;&lt;a href="#OnStackReplacePercentage"&gt;OnStackReplacePercentage&lt;/a&gt;&lt;/td&gt;&lt;td&gt;number of method invocations/branches (expressed as % of CompileThreshold) before (re-)compiling OSR code&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor="#e0e0e0"&gt;&lt;td colspan="4"&gt;&lt;a href="" name="develop_pd"&gt;develop_pd&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ShareVtableStubs"&gt;&lt;/a&gt;&lt;a href="#ShareVtableStubs"&gt;ShareVtableStubs&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Share vtable stubs (smaller code but worse branch prediction&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CICompileOSR"&gt;&lt;/a&gt;&lt;a href="#CICompileOSR"&gt;CICompileOSR&lt;/a&gt;&lt;/td&gt;&lt;td&gt;compile on stack replacement methods if supported by the compiler&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ImplicitNullChecks"&gt;&lt;/a&gt;&lt;a href="#ImplicitNullChecks"&gt;ImplicitNullChecks&lt;/a&gt;&lt;/td&gt;&lt;td&gt;generate code for implicit null checks&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UncommonNullCast"&gt;&lt;/a&gt;&lt;a href="#UncommonNullCast"&gt;UncommonNullCast&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Uncommon-trap NULLs passed to check cast&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InlineIntrinsics"&gt;&lt;/a&gt;&lt;a href="#InlineIntrinsics"&gt;InlineIntrinsics&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Inline intrinsics that can be statically resolved&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ProfileInterpreter"&gt;&lt;/a&gt;&lt;a href="#ProfileInterpreter"&gt;ProfileInterpreter&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Profile at the bytecode level during interpretation&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ProfileTraps"&gt;&lt;/a&gt;&lt;a href="#ProfileTraps"&gt;ProfileTraps&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Profile deoptimization traps at the bytecode level&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="InlineFrequencyCount"&gt;&lt;/a&gt;&lt;a href="#InlineFrequencyCount"&gt;InlineFrequencyCount&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Count of call site execution necessary to trigger frequent inlining&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="JVMInvokeMethodSlack"&gt;&lt;/a&gt;&lt;a href="#JVMInvokeMethodSlack"&gt;JVMInvokeMethodSlack&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Stack space (bytes) required for JVM_InvokeMethod to complete&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CodeEntryAlignment"&gt;&lt;/a&gt;&lt;a href="#CodeEntryAlignment"&gt;CodeEntryAlignment&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Code entry alignment for generated code (in bytes)&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CodeCacheMinBlockLength"&gt;&lt;/a&gt;&lt;a href="#CodeCacheMinBlockLength"&gt;CodeCacheMinBlockLength&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Minimum number of segments in a code cache block.&lt;/td&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor="#e0e0e0"&gt;&lt;td colspan="4"&gt;&lt;a href="" name="notproduct"&gt;notproduct&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="StressDerivedPointers"&gt;&lt;/a&gt;&lt;a href="#StressDerivedPointers"&gt;StressDerivedPointers&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Force scavenge when a derived pointers is detected on stack after rtm call&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceCodeBlobStacks"&gt;&lt;/a&gt;&lt;a href="#TraceCodeBlobStacks"&gt;TraceCodeBlobStacks&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace stack-walk of codeblobs&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintRewrites"&gt;&lt;/a&gt;&lt;a href="#PrintRewrites"&gt;PrintRewrites&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print methods that are being rewritten&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DeoptimizeRandom"&gt;&lt;/a&gt;&lt;a href="#DeoptimizeRandom"&gt;DeoptimizeRandom&lt;/a&gt;&lt;/td&gt;&lt;td&gt;deoptimize random frames on random exit from the runtime system&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ZombieALot"&gt;&lt;/a&gt;&lt;a href="#ZombieALot"&gt;ZombieALot&lt;/a&gt;&lt;/td&gt;&lt;td&gt;creates zombies (non-entrant) at exit from the runt. system&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="WalkStackALot"&gt;&lt;/a&gt;&lt;a href="#WalkStackALot"&gt;WalkStackALot&lt;/a&gt;&lt;/td&gt;&lt;td&gt;trace stack (no print) at every exit from the runtime system&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="StrictSafepointChecks"&gt;&lt;/a&gt;&lt;a href="#StrictSafepointChecks"&gt;StrictSafepointChecks&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enable strict checks that safepoints cannot happen for threads that used No_Safepoint_Verifier&lt;/td&gt;&lt;td&gt;trueInDebug&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyLastFrame"&gt;&lt;/a&gt;&lt;a href="#VerifyLastFrame"&gt;VerifyLastFrame&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify oops on last frame on entry to VM&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="LogEvents"&gt;&lt;/a&gt;&lt;a href="#LogEvents"&gt;LogEvents&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enable Event log&lt;/td&gt;&lt;td&gt;trueInDebug&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CheckAssertionStatusDirectives"&gt;&lt;/a&gt;&lt;a href="#CheckAssertionStatusDirectives"&gt;CheckAssertionStatusDirectives&lt;/a&gt;&lt;/td&gt;&lt;td&gt;temporary - see javaClasses.cpp&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintMallocFree"&gt;&lt;/a&gt;&lt;a href="#PrintMallocFree"&gt;PrintMallocFree&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace calls to C heap malloc/free allocation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintOopAddress"&gt;&lt;/a&gt;&lt;a href="#PrintOopAddress"&gt;PrintOopAddress&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Always print the location of the oop&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyCodeCacheOften"&gt;&lt;/a&gt;&lt;a href="#VerifyCodeCacheOften"&gt;VerifyCodeCacheOften&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify compiled-code cache often&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ZapDeadLocalsOld"&gt;&lt;/a&gt;&lt;a href="#ZapDeadLocalsOld"&gt;ZapDeadLocalsOld&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Zap dead locals (old version, zaps all frames when entering the VM&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CheckOopishValues"&gt;&lt;/a&gt;&lt;a href="#CheckOopishValues"&gt;CheckOopishValues&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Warn if value contains oop ( requires ZapDeadLocals)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ZapVMHandleArea"&gt;&lt;/a&gt;&lt;a href="#ZapVMHandleArea"&gt;ZapVMHandleArea&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Zap freed VM handle space with 0xBCBCBCBC&lt;/td&gt;&lt;td&gt;trueInDebug&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintCompilation2"&gt;&lt;/a&gt;&lt;a href="#PrintCompilation2"&gt;PrintCompilation2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print additional statistics per compilation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintAdapterHandlers"&gt;&lt;/a&gt;&lt;a href="#PrintAdapterHandlers"&gt;PrintAdapterHandlers&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print code generated for i2c/c2i adapters&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintCodeCache"&gt;&lt;/a&gt;&lt;a href="#PrintCodeCache"&gt;PrintCodeCache&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print the compiled_code cache when exiting&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ProfilerCheckIntervals"&gt;&lt;/a&gt;&lt;a href="#ProfilerCheckIntervals"&gt;ProfilerCheckIntervals&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Collect and print info on spacing of profiler ticks&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="WarnOnStalledSpinLock"&gt;&lt;/a&gt;&lt;a href="#WarnOnStalledSpinLock"&gt;WarnOnStalledSpinLock&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Prints warnings for stalled SpinLocks&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintSystemDictionaryAtExit"&gt;&lt;/a&gt;&lt;a href="#PrintSystemDictionaryAtExit"&gt;PrintSystemDictionaryAtExit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Prints the system dictionary at exit&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ValidateMarkSweep"&gt;&lt;/a&gt;&lt;a href="#ValidateMarkSweep"&gt;ValidateMarkSweep&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Do extra validation during MarkSweep collection&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="RecordMarkSweepCompaction"&gt;&lt;/a&gt;&lt;a href="#RecordMarkSweepCompaction"&gt;RecordMarkSweepCompaction&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enable GC-to-GC recording and querying of compaction during MarkSweep&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceRuntimeCalls"&gt;&lt;/a&gt;&lt;a href="#TraceRuntimeCalls"&gt;TraceRuntimeCalls&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace run-time calls&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceJVMCalls"&gt;&lt;/a&gt;&lt;a href="#TraceJVMCalls"&gt;TraceJVMCalls&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace JVM calls&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceInvocationCounterOverflow"&gt;&lt;/a&gt;&lt;a href="#TraceInvocationCounterOverflow"&gt;TraceInvocationCounterOverflow&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace method invocation counter overflow&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceZapDeadLocals"&gt;&lt;/a&gt;&lt;a href="#TraceZapDeadLocals"&gt;TraceZapDeadLocals&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace zapping dead locals&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSMarkStackOverflowALot"&gt;&lt;/a&gt;&lt;a href="#CMSMarkStackOverflowALot"&gt;CMSMarkStackOverflowALot&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Whether we should simulate frequent marking stack / work queue" overflow&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSMarkStackOverflowInterval"&gt;&lt;/a&gt;&lt;a href="#CMSMarkStackOverflowInterval"&gt;CMSMarkStackOverflowInterval&lt;/a&gt;&lt;/td&gt;&lt;td&gt;A per-thread `interval' counter that determines how frequently" we simulate overflow; a smaller number increases frequency&lt;/td&gt;&lt;td&gt;1000&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CMSVerifyReturnedBytes"&gt;&lt;/a&gt;&lt;a href="#CMSVerifyReturnedBytes"&gt;CMSVerifyReturnedBytes&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Check that all the garbage collected was returned to the free lists.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ScavengeALot"&gt;&lt;/a&gt;&lt;a href="#ScavengeALot"&gt;ScavengeALot&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Force scavenge at every Nth exit from the runtime system (N=ScavengeALotInterval)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="GCALotAtAllSafepoints"&gt;&lt;/a&gt;&lt;a href="#GCALotAtAllSafepoints"&gt;GCALotAtAllSafepoints&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enforce ScavengeALot/GCALot at all potential safepoints&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PromotionFailureALot"&gt;&lt;/a&gt;&lt;a href="#PromotionFailureALot"&gt;PromotionFailureALot&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use promotion failure handling on every youngest generation collection&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CheckMemoryInitialization"&gt;&lt;/a&gt;&lt;a href="#CheckMemoryInitialization"&gt;CheckMemoryInitialization&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Checks memory initialization&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceMarkSweep"&gt;&lt;/a&gt;&lt;a href="#TraceMarkSweep"&gt;TraceMarkSweep&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace mark sweep&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintReferenceGC"&gt;&lt;/a&gt;&lt;a href="#PrintReferenceGC"&gt;PrintReferenceGC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print times spent handling reference objects during GC (enabled only when PrintGCDetails)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceScavenge"&gt;&lt;/a&gt;&lt;a href="#TraceScavenge"&gt;TraceScavenge&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace scavenge&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TimeCompiler"&gt;&lt;/a&gt;&lt;a href="#TimeCompiler"&gt;TimeCompiler&lt;/a&gt;&lt;/td&gt;&lt;td&gt;time the compiler&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TimeCompiler2"&gt;&lt;/a&gt;&lt;a href="#TimeCompiler2"&gt;TimeCompiler2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;detailed time the compiler (requires +TimeCompiler)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="LogMultipleMutexLocking"&gt;&lt;/a&gt;&lt;a href="#LogMultipleMutexLocking"&gt;LogMultipleMutexLocking&lt;/a&gt;&lt;/td&gt;&lt;td&gt;log locking and unlocking of mutexes (only if multiple locks are held)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintSymbolTableSizeHistogram"&gt;&lt;/a&gt;&lt;a href="#PrintSymbolTableSizeHistogram"&gt;PrintSymbolTableSizeHistogram&lt;/a&gt;&lt;/td&gt;&lt;td&gt;print histogram of the symbol table&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ExitVMOnVerifyError"&gt;&lt;/a&gt;&lt;a href="#ExitVMOnVerifyError"&gt;ExitVMOnVerifyError&lt;/a&gt;&lt;/td&gt;&lt;td&gt;standard exit from VM if bytecode verify error (only in debug mode)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AbortVMOnException"&gt;&lt;/a&gt;&lt;a href="#AbortVMOnException"&gt;AbortVMOnException&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Call fatal if this exception is thrown. Example: java -XX:AbortVMOnException=java.lang.NullPointerException Foo&lt;/td&gt;&lt;td&gt;""&lt;/td&gt;&lt;td&gt;ccstr&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintVtableStats"&gt;&lt;/a&gt;&lt;a href="#PrintVtableStats"&gt;PrintVtableStats&lt;/a&gt;&lt;/td&gt;&lt;td&gt;print vtables stats at end of run&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="IgnoreLockingAssertions"&gt;&lt;/a&gt;&lt;a href="#IgnoreLockingAssertions"&gt;IgnoreLockingAssertions&lt;/a&gt;&lt;/td&gt;&lt;td&gt;disable locking assertions (for speed)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyLoopOptimizations"&gt;&lt;/a&gt;&lt;a href="#VerifyLoopOptimizations"&gt;VerifyLoopOptimizations&lt;/a&gt;&lt;/td&gt;&lt;td&gt;verify major loop optimizations&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CompileTheWorldIgnoreInitErrors"&gt;&lt;/a&gt;&lt;a href="#CompileTheWorldIgnoreInitErrors"&gt;CompileTheWorldIgnoreInitErrors&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Compile all methods although class initializer failed&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TracePhaseCCP"&gt;&lt;/a&gt;&lt;a href="#TracePhaseCCP"&gt;TracePhaseCCP&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Print progress during Conditional Constant Propagation&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceLivenessQuery"&gt;&lt;/a&gt;&lt;a href="#TraceLivenessQuery"&gt;TraceLivenessQuery&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace queries of liveness analysis information&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CollectIndexSetStatistics"&gt;&lt;/a&gt;&lt;a href="#CollectIndexSetStatistics"&gt;CollectIndexSetStatistics&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Collect information about IndexSets&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceCISCSpill"&gt;&lt;/a&gt;&lt;a href="#TraceCISCSpill"&gt;TraceCISCSpill&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace allocators use of cisc spillable instructions&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceSpilling"&gt;&lt;/a&gt;&lt;a href="#TraceSpilling"&gt;TraceSpilling&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace spilling&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CountVMLocks"&gt;&lt;/a&gt;&lt;a href="#CountVMLocks"&gt;CountVMLocks&lt;/a&gt;&lt;/td&gt;&lt;td&gt;counts VM internal lock attempts and contention&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CountRuntimeCalls"&gt;&lt;/a&gt;&lt;a href="#CountRuntimeCalls"&gt;CountRuntimeCalls&lt;/a&gt;&lt;/td&gt;&lt;td&gt;counts VM runtime calls&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CountJVMCalls"&gt;&lt;/a&gt;&lt;a href="#CountJVMCalls"&gt;CountJVMCalls&lt;/a&gt;&lt;/td&gt;&lt;td&gt;counts jvm method invocations&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CountRemovableExceptions"&gt;&lt;/a&gt;&lt;a href="#CountRemovableExceptions"&gt;CountRemovableExceptions&lt;/a&gt;&lt;/td&gt;&lt;td&gt;count exceptions that could be replaced by branches due to inlining&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ICMissHistogram"&gt;&lt;/a&gt;&lt;a href="#ICMissHistogram"&gt;ICMissHistogram&lt;/a&gt;&lt;/td&gt;&lt;td&gt;produce histogram of IC misses&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintClassStatistics"&gt;&lt;/a&gt;&lt;a href="#PrintClassStatistics"&gt;PrintClassStatistics&lt;/a&gt;&lt;/td&gt;&lt;td&gt;prints class statistics at end of run&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PrintMethodStatistics"&gt;&lt;/a&gt;&lt;a href="#PrintMethodStatistics"&gt;PrintMethodStatistics&lt;/a&gt;&lt;/td&gt;&lt;td&gt;prints method statistics at end of run&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceOnStackReplacement"&gt;&lt;/a&gt;&lt;a href="#TraceOnStackReplacement"&gt;TraceOnStackReplacement&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace on stack replacement&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyJNIEnvThread"&gt;&lt;/a&gt;&lt;a href="#VerifyJNIEnvThread"&gt;VerifyJNIEnvThread&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify JNIEnv.thread == Thread::current() when entering VM from JNI&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceTypeProfile"&gt;&lt;/a&gt;&lt;a href="#TraceTypeProfile"&gt;TraceTypeProfile&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace type profile&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MemProfilingInterval"&gt;&lt;/a&gt;&lt;a href="#MemProfilingInterval"&gt;MemProfilingInterval&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Time between each invocation of the MemProfiler&lt;/td&gt;&lt;td&gt;500&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="AssertRepeat"&gt;&lt;/a&gt;&lt;a href="#AssertRepeat"&gt;AssertRepeat&lt;/a&gt;&lt;/td&gt;&lt;td&gt;number of times to evaluate expression in assert (to estimate overhead); only works with -DUSE_REPEATED_ASSERTS&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SuppressErrorAt"&gt;&lt;/a&gt;&lt;a href="#SuppressErrorAt"&gt;SuppressErrorAt&lt;/a&gt;&lt;/td&gt;&lt;td&gt;List of assertions (file:line) to muzzle&lt;/td&gt;&lt;td&gt;""&lt;/td&gt;&lt;td&gt;ccstr&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="HandleAllocationLimit"&gt;&lt;/a&gt;&lt;a href="#HandleAllocationLimit"&gt;HandleAllocationLimit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Threshold for HandleMark allocation when +TraceHandleAllocation is used&lt;/td&gt;&lt;td&gt;1024&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxElementPrintSize"&gt;&lt;/a&gt;&lt;a href="#MaxElementPrintSize"&gt;MaxElementPrintSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;maximum number of elements to print&lt;/td&gt;&lt;td&gt;256&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MaxSubklassPrintSize"&gt;&lt;/a&gt;&lt;a href="#MaxSubklassPrintSize"&gt;MaxSubklassPrintSize&lt;/a&gt;&lt;/td&gt;&lt;td&gt;maximum number of subklasses to print when printing klass&lt;/td&gt;&lt;td&gt;4&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ScavengeALotInterval"&gt;&lt;/a&gt;&lt;a href="#ScavengeALotInterval"&gt;ScavengeALotInterval&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Interval between which scavenge will occur with +ScavengeALot&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="FullGCALotInterval"&gt;&lt;/a&gt;&lt;a href="#FullGCALotInterval"&gt;FullGCALotInterval&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Interval between which full gc will occur with +FullGCALot&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="FullGCALotStart"&gt;&lt;/a&gt;&lt;a href="#FullGCALotStart"&gt;FullGCALotStart&lt;/a&gt;&lt;/td&gt;&lt;td&gt;For which invocation to start FullGCAlot&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="FullGCALotDummies"&gt;&lt;/a&gt;&lt;a href="#FullGCALotDummies"&gt;FullGCALotDummies&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Dummy object allocated with +FullGCALot, forcing all objects to move&lt;/td&gt;&lt;td&gt;32*K&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DeoptimizeALotInterval"&gt;&lt;/a&gt;&lt;a href="#DeoptimizeALotInterval"&gt;DeoptimizeALotInterval&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of exits until DeoptimizeALot kicks in&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ZombieALotInterval"&gt;&lt;/a&gt;&lt;a href="#ZombieALotInterval"&gt;ZombieALotInterval&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Number of exits until ZombieALot kicks in&lt;/td&gt;&lt;td&gt;5&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="ExitOnFullCodeCache"&gt;&lt;/a&gt;&lt;a href="#ExitOnFullCodeCache"&gt;ExitOnFullCodeCache&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Exit the VM if we fill the code cache.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CompileTheWorldStartAt"&gt;&lt;/a&gt;&lt;a href="#CompileTheWorldStartAt"&gt;CompileTheWorldStartAt&lt;/a&gt;&lt;/td&gt;&lt;td&gt;First class to consider when using +CompileTheWorld&lt;/td&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CompileTheWorldStopAt"&gt;&lt;/a&gt;&lt;a href="#CompileTheWorldStopAt"&gt;CompileTheWorldStopAt&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Last class to consider when using +CompileTheWorld&lt;/td&gt;&lt;td&gt;max_jint&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr bgcolor="#e0e0e0"&gt;&lt;td colspan="4"&gt;&lt;a href="" name="diagnostic"&gt;diagnostic&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UnlockDiagnosticVMOptions"&gt;&lt;/a&gt;&lt;a href="#UnlockDiagnosticVMOptions"&gt;UnlockDiagnosticVMOptions&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Enable processing of flags relating to field diagnostics&lt;/td&gt;&lt;td&gt;trueInDebug&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="LogCompilation"&gt;&lt;/a&gt;&lt;a href="#LogCompilation"&gt;LogCompilation&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Log compilation activity in detail to hotspot.log or LogFile&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UnsyncloadClass"&gt;&lt;/a&gt;&lt;a href="#UnsyncloadClass"&gt;UnsyncloadClass&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Unstable: VM calls loadClass unsynchronized. Custom classloader must call VM synchronized for findClass &amp;amp; defineClass&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="FLSVerifyAllHeapReferences"&gt;&lt;/a&gt;&lt;a href="#FLSVerifyAllHeapReferences"&gt;FLSVerifyAllHeapReferences&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify that all refs across the FLS boundary are to valid objects&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="FLSVerifyLists"&gt;&lt;/a&gt;&lt;a href="#FLSVerifyLists"&gt;FLSVerifyLists&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Do lots of (expensive) FreeListSpace verification&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="FLSVerifyIndexTable"&gt;&lt;/a&gt;&lt;a href="#FLSVerifyIndexTable"&gt;FLSVerifyIndexTable&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Do lots of (expensive) FLS index table verification&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyBeforeExit"&gt;&lt;/a&gt;&lt;a href="#VerifyBeforeExit"&gt;VerifyBeforeExit&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify system before exiting&lt;/td&gt;&lt;td&gt;trueInDebug&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyBeforeGC"&gt;&lt;/a&gt;&lt;a href="#VerifyBeforeGC"&gt;VerifyBeforeGC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify memory system before GC&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyAfterGC"&gt;&lt;/a&gt;&lt;a href="#VerifyAfterGC"&gt;VerifyAfterGC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify memory system after GC&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyDuringGC"&gt;&lt;/a&gt;&lt;a href="#VerifyDuringGC"&gt;VerifyDuringGC&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify memory system during GC (between phases)&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyRememberedSets"&gt;&lt;/a&gt;&lt;a href="#VerifyRememberedSets"&gt;VerifyRememberedSets&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify GC remembered sets&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyObjectStartArray"&gt;&lt;/a&gt;&lt;a href="#VerifyObjectStartArray"&gt;VerifyObjectStartArray&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify GC object start array if verify before/after&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="BindCMSThreadToCPU"&gt;&lt;/a&gt;&lt;a href="#BindCMSThreadToCPU"&gt;BindCMSThreadToCPU&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Bind CMS Thread to CPU if possible&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="CPUForCMSThread"&gt;&lt;/a&gt;&lt;a href="#CPUForCMSThread"&gt;CPUForCMSThread&lt;/a&gt;&lt;/td&gt;&lt;td&gt;When BindCMSThreadToCPU is true, the CPU to bind CMS thread to&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="TraceJVMTIObjectTagging"&gt;&lt;/a&gt;&lt;a href="#TraceJVMTIObjectTagging"&gt;TraceJVMTIObjectTagging&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Trace JVMTI object tagging calls&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyBeforeIteration"&gt;&lt;/a&gt;&lt;a href="#VerifyBeforeIteration"&gt;VerifyBeforeIteration&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Verify memory system before JVMTI iteration&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DebugNonSafepoints"&gt;&lt;/a&gt;&lt;a href="#DebugNonSafepoints"&gt;DebugNonSafepoints&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Generate extra debugging info for non-safepoints in nmethods&lt;/td&gt;&lt;td&gt;trueInDebug&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SerializeVMOutput"&gt;&lt;/a&gt;&lt;a href="#SerializeVMOutput"&gt;SerializeVMOutput&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Use a mutex to serialize output to tty and hotspot.log&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="DisplayVMOutput"&gt;&lt;/a&gt;&lt;a href="#DisplayVMOutput"&gt;DisplayVMOutput&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Display all VM output on the tty, independently of LogVMOutput&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="LogVMOutput"&gt;&lt;/a&gt;&lt;a href="#LogVMOutput"&gt;LogVMOutput&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Save VM output to hotspot.log, or to LogFile&lt;/td&gt;&lt;td&gt;trueInDebug&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="LogFile"&gt;&lt;/a&gt;&lt;a href="#LogFile"&gt;LogFile&lt;/a&gt;&lt;/td&gt;&lt;td&gt;If LogVMOutput is on, save VM output to this file [hotspot.log]&lt;/td&gt;&lt;td&gt;""&lt;/td&gt;&lt;td&gt;ccstr&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MallocVerifyInterval"&gt;&lt;/a&gt;&lt;a href="#MallocVerifyInterval"&gt;MallocVerifyInterval&lt;/a&gt;&lt;/td&gt;&lt;td&gt;if non-zero, verify C heap after every N calls to malloc/realloc/free&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="MallocVerifyStart"&gt;&lt;/a&gt;&lt;a href="#MallocVerifyStart"&gt;MallocVerifyStart&lt;/a&gt;&lt;/td&gt;&lt;td&gt;if non-zero, start verifying C heap after Nth call to malloc/realloc/free&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyGCStartAt"&gt;&lt;/a&gt;&lt;a href="#VerifyGCStartAt"&gt;VerifyGCStartAt&lt;/a&gt;&lt;/td&gt;&lt;td&gt;GC invoke count where +VerifyBefore/AfterGC kicks in&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;uintx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="VerifyGCLevel"&gt;&lt;/a&gt;&lt;a href="#VerifyGCLevel"&gt;VerifyGCLevel&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Generation level at which to start +VerifyBefore/AfterGC&lt;/td&gt;&lt;td&gt;0&lt;/td&gt;&lt;td&gt;intx&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseNewCode"&gt;&lt;/a&gt;&lt;a href="#UseNewCode"&gt;UseNewCode&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Testing Only: Use the new version while testing&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseNewCode2"&gt;&lt;/a&gt;&lt;a href="#UseNewCode2"&gt;UseNewCode2&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Testing Only: Use the new version while testing&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="UseNewCode3"&gt;&lt;/a&gt;&lt;a href="#UseNewCode3"&gt;UseNewCode3&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Testing Only: Use the new version while testing&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SharedOptimizeColdStart"&gt;&lt;/a&gt;&lt;a href="#SharedOptimizeColdStart"&gt;SharedOptimizeColdStart&lt;/a&gt;&lt;/td&gt;&lt;td&gt;At dump time, order shared objects to achieve better cold startup time.&lt;/td&gt;&lt;td&gt;true&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="SharedSkipVerify"&gt;&lt;/a&gt;&lt;a href="#SharedSkipVerify"&gt;SharedSkipVerify&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Skip assert() and verify() which page-in unwanted shared objects.&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PauseAtStartup"&gt;&lt;/a&gt;&lt;a href="#PauseAtStartup"&gt;PauseAtStartup&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Causes the VM to pause at startup time and wait for the pause file to be removed (default: ./vm.paused.&lt;pid&gt;)&lt;/pid&gt;&lt;/td&gt;&lt;td&gt;false&lt;/td&gt;&lt;td&gt;bool&lt;/td&gt;&lt;/tr&gt;
&lt;tr valign="top"&gt;&lt;td&gt;&lt;a href="" name="PauseAtStartupFile"&gt;&lt;/a&gt;&lt;a href="#PauseAtStartupFile"&gt;PauseAtStartupFile&lt;/a&gt;&lt;/td&gt;&lt;td&gt;The file to create and for whose removal to await when pausing at startup. (default: ./vm.paused.&lt;pid&gt;)&lt;/pid&gt;&lt;/td&gt;&lt;td&gt;""&lt;/td&gt;&lt;td&gt;ccstr&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;br /&gt;
&lt;h1&gt;





Glossary&lt;/h1&gt;
&lt;br /&gt;
&lt;h2&gt;





&lt;a href="" name="TLAB"&gt;TLAB&lt;/a&gt;&lt;/h2&gt;
Thread-local allocation buffer. Used to allocate heap space quickly without synchronization. Compiled code has a "fast path" of a few instructions which tries to bump a high-water mark in the current thread's TLAB, successfully allocating an object if the bumped mark falls before a TLAB-specific limit address. &lt;a href="http://blogs.oracle.com/jonthecollector/entry/the_real_thing"&gt;Here&lt;/a&gt; is nice article with explanation about TLABs.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-8630038642300102986?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/rKFQcfHxLS4-S2_dDVW289lKXgg/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rKFQcfHxLS4-S2_dDVW289lKXgg/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/rKFQcfHxLS4-S2_dDVW289lKXgg/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/rKFQcfHxLS4-S2_dDVW289lKXgg/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=qmOjHR6NSbM:qpsLecRSks8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=qmOjHR6NSbM:qpsLecRSks8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=qmOjHR6NSbM:qpsLecRSks8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=qmOjHR6NSbM:qpsLecRSks8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/qmOjHR6NSbM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/8630038642300102986/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=8630038642300102986" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/8630038642300102986?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/8630038642300102986?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/qmOjHR6NSbM/most-complete-list-of-xx-options-for.html" title="The most complete list of -XX options for Java 6 JVM" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2011/07/most-complete-list-of-xx-options-for.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUDSH85eip7ImA9WhdTGUU.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-6067250148075801811</id><published>2011-07-12T11:15:00.005+01:00</published><updated>2011-07-18T12:24:39.122+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-18T12:24:39.122+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="fitnesse" /><category scheme="http://www.blogger.com/atom/ns#" term="teamcity" /><title>Integration of TeamCity 6.x and Fitnesse</title><content type="html">Team city is wonderful CI and build management platform, which combines great capabilities with really simple configuration. I seriously love it for the way it is designed, configured and managed and would recommend it to anybody who cares about quality and wants to have fast feedback on build/test/integration problems. FitNess is “The fully integrated standalone wiki, and acceptance testing framework”, which I, personally, do not like, but testers (at least ones I know) say it is good. I still do not believe them, but have to live with it :)&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Integration problem is divided nicely into two pieces - one is fighting with FitNesse, another is integration of battle outcome into the TeamCity. So, lets start with FitNesse first.&lt;br /&gt;
&lt;br /&gt;
FitNess is not easily-integratable framework for a few reasons. The first problem is test URL &amp; Fixtures’ path usually are not configurable via parameters. Fortunately, there is quite good solution, which allows to pass variable to FitNesse using “-D” java argument. Another issue is that it runs just as HTTP server, there is no other way to execute tests, other from running the server. Luckily it can run it and after execution stop it and such behaviour can be managed via command line.  And the last issue is report produced by Fitnesse. It has to be converted into something widely-acceptable, e.g. into JUnit report.&lt;br /&gt;
&lt;br /&gt;
Now let sort all these issues out. The first step is updating test scripts to make them accept test URL and path to fixtures from command line. Assuming that there is just one property defined for URL and just one reference to fixture path, all which need to be done is Wiki page to contain something like this:&lt;br /&gt;
&lt;br /&gt;
!define TEST_SERVER_URL {${testserver.host_port}}&lt;br /&gt;
!path ${testserver.fixture_jar}&lt;br /&gt;
&lt;br /&gt;
Note another set of curly brackets around value of TEST_SERVER_URL variable, it shouldn’t be missed. After these values are defined, it is possible to pass them via command line:&lt;br /&gt;
&lt;br /&gt;
$JAVA_HOME/bin/java -classpath &amp;lt;path_to_fixtures_jar&amp;gt; -Dtestserver.fixture_jar=&amp;lt;path_to_fixtures_jar&amp;gt; -DDtestserver.host_port=&amp;lt;test_server_url&amp;gt; fitnesseMain.FitNesseMain -p &amp;lt;fitnesse_port&amp;gt; -d &amp;lt;path_to_test_suite&amp;gt; -c &amp;lt;suite_url&amp;gt;\&amp;format=xml &amp;gt; &amp;lt;report_temp_file&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where:&lt;br /&gt;
&lt;b&gt;path_to_fixtures_jar&lt;/b&gt; - is the path to jar with fixtures. It is referenced twice, because it is assumed that it has both FitNesse distribution and fixtures inside it. For me, it just looks like the most convenient way to package it.&lt;br /&gt;
&lt;b&gt;test_server_url&lt;/b&gt; - URL to the server being tested. That will be the value of TEST_SERVER_URL. Be careful here - as many other tools written in cowboy style dev technique, it hardly have any logs and when you will try to run test on bad (not connectable) URL or with invalid or unavailable port number, it will hang forever.&lt;br /&gt;
&lt;b&gt;fitnesse_port&lt;/b&gt; - now this is weired, but is required by FitNesse. It requires port to run. Just choose something random, which is not likely to be used by something else. I have no idea why, but '0' port (which should just select first available port) didn’t work for me, FitNesse just hanged without any messages, as it loves to do.&lt;br /&gt;
&lt;b&gt;path_to_test_suite&lt;/b&gt; - path to the folder with test suite. &lt;br /&gt;
&lt;b&gt;suite_url&lt;/b&gt; - that’s the path of the suite without host and port. To identify it, run FitNesse, goto the page with Suite and hover mouse over “Suite” link on the left hand side of  FitNesse page with the suite. Do not miss ‘format=xml’ suffix.&lt;br /&gt;
&lt;b&gt;report_temp_file&lt;/b&gt; - is just a test file with report which will be generated by FitNesse. &lt;br /&gt;
&lt;br /&gt;
Now when we have report, we need to convert it into the JUnit format to allow TeamCity to understand it. Fist, it has to be cleaned-up, because contains not just XML, but also some other irrelevant stuff. I was was lazy here and done it simply with following command:&lt;br /&gt;
&lt;br /&gt;
grep ".*&amp;lt;.*&amp;gt;" $TEMP_FILE_TXT &amp;gt; $TEMP_FILE_XML"&lt;br /&gt;
&lt;br /&gt;
then is more interesting part. That report has to be converted into JUnit XML and that is done by applying following XSLT:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;&amp;lt;?xml version="1.0" encoding="ISO-8859-1"?&amp;gt;
&amp;lt;xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"&amp;gt;
&amp;lt;xsl:template match="/"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;xsl:element name="testsuite"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:attribute name="tests"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:value-of select="sum(testResults/finalCounts/*)" /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:attribute&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:attribute name="failures"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:value-of select="testResults/finalCounts/wrong" /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:attribute&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:attribute name="disabled"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:value-of select="testResults/finalCounts/ignores" /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:attribute&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:attribute name="errors"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:value-of select="testResults/finalCounts/exceptions" /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:attribute&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:attribute name="name"&amp;gt;AcceptanceTests&amp;lt;/xsl:attribute&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;xsl:for-each select="testResults/result"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:element name="testcase"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:attribute name="classname"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:value-of select="/testResults/rootPath" /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:attribute&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:attribute name="name"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:value-of select="relativePageName" /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:attribute&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:choose&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:when test="counts/exceptions &gt; 0"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:element name="error"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:attribute name="message"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:value-of select="counts/exceptions" /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:text&amp;gt; exceptions thrown&amp;lt;/xsl:text&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:if test="counts/wrong &amp;gt; 0"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:text&amp;gt; and &amp;lt;/xsl:text&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:value-of select="counts/wrong" /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:text&amp;gt; assertions failed&amp;lt;/xsl:text&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:if&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:attribute&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:element&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:when&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:when test="counts/wrong &amp;gt; 0"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:element name="failure"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:attribute name="message"&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:value-of select="counts/wrong" /&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;xsl:text&amp;gt; assertions failed&amp;lt;/xsl:text&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:attribute&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:element&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:when&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:choose&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:element&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:for-each&amp;gt;
&amp;nbsp;&amp;nbsp;&amp;lt;/xsl:element&amp;gt;
&amp;lt;/xsl:template&amp;gt;
&amp;lt;/xsl:stylesheet&amp;gt;
&lt;/pre&gt;to execute conversion we can use standard tool, provided by JDK. Surprisingly, found that not many people know about it, but it can be very handy. Here is snippet which allows to execute XSLT transformation in command line:&lt;br /&gt;
&lt;br /&gt;
$JAVA_HOME/bin/java com.sun.org.apache.xalan.internal.xsltc.cmdline.Compile fitnesse2junit.xslt&lt;br /&gt;
$JAVA_HOME/bin/java com.sun.org.apache.xalan.internal.xsltc.cmdline.Transform &amp;lt;report_temp_file&amp;gt; fitnesse2junit &amp;gt; funct_test_res.xml&lt;br /&gt;
&lt;br /&gt;
The result is going to be XML test report in JUnit format.&lt;br /&gt;
&lt;br /&gt;
That’s all with FitNesse. Now it’s TeamCity’s turn. It is really up to developer how to do that, I will just give a brief overview and some flavour of what has to be done:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Create new build task for execution of the script which runs FitNesse. That script should be just a collection of command lines provided above.&lt;/li&gt;
&lt;li&gt;FitNesse requires fixtures and tests, so these have to be retrieved from VCS or linked as artifact dependencies from the other build. Either way these files will available for script which runs FitNesse and can be added into classpath, etc.&lt;/li&gt;
&lt;li&gt;I would recommend to put such properties like 'test_server_url' into 'Environment Variables' in 'Build Parameters'. Then they can be accessible by scripts.&lt;/li&gt;
&lt;li&gt;To see test execution results, add a Feature which will analyse XML with JUnit report. That is easy and there is already build-in Feature type in TeamCity which supports JUnit. That functionality is available from “Build Step/Add build feature”.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-6067250148075801811?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/2NJxAQmL0M1lqcHtUAxXu9405pc/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2NJxAQmL0M1lqcHtUAxXu9405pc/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/2NJxAQmL0M1lqcHtUAxXu9405pc/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/2NJxAQmL0M1lqcHtUAxXu9405pc/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=9XPc-5MwBaA:dZSrpX8eZGk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=9XPc-5MwBaA:dZSrpX8eZGk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=9XPc-5MwBaA:dZSrpX8eZGk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=9XPc-5MwBaA:dZSrpX8eZGk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/9XPc-5MwBaA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/6067250148075801811/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=6067250148075801811" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/6067250148075801811?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/6067250148075801811?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/9XPc-5MwBaA/integration-of-teamcity-6x-and-fitnesse.html" title="Integration of TeamCity 6.x and Fitnesse" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2011/07/integration-of-teamcity-6x-and-fitnesse.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4BQXc4eip7ImA9WhdXE0o.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-6027917384426208835</id><published>2011-07-03T19:27:00.006+01:00</published><updated>2011-08-26T16:35:50.932+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-26T16:35:50.932+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="rmi" /><category scheme="http://www.blogger.com/atom/ns#" term="jgroups" /><category scheme="http://www.blogger.com/atom/ns#" term="ehcache" /><title>EhCache replication: RMI vs JGroups.</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;&lt;div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Recently, I was working on one product which required replicated caching. Caching provider was already decided - EhCache, and the remained was a question about transport. Which one is the best option? By the best option here I mean just the one which has better performance. The performance measurement was done just between two of available transports - JGroups and RMI, others were not considered, sorry.&lt;/span&gt;&lt;br /&gt;
&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 15px; white-space: pre-wrap;"&gt;Replication was tested between two nodes. The main goal was to understand how increase of message data size and total number of messages affects performance. &amp;nbsp;Another goal was to find the point where replication performance getting really bad. Latter is not that easy, because test used limited amount of memory and non-leaner performance deterioration could be caused by exhaust of free heap space.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="font-family: Arial;"&gt;&lt;span class="Apple-style-span" style="font-size: 11pt; white-space: pre-wrap;"&gt;Below are &lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 15px; white-space: pre-wrap;"&gt;memory&lt;/span&gt;&lt;span class="Apple-style-span" style="font-size: 11pt; white-space: pre-wrap;"&gt; size and software versions used to run the test:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;All tests used 6GB of heap for all executions.&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;Tests were executed on the EhCache v.2.3.2&lt;/span&gt;&lt;/li&gt;
&lt;li style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; list-style-type: disc; text-decoration: none; vertical-align: baseline;"&gt;&lt;span class="Apple-style-span" style="white-space: pre-wrap;"&gt;JVM is Sun java 1.6.0_21&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The test itself is very simple. One node puts some number of elements with some size in the cache, other node reads all these elements. The test output is the the time required to read all elements. Timer starts just after first element is read.&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="background-color: transparent; font-family: 'Times New Roman'; font-size: medium; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; white-space: normal;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent; font-family: 'Times New Roman'; font-size: medium; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; white-space: normal;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;The first test creates 10000 elements for each iteration. The variable is the message size, which increased twice on each iteration. On the first iteration size is 1280 bytes, on the last one - 327680 bytes (320 Kb). It means that final iteration with 10000 elements, where each size was 320 Kb will transfer approximate 3Gb of data. The tests have shown that EhCache copes very well with increasing size of the element and the slowdown was approximately proportional to the size of transferred data, which can be seen on the graph:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent; font-family: 'Times New Roman'; font-size: medium; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; white-space: normal;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: Arial; font-size: 11pt; text-align: center; white-space: pre-wrap;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;a href="http://1.bp.blogspot.com/-QPji6OrDQu4/ThCy7sx2K5I/AAAAAAAAACo/MGATVTnyr7g/s1600/ehcache_time_vs_packet_data_size.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://1.bp.blogspot.com/-QPji6OrDQu4/ThCy7sx2K5I/AAAAAAAAACo/MGATVTnyr7g/s640/ehcache_time_vs_packet_data_size.png" width="640" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: Arial; font-size: 11pt; text-align: center; white-space: pre-wrap;"&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;div style="background-color: transparent; font-family: 'Times New Roman'; font-size: medium; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px; white-space: normal;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;Here y-axis is time required for transfer in milliseconds and x-axis the the size of the element. No need to give much comments. RMI definitely looks better than JGroups.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;In the seconds test, the variable was number of elements and the size of the element stayed constant and equal to 1280 bytes. As in previous test the number of messages was multiplied by two in each iteration and the amount of data transferred in final iteration was the same 3Gb. Graph below show how did it go:&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; font-family: Arial; font-size: 11pt; text-align: center; white-space: pre-wrap;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;a href="http://3.bp.blogspot.com/-8q854iHtNhs/ThCzHa5KGaI/AAAAAAAAACs/6MczdWfkuWc/s1600/ehcache_time_vs_packet_number.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="320" src="http://3.bp.blogspot.com/-8q854iHtNhs/ThCzHa5KGaI/AAAAAAAAACs/6MczdWfkuWc/s640/ehcache_time_vs_packet_number.png" width="640" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="background-color: transparent; margin-bottom: 0px; margin-left: 0px; margin-right: 0px; margin-top: 0px;"&gt;&lt;div style="font-family: 'Times New Roman'; font-size: medium; white-space: normal;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;As in previous graph, y-axis is the time require to transfer all elements in one iteration. X-axis is the number of elements. Again, it can be seen that RMI is the leader. I believe hat JGroups hit the heap at the latest iteration, that’s why it performed so bad. It means that JGroups has more memory overhead per element.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; font-size: medium; white-space: normal;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; font-size: medium; white-space: normal;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;For the once, who do not trust (I woulnd’t ;) ) to my results and want to try it yourself, here are &lt;a href="https://docs.google.com/leaf?id=0B_Oq4PMUt3r6MTdmMjIzYzgtNjdjMi00ODdkLTljMTEtY2UyYTQ0YTNjNjI5&amp;amp;hl=en_US"&gt;sources and configuration&lt;/a&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; font-size: medium; white-space: normal;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style="font-family: 'Times New Roman'; font-size: medium; white-space: normal;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span id="internal-source-marker_0.4318215469829738" style="background-color: transparent; color: black; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline;"&gt;&lt;span style="background-color: transparent; color: black; font-family: Arial; font-size: 11pt; font-style: normal; font-variant: normal; font-weight: normal; text-decoration: none; vertical-align: baseline; white-space: pre-wrap;"&gt;And, as conclusion... Well, RMI and JGroups both are acceptably fast. JGroups is definitely more memory consuming, which means one can hit a problem using it with big amounts of data. RMI, on the other hand uses TCP, instead of UDP, which, &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 15px; white-space: pre-wrap;"&gt;with big amount of nodes, &lt;/span&gt;&lt;span class="Apple-style-span" style="font-family: Arial; font-size: 15px; white-space: pre-wrap;"&gt;may cause higher network load. Latter, unfortunately, is not covered by the test by any means and the real impact is not clear. &lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-6027917384426208835?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1uLmachVbn0AVva1Q1ie04U50X4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1uLmachVbn0AVva1Q1ie04U50X4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1uLmachVbn0AVva1Q1ie04U50X4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1uLmachVbn0AVva1Q1ie04U50X4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=UKzmDiBT7yA:swzSZzEbO1M:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=UKzmDiBT7yA:swzSZzEbO1M:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=UKzmDiBT7yA:swzSZzEbO1M:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=UKzmDiBT7yA:swzSZzEbO1M:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/UKzmDiBT7yA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/6027917384426208835/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=6027917384426208835" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/6027917384426208835?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/6027917384426208835?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/UKzmDiBT7yA/ehcache-replication-rmi-vs-jgroups.html" title="EhCache replication: RMI vs JGroups." /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-QPji6OrDQu4/ThCy7sx2K5I/AAAAAAAAACo/MGATVTnyr7g/s72-c/ehcache_time_vs_packet_data_size.png" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2011/07/ehcache-replication-rmi-vs-jgroups.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQEQXg5cSp7ImA9WhdSEkk.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-7455497185054607236</id><published>2011-01-15T15:08:00.005Z</published><updated>2011-07-21T10:25:00.629+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-07-21T10:25:00.629+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="regexp" /><title>jakarta regexp vs java.util.regex</title><content type="html">Have never really been thinking about which library to use for regular expression, it always was &lt;a href="http://download.oracle.com/javase/6/docs/api/java/util/regex/package-summary.html"&gt;java.util.regex&lt;/a&gt; by default. But I found that some people prefer to use &lt;a href="http://jakarta.apache.org/regexp/index.html"&gt;Jakarta Regexp&lt;/a&gt;, and usually there is not clear reason for that choice. So, I decided to  spent some time trying to find out what is better and probably write a couple of tests. After some time spent in the Internet looking for the examples of tests, it appeared that there was a good guy already who have done all that work. Here is the link to the page with results of his investigation:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://tusker.org/regex/regex_benchmark.html"&gt;http://tusker.org/regex/regex_benchmark.html&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
The conclusion is that Jakarta Regexp doesn't look good at all. Also you may notice that there are some other libraries who are doing regexps and some have very impressive performance and seems like worth trying.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-7455497185054607236?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/YiHlwjiMlG_fRovLQvKPtUG5WTE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YiHlwjiMlG_fRovLQvKPtUG5WTE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/YiHlwjiMlG_fRovLQvKPtUG5WTE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/YiHlwjiMlG_fRovLQvKPtUG5WTE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=4scnNEzQMQo:qo9aC0spYfk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=4scnNEzQMQo:qo9aC0spYfk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=4scnNEzQMQo:qo9aC0spYfk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=4scnNEzQMQo:qo9aC0spYfk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/4scnNEzQMQo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/7455497185054607236/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=7455497185054607236" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/7455497185054607236?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/7455497185054607236?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/4scnNEzQMQo/jakarta-regexp-vs-javautilregex.html" title="jakarta regexp vs java.util.regex" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2011/01/jakarta-regexp-vs-javautilregex.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUBQHk8eyp7ImA9Wx9REUg.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-860765643150728560</id><published>2010-11-30T23:13:00.006Z</published><updated>2010-12-12T12:17:31.773Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-12T12:17:31.773Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="quicksort" /><category scheme="http://www.blogger.com/atom/ns#" term="algorithms" /><category scheme="http://www.blogger.com/atom/ns#" term="sort" /><title>All you need to know about QuickSort</title><content type="html">It would be true to say that Quicksort is one of the most popular sorting algorithms. You can find it implemented on the most of the languages and it is present in almost any core library. In Java and Go Quicksort is default sorting algorithm for some data types and it is used in in C++ STL (&lt;a href="http://en.wikipedia.org/wiki/Introsort"&gt;Introsoft&lt;/a&gt; which is used there begins with Quicksort). Such popularity can be explained by the fact that on average, Quicksort is one of the fastest known sorting algorithms. Interestingly that complexity of Quicksort is not less than it is for other algorithms like MergeSort or HeapSort. The best case performance is O(nlogn) and on the worst case it gives O(n^2). Latter, luckily, is exceptional case for the proper implementation. Quicksort performance is gained by the main loop which tends to make excellent usage of CPU caches. Another reason of popularity is that it doesn't need allocation of additional memory.&lt;br /&gt;&lt;br /&gt;Personally for me Quicksort appeared as one of the most complex sorting algorithms. The basic idea is pretty simple and usually takes just a few minutes to implement. But that version, of course, if not practically usable. When it comes to details and to efficiency, it is getting more and more complicated.&lt;br /&gt;&lt;br /&gt;Quicksort was first discovered by C.A.R. Hoare in 1962 (see "Quicksort," Computer Journal 5, 1, 1962) and in following years algorithm slightly mutated. The most known version is Three-way Quicksort. The most comprehensive of widely known ones is Dual-Pivot Quicksort. Both algorithms will be covered in that post.&lt;br /&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;The Java language was used to implement all algorithms. That post do not pretend to make adequate performance analysis. Test data used for performance comparison is incomplete and used just to show certain optimization techniques. Also, algorithm implementations are not necessary optimal. Just keep that in mind while you are reading.&lt;br /&gt;&lt;h1&gt;Basics&lt;/h1&gt;&lt;br /&gt;The basic version of Quicksort is pretty simple and can be implemented just in few lines of code:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;public static void basicQuickSort(long arr[], int beginIdx, int len) {&lt;br /&gt;    if ( len &lt;= 1 )&lt;br /&gt;         return;&lt;br /&gt;    &lt;br /&gt;    final int endIdx = beginIdx+len-1;&lt;br /&gt;&lt;br /&gt;    // Pivot selection&lt;br /&gt;    final int pivotPos = beginIdx+len/2;&lt;br /&gt;    final long pivot = arr[pivotPos];&lt;br /&gt;    Utils.swap(arr, pivotPos, endIdx);&lt;br /&gt;&lt;br /&gt;    // partitioning&lt;br /&gt;    int p = beginIdx;&lt;br /&gt;    for(int i = beginIdx; i != endIdx; ++i) {&lt;br /&gt;         if ( arr[i] &lt;= pivot ) {&lt;br /&gt;             Utils.swap(arr, i, p++);&lt;br /&gt;         }&lt;br /&gt;     }&lt;br /&gt;     Utils.swap(arr, p, endIdx);&lt;br /&gt;&lt;br /&gt;     // recursive call&lt;br /&gt;     basicQuickSort(arr, beginIdx, p-beginIdx);&lt;br /&gt;     basicQuickSort(arr, p+1,  endIdx-p);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The code looks pretty simple and easily readable. Pivot selection is trivial and doesn't require any explanation. The partitioning process can be illustrated using following figure:&lt;br /&gt;&lt;img src="http://4.bp.blogspot.com/_WWOsd1svFq8/TPLaZHPfs2I/AAAAAAAAACA/kl3lOUcDbyE/s1600/basic_quickSort.gif" border="0" alt="Basic Quicksort" /&gt;&lt;br /&gt;pointer "i" moves from the beginning to the end on array (note, that the last element of the array is skipped - we know that it the pivot). If i-th element is "&lt;= pivot" then i-th and p-th elements are swapped and "p" pointer is moved to the next element. When partitioning is finished array will look like this: &lt;img src="http://4.bp.blogspot.com/_WWOsd1svFq8/TPLcQ2-AVbI/AAAAAAAAACI/-B7kQvf8fvE/s1600/basic1_quickSort.gif" border="0" alt="Basic Quicksort" /&gt;&lt;br /&gt;Remember, that in the code, at the end of array there is element with pivot value, and that element is excluded from the pivoting loop. That element is put on p-th position, which makes p-th element included in "&lt;= pivot" area.  If you need more details, have a look at &lt;a href="http://en.wikipedia.org/wiki/Quicksort"&gt;Wikipedia&lt;/a&gt;. There is pretty good explanation with lots of references. I would just emphasize your attention that algorithm consists of three main sections. These sections are pivot selection, partitioning and recursive call to sort partition. To make separation clearer the algorithm can be written down as:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;public static void basicQuickSort(long arr[], int beginIdx, int len) {&lt;br /&gt;    if ( len &lt;= 1 )&lt;br /&gt;        return;&lt;br /&gt; &lt;br /&gt;    final int endIdx = beginIdx + len - 1;&lt;br /&gt;    final int pivotIdx = getPivotIdx(arr, beginIdx, len);&lt;br /&gt;    final long pivot = arr[pivotIdx];&lt;br /&gt;&lt;br /&gt;    Utils.swap(arr, pivotIdx, endIdx);&lt;br /&gt;    int p = partition(arr, beginIdx, len, pivot);&lt;br /&gt;    Utils.swap(arr, p, endIdx);&lt;br /&gt;&lt;br /&gt;    basicQuickSort(arr, beginIdx, p-beginIdx);&lt;br /&gt;    basicQuickSort(arr, p+1,  endIdx-p); &lt;br /&gt;}  &lt;br /&gt;&lt;br /&gt;public static int partition(long[] arr, int beginIdx, int len, long pivot) {&lt;br /&gt;     final int endIdx = beginIdx + len - 1;&lt;br /&gt;     int p = beginIdx;&lt;br /&gt;     for(int i = beginIdx; i != endIdx; ++i) {&lt;br /&gt;         if ( arr[i] &lt;= pivot ) {&lt;br /&gt;             Utils.swap(arr, i, p++);         &lt;br /&gt;         }     &lt;br /&gt;     }     &lt;br /&gt;     return p;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public static int getPivotIdx(long arr[], int beginIdx, int len) {&lt;br /&gt;     return beginIdx+len/2;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Now let's have a look how it performs vs Java 1.6 sort algorithm. For the test I will generate array using following loop:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;static Random rnd = new Random();&lt;br /&gt;private static long[] generateData() {&lt;br /&gt;   long arr[] = new long[5000000];&lt;br /&gt;   for(int i = 0; i != arr.length; ++i) {&lt;br /&gt;       arr[i] = rnd.nextInt(arr.length);&lt;br /&gt;   }&lt;br /&gt;   return arr;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Then I run each JDK 6 Arrays.sort() and basicQuickSort() for 30 times and took the average run time as the result. New set of random data was generated for each run. The result if that exercise is this:&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;arr[i]=rnd.nextInt(arr.length)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Java 6 Arrays.sort&lt;/td&gt;&lt;td&gt;1654ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;basicQuickSort&lt;/td&gt;&lt;td&gt;1431ms&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Not that bad. Now look what would happen if input data has some more repeated elements. To generated that data, I just divided nextInt() argument by 100:&lt;br /&gt;&lt;table border="1"&gt;    &lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;arr[i]=rnd.nextInt(arr.length)&lt;/td&gt;&lt;td&gt;arr[i]=rnd.nextInt(arr.length/100)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Java 6 Arrays.sort&lt;/td&gt;&lt;td&gt;1654ms&lt;/td&gt;&lt;td&gt;935ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;basicQuickSort&lt;/td&gt;&lt;td&gt;1431ms&lt;/td&gt;&lt;td&gt;2570ms&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Now that is very bad. Obviously that simple algorithm doesn't behave well in such cases. It can be assumed that the problem is in the quality of the pivot. The worst possible pivot is the biggest or the smallest element of the array. In that case, algorithm would has O(n^2) complexity. Ideally pivot should be chosen such as it splits an array into two parts with equal sizes. It means that ideal pivot is the median on all values of given array. Practically that is not good idea - too slow. Therefore, usually, implementation uses median of 3-5 elements. The decision on the number of elements used for pivot can be based on the size of partitioned array. The code for the pivot selection may look like this:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;public static int getPivotIdx(long arr[], int beginIdx, int len) {&lt;br /&gt;   if ( len &lt;= 512 ) {&lt;br /&gt;       int p1 = beginIdx;&lt;br /&gt;       int p2 = beginIdx+(len&gt;&gt;&gt;1);&lt;br /&gt;       int p3 = beginIdx+len-1;&lt;br /&gt;&lt;br /&gt;       if ( arr[p1] &gt; arr[p2] ) { int tmp = p1; p1 = p2; p2 = tmp; }&lt;br /&gt;       if ( arr[p2] &gt; arr[p3] ) { p2 = p3; }&lt;br /&gt;       if ( arr[p1] &gt; arr[p2] ) { p2 = p1; }&lt;br /&gt;&lt;br /&gt;       return p2;&lt;br /&gt;   } else {&lt;br /&gt;       int p1 = beginIdx+(len/4);&lt;br /&gt;       int p2 = beginIdx+(len&gt;&gt;1);&lt;br /&gt;       int p3 = beginIdx+(len-len/4);&lt;br /&gt;       int p4 = beginIdx;&lt;br /&gt;       int p5 = beginIdx+len-1;&lt;br /&gt;&lt;br /&gt;       if ( arr[p1] &gt; arr[p2] ) { int tmp = p1; p1 = p2; p2 = tmp; }&lt;br /&gt;       if ( arr[p2] &gt; arr[p3] ) { int tmp = p2; p2 = p3; p3 = tmp; }&lt;br /&gt;       if ( arr[p1] &gt; arr[p2] ) { int tmp = p1; p1 = p2; p2 = tmp; }&lt;br /&gt;       if ( arr[p3] &gt; arr[p4] ) { int tmp = p3; p3 = p4; p4 = tmp; }&lt;br /&gt;       if ( arr[p2] &gt; arr[p3] ) { int tmp = p2; p2 = p3; p3 = tmp; }&lt;br /&gt;       if ( arr[p1] &gt; arr[p2] ) { p2 = p1; }&lt;br /&gt;       if ( arr[p4] &gt; arr[p5] ) { p4 = p5; }&lt;br /&gt;       if ( arr[p3] &gt; arr[p4] ) { p3 = p4; }&lt;br /&gt;       if ( arr[p2] &gt; arr[p3] ) { p3 = p2; }&lt;br /&gt;       return p3;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Here are results after improvements in pivot selection strategy:&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;arr[i]=rnd.nextInt(arr.length)&lt;/td&gt;&lt;td&gt;arr[i]=rnd.nextInt(arr.length/100)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Java 6 Arrays.sort&lt;/td&gt;&lt;td&gt;1654ms&lt;/td&gt;&lt;td&gt;935ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;basicQuickSort&lt;/td&gt;&lt;td&gt;1431ms&lt;/td&gt;&lt;td&gt;2570ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;basicQuickSort with 'better' pivot&lt;/td&gt;&lt;td&gt;1365ms&lt;/td&gt;&lt;td&gt;2482ms&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Unfortunately, the improvement is almost nothing. It appeared that pivot selection is not the root cause of the problem. But still let's keep it, it doesn't harm, even helps a little bit. It also significantly reduce possibility of O(n^2) behaviour. Another suspect is the algorithm itself. It seems like it's not good enough. Obviously it doesn't perform well, when collection has repeated elements. Therefore something has to be changed.&lt;br /&gt;&lt;h1&gt;Three-way partitioning&lt;/h1&gt;&lt;br /&gt;The way to get around that problem is three-way-partitioning. As a result of such partitioning, elements which are equal to the pivot are put in the middle of the array. Elements which are bigger than pivot are put in the right side of the array and ones which are smaller on the left side, appropriately.&lt;br /&gt;Implementation of that partitioning method consists of two stages. In the first stage arrays is scanned by two pointers ("i" and "j") which are approaching in opposite directions. Elements which are equals to pivot are moved to the ends of array:&lt;br /&gt;&lt;img src="http://3.bp.blogspot.com/_WWOsd1svFq8/TOW9ERraBuI/AAAAAAAAABU/Zl4hS4NTXYU/s1600/threeWay1_quickSort.gif" border="0" /&gt;&lt;br /&gt;It can be seen that after the first stage elements which are equal to the pivot are located on the edges of the array. On the second stage these elements are moved to the middle. That is now their final position and they can be be excluded from the further sorting:&lt;br /&gt;&lt;img src="http://4.bp.blogspot.com/_WWOsd1svFq8/TOW-H5vhKkI/AAAAAAAAAB0/YW_yC80HGiY/s1600/threeWay2_quickSort.gif" border="0" /&gt;&lt;br /&gt;After implementation of such algorithm partitioning function is getting much more complicated. In that implementation the result of the partitioning is lengths of two bound partitions:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;public static long partition(long[] arr, int beginIdx, int endIdx, long pivot) {&lt;br /&gt;   int i = beginIdx-1;&lt;br /&gt;   int l = i;&lt;br /&gt;   int j = endIdx+1;&lt;br /&gt;   int r = j;&lt;br /&gt;   while ( true ) {&lt;br /&gt;       while(arr[++i] &lt;&gt; pivot){}&lt;br /&gt;&lt;br /&gt;       if ( i &gt;= j )&lt;br /&gt;           break;&lt;br /&gt;&lt;br /&gt;       Utils.swap(arr, i, j);&lt;br /&gt;       if ( arr[i] == pivot ) {&lt;br /&gt;           Utils.swap(arr, i, ++l);&lt;br /&gt;       }&lt;br /&gt;       if ( arr[j] == pivot ) {&lt;br /&gt;           Utils.swap(arr, j, --r);&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;   // if i == j then arr[i] == arr[j] == pivot&lt;br /&gt;   if ( i == j ) {&lt;br /&gt;       ++i;&lt;br /&gt;       --j;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   final int lLen = j-l;&lt;br /&gt;   final int rLen = r-i;&lt;br /&gt;&lt;br /&gt;   final int pLen = l-beginIdx;&lt;br /&gt;   final int exchp = pLen &gt; lLen ? lLen: pLen;&lt;br /&gt;   int pidx = beginIdx;&lt;br /&gt;   for(int s = 0; s &lt;= exchp; ++s) {&lt;br /&gt;         Utils.swap(arr, pidx++, j--);&lt;br /&gt;   }&lt;br /&gt;   final int qLen = endIdx-r;&lt;br /&gt;   final int exchq = rLen &gt; qLen ? qLen : rLen;&lt;br /&gt;   int qidx = endIdx;&lt;br /&gt;   for(int s = 0; s &lt;= exchq; ++s) {&lt;br /&gt;         Utils.swap(arr, qidx--, i++);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   return (((long)lLen)&lt;&lt;32)|rlen;&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The pivot selection has to be changed as well, but more just for convenience, the idea remains absolutely the same. Now it returns actual value of pivot, instead of index:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;public static long getPivot(long arr[], int beginIdx, int len) {&lt;br /&gt;   if ( len &lt;= 512 ) {&lt;br /&gt;       long p1 = arr[beginIdx];&lt;br /&gt;       long p2 = arr[beginIdx+(len&gt;&gt;1)];&lt;br /&gt;       long p3 = arr[beginIdx+len-1];&lt;br /&gt;&lt;br /&gt;       return getMedian(p1, p2, p3);&lt;br /&gt;   } else {&lt;br /&gt;       long p1 = arr[beginIdx+(len/4)];&lt;br /&gt;       long p2 = arr[beginIdx+(len&gt;&gt;1)];&lt;br /&gt;       long p3 = arr[beginIdx+(len-len/4)];&lt;br /&gt;       long p4 = arr[beginIdx];&lt;br /&gt;       long p5 = arr[beginIdx+len-1];&lt;br /&gt;&lt;br /&gt;       return getMedian(p1, p2, p3, p4, p5);&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And here is the main method, which is slightly changed as well:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;public static void threeWayQuickSort(long[] arr, int beginIdx, int len) {&lt;br /&gt;    if ( len &lt; 2 )&lt;br /&gt;        return;&lt;br /&gt;&lt;br /&gt;    final int endIdx = beginIdx+len-1;&lt;br /&gt;    final long pivot = getPivot(arr, beginIdx, len);&lt;br /&gt;    final long lengths = threeWayPartitioning(arr, beginIdx, endIdx, pivot);&lt;br /&gt;&lt;br /&gt;    final int lLen = (int)(lengths&gt;&gt;32);&lt;br /&gt;    final int rLen = (int)lengths;&lt;br /&gt;&lt;br /&gt;    threeWayQuickSort(arr, beginIdx, lLen);&lt;br /&gt;    threeWayQuickSort(arr, endIdx-rLen+1, rLen);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;now let's compare it with Java 6 sort:&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;arr[i]=rnd.nextInt(arr.length)&lt;/td&gt;&lt;td&gt;arr[i]=rnd.nextInt(arr.length/100)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Java 6 Arrays.sort&lt;/td&gt;&lt;td&gt;1654ms&lt;/td&gt;&lt;td&gt;935ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;basicQuickSort&lt;/td&gt;&lt;td&gt;1431ms&lt;/td&gt;&lt;td&gt;2570ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;basicQuickSort with 'better' pivot&lt;/td&gt;&lt;td&gt;1365ms&lt;/td&gt;&lt;td&gt;2482ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Three-way partitioning Quicksort&lt;/td&gt;&lt;td&gt;1330ms&lt;/td&gt;&lt;td&gt;829ms&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;Huh, impressive! It is faster than standard library, which, by he way, implements the same algorithm. To be honest I was surprised, when found that it is such an easy task to beat standard library.&lt;br /&gt;But what about making it even faster? There is one trick which always helps and it works for all sorting algorithms which work with consecutive memory. That trick is &lt;a href="http://en.wikipedia.org/wiki/Insertion_sort"&gt;Insertion&lt;/a&gt; sort. Although is has big chance of O(n^2), it appears to be very very effective on the small arrays and always gives some performance improvements. Especially that is noticeable when input data is not  sorted and there are not many repeated elements. All you need to do is just add it at the beginning of sorting method:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;public static void threeWayQuickSort(long[] arr, int beginIdx, int len) {&lt;br /&gt;    if ( len &lt; 2 )&lt;br /&gt;        return;&lt;br /&gt;&lt;br /&gt;    if ( len &lt; 17 ) {&lt;br /&gt;        InsertionSort.sort(arr, beginIdx, len);&lt;br /&gt;        return;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    final int endIdx = beginIdx+len-1;&lt;br /&gt;    final long pivot = getPivot(arr, beginIdx, len);&lt;br /&gt;    final long lengths = threeWayPartitioning(arr, beginIdx, endIdx, pivot);&lt;br /&gt;&lt;br /&gt;    final int lLen = (int)(lengths&gt;&gt;32);&lt;br /&gt;    final int rLen = (int)lengths;&lt;br /&gt;&lt;br /&gt;   threeWayQuickSort(arr, beginIdx, lLen);&lt;br /&gt;   threeWayQuickSort(arr, endIdx-rLen+1, rLen);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;and run the test again:&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;arr[i]=rnd.nextInt(arr.length)&lt;/td&gt;&lt;td&gt;arr[i]=rnd.nextInt(arr.length/100)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Java 6 Arrays.sort&lt;/td&gt;&lt;td&gt;1654ms&lt;/td&gt;&lt;td&gt;935ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;basicQuickSort&lt;/td&gt;&lt;td&gt;1431ms&lt;/td&gt;&lt;td&gt;2570ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;basicQuickSort with 'better' pivot&lt;/td&gt;&lt;td&gt;1365ms&lt;/td&gt;&lt;td&gt;2482ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Three-way partitioning Quicksort&lt;/td&gt;&lt;td&gt;1330ms&lt;/td&gt;&lt;td&gt;829ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Three-way partitioning Quicksort with Insertion sort&lt;/td&gt;&lt;td&gt;1155ms&lt;/td&gt;&lt;td&gt;818ms&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;now standard library looks just awful. It looks now that all is said and done. But it in reality that's not the end of the story and there is something else to talk about.&lt;br /&gt;&lt;h1&gt;Dual-pivot Quicksort&lt;/h1&gt;&lt;br /&gt;Moving forward, I found that Java 7 is much more advanced and performs much faster than Java 6 version and outperforms all previous tests:&lt;table border="1"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;/td&gt;&lt;td&gt;arr[i]=rnd.nextInt(arr.length)&lt;/td&gt;&lt;td&gt;arr[i]=rnd.nextInt(arr.length/100)&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Java 6 Arrays.sort&lt;/td&gt;&lt;td&gt;1654ms&lt;/td&gt;&lt;td&gt;935ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Java 7 Arrays.sort&lt;/td&gt;&lt;td&gt;951ms&lt;/td&gt;&lt;td&gt;764ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;basicQuickSort&lt;/td&gt;&lt;td&gt;1431ms&lt;/td&gt;&lt;td&gt;2570ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;basicQuickSort with 'better' pivot&lt;/td&gt;&lt;td&gt;1365ms&lt;/td&gt;&lt;td&gt;2482ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Three-way partitioning Quicksort&lt;/td&gt;&lt;td&gt;1330ms&lt;/td&gt;&lt;td&gt;829ms&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;Three-way partitioning Quicksort with Insertion sort&lt;/td&gt;&lt;td&gt;1155ms&lt;/td&gt;&lt;td&gt;818ms&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;After several seconds of very exciting research study it was found that Java 7 uses new version of Quicksort algorithm which was discovered just in 2009 by Vladimir Yaroslavskiy and named &lt;a href="http://gdtoolbox.com/DualPivotQuicksort.pdf"&gt;Dual-Pivot QuickSort&lt;/a&gt;. Interestingly that after some search in internet, I have found algorithm called &lt;a href="http://www.freepatentsonline.com/y2007/0088699.html"&gt;"Multiple pivot sorting"&lt;/a&gt; which was published in 2007. It seems like generic case of "Dual-Pivot QuickSort" where is possible to have any number of pivots.&lt;br /&gt;As you may notice from the name, the main difference of that algorithm is that it is using two pivots, instead of one. Coding now is getting even more complicated. The simplest version of that algorithm may look like this:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;public static void dualPivotQuicksort(long arr[], int beginIdx, int len) {&lt;br /&gt;    if ( len &lt; 2 )&lt;br /&gt;        return;&lt;br /&gt;&lt;br /&gt;    final int endIdx = beginIdx+len-1;&lt;br /&gt;&lt;br /&gt;    long pivot1 = arr[beginIdx];&lt;br /&gt;    long pivot2 = arr[endIdx];&lt;br /&gt;&lt;br /&gt;    if ( pivot1 == pivot2 ) {&lt;br /&gt;        final long lengths = QuickSort.threeWayPartitioning(arr, beginIdx, endIdx, pivot1);&lt;br /&gt;        final int lLen = (int)(lengths&gt;&gt;32);&lt;br /&gt;        final int rLen = (int)lengths;&lt;br /&gt;&lt;br /&gt;        dualPivotQuicksort3(arr, beginIdx, lLen);&lt;br /&gt;        dualPivotQuicksort3(arr, endIdx-rLen+1, rLen);&lt;br /&gt;    } else {&lt;br /&gt;        if ( pivot1 &gt; pivot2 ) {&lt;br /&gt;            long tmp = pivot1;&lt;br /&gt;            pivot1 = pivot2;&lt;br /&gt;            pivot2 = tmp;&lt;br /&gt;            Utils.swap(arr, beginIdx, endIdx);&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        int l = beginIdx;&lt;br /&gt;        int r = endIdx;&lt;br /&gt;        int p = beginIdx;&lt;br /&gt;&lt;br /&gt;        while ( p &lt;= r ) {&lt;br /&gt;            if ( arr[p] &lt; pivot1 ) {&lt;br /&gt;                Utils.swap(arr, l++, p++);&lt;br /&gt;            } else if ( arr[p] &gt; pivot2 ) {&lt;br /&gt;                while ( arr[r] &gt; pivot2 &amp;&amp; r &gt; p ) {&lt;br /&gt;                    --r;&lt;br /&gt;                }&lt;br /&gt;                Utils.swap(arr, r--, p);&lt;br /&gt;            } else {&lt;br /&gt;                ++p;&lt;br /&gt;            }&lt;br /&gt;        }&lt;br /&gt;        if ( arr[l] == pivot1 ) ++l;&lt;br /&gt;        if ( arr[r] == pivot2 ) --r;&lt;br /&gt;&lt;br /&gt;        dualPivotQuicksort3(arr, beginIdx, l-beginIdx);&lt;br /&gt;        dualPivotQuicksort3(arr, l, r-l+1);&lt;br /&gt;        dualPivotQuicksort3(arr, r+1, endIdx-r);&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;First code picks up two pivots. If pivots are the same, it means we have just one pivot and in that case we can used three-way method for partitioning. If pivots are different, then partitioning process will look like this:&lt;br /&gt;&lt;img src="http://2.bp.blogspot.com/_WWOsd1svFq8/TPL6NKQxXWI/AAAAAAAAACQ/xoYJmyEjYm4/s1600/doublePivot1_quickSort.gif" border="0" /&gt;&lt;br /&gt;Scanning pointer "p" is moving from the beginning of array. If current element is "&lt;&gt; pivot1", then r-th element is swapped with p-th and "r" pointer is moved to next element backwards. All stops when "p" becomes less than "r". After partitioning, array will look like this:&lt;br /&gt;&lt;img src="http://1.bp.blogspot.com/_WWOsd1svFq8/TOW-HF-darI/AAAAAAAAABk/KeSuAFk07A8/s1600/doublePivot2_quickSort.gif" border="0" /&gt;&lt;br /&gt;When partition is finished, algorithms is called recursively for each partition.&lt;br /&gt;&lt;br /&gt;Reader shouldn't expect good performance from the provided code, it is not fast and performs even worse than Java 6 Arrays.sort. I was provided just to illustrate the concept.&lt;br /&gt;&lt;br /&gt;To be honest I failed to make my implementation to perform any better than version from Java 7. I must admit, that Yaroslav made a very good job there. Therefore I do not think that there is any sense in discussing my implementation here in details.&lt;br /&gt;&lt;br /&gt;But, if someone wants to challenge Java 7 version I can point to some direction for optimizations. Firstly, which is seems obvious? is pivot selection. Another easy improvement is Insertions sort at the beginning. Also, I have noticed that that algorithm is very sensitive to inlining, so there is sense to inline Utils.swap(). As other option, you can decided to go thought the middle partition and move elements equals to pivot1 or pivot2 to their final positions which will exclide them from the further sorting. I found that it is effective for relatively (&lt;=512 elements) small arrays. You can also have a look at source from the Java 7 and try to implement some tricks from there. Be ready to spend a lot of time :)  All in all, it can be seen that over the years sorting is getting better and better. And that statement doesn't only relate to Quicksort. Other sorting algorithms are improving as well. As examples can be considered &lt;a href="http://en.wikipedia.org/wiki/Introsort"&gt;Introsoft&lt;/a&gt; or &lt;a href="http://bugs.python.org/file4451/timsort.txt"&gt;Timsort&lt;/a&gt;. However, it would be true to say that nothing really new was discovered in that area since 1960s-1980s. Hopefully we will be lucky enough to see something completely new and radical in the future.&lt;br /&gt;&lt;br /&gt;For ones who want to dig deeper, as the starting point, I would suggest to visit following links:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://en.wikipedia.org/wiki/Quicksort"&gt;Quicksort Wikipedia article&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://gdtoolbox.com/DualPivotQuicksort.pdf"&gt;Dual-Pivot QuickSort&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://www.cs.princeton.edu/~rs/talks/QuicksortIsOptimal.pdf"&gt;Quicksort Is Optimal&lt;/a&gt; presentation by Robert Sedgewick &amp;amp; Jon Bentley&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;a href="http://videolectures.net/mit6046jf05_leiserson_lec04/"&gt;MIT lecture about quicksort&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-860765643150728560?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gcPkgSeC2thoVKYl1m26W_b85M0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gcPkgSeC2thoVKYl1m26W_b85M0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gcPkgSeC2thoVKYl1m26W_b85M0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gcPkgSeC2thoVKYl1m26W_b85M0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=-0AL9CdS7DY:rukbnTraIkY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=-0AL9CdS7DY:rukbnTraIkY:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=-0AL9CdS7DY:rukbnTraIkY:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=-0AL9CdS7DY:rukbnTraIkY:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/-0AL9CdS7DY" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/860765643150728560/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=860765643150728560" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/860765643150728560?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/860765643150728560?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/-0AL9CdS7DY/all-you-need-to-know-about-quicksort.html" title="All you need to know about QuickSort" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_WWOsd1svFq8/TPLaZHPfs2I/AAAAAAAAACA/kl3lOUcDbyE/s72-c/basic_quickSort.gif" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2010/10/all-you-need-to-know-about-quicksort.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYHQHY4fyp7ImA9Wx9XFU8.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-7240139820451959615</id><published>2010-10-11T23:08:00.057+01:00</published><updated>2011-01-08T22:02:11.837Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-08T22:02:11.837Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="jcaptcha" /><title>JCaptcha, SecureRandom &amp; performance</title><content type="html">&lt;div&gt;Personally, I'm not big fan of JCaptcha library and recently was lucky enough to find another problem there. The problem is related mostly to linux and it's implementation of java.security. SecureRandom, which is &lt;a href="http://stackoverflow.com/questions/137212/how-to-solve-performance-problem-with-java-securerandom"&gt;known to be slow&lt;/a&gt; and is locking on every call to it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For some reason (I suspect that &lt;a href="http://jcaptcha.octo.com/jira/browse/FWK-48"&gt;this&lt;/a&gt; was the reason) JCaptacha overuse java.security.SecureRandom when it generates background image using FunkyBackgroundGenerator. Number of calls to get next random float can easily reach something around 100 000 per one captcha image. It is basically called at least once for each pixel.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Lets run some quick tests to have a look how bad is that. I have wrote write simple captch engine:&lt;/div&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;public static class MyImageCaptchaEngine extends ListImageCaptchaEngine {&lt;br /&gt;  protected void buildInitialFactories() {&lt;br /&gt;      WordGenerator wgen = new RandomWordGenerator("ABCDEFGHIJKLMNOPQRSTUVWXYZ123456789");&lt;br /&gt;      RandomRangeColorGenerator cgen = new RandomRangeColorGenerator(&lt;br /&gt;         new int[] {0, 100},&lt;br /&gt;         new int[] {0, 100},&lt;br /&gt;         new int[] {0, 100});&lt;br /&gt;      TextPaster textPaster = new RandomTextPaster(new Integer(7), new Integer(7), cgen, true);&lt;br /&gt;&lt;br /&gt;      BackgroundGenerator backgroundGenerator = new FunkyBackgroundGenerator(new Integer(200), new Integer(100));&lt;br /&gt;&lt;br /&gt;      Font[] fontsList = new Font[] {&lt;br /&gt;         new Font("Arial", 0, 10),&lt;br /&gt;         new Font("Tahoma", 0, 10),&lt;br /&gt;         new Font("Verdana", 0, 10),&lt;br /&gt;      };&lt;br /&gt;&lt;br /&gt;      FontGenerator fontGenerator = new RandomFontGenerator(new Integer(20), new Integer(35), fontsList);&lt;br /&gt;&lt;br /&gt;      WordToImage wordToImage = new ComposedWordToImage(fontGenerator, backgroundGenerator, textPaster);&lt;br /&gt;         this.addFactory(new GimpyFactory(wgen, wordToImage));&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;And the test itself:&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; white-space: pre; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;long begin = System.currentTimeMillis();&lt;br /&gt;for(int i = 0; i != 100; ++i) {&lt;br /&gt;  engine.getNextCaptcha();&lt;br /&gt;}&lt;br /&gt;long end = System.currentTimeMillis();&lt;br /&gt;System.out.println("Total time is [" + (end - begin) + "]");&lt;br /&gt;&lt;/pre&gt;now lets run it:&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; white-space: pre; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Total time is [10967]&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;Ok, so what we have now it 10967ms, which, I believe, is bad. It can be significantly improved. I'm not very big fan of high-quality random backgrounds, so I will replace SecureRandom class, used by parent of FunkyBackgroundGenerator with "pseudo" random Random class. Funs of high-quality random backgrounds can still use SecureRandom for seeding, through:&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;public static class MyFunkyBackgroundGenerator extends FunkyBackgroundGenerator {&lt;br /&gt;  public MyFunkyBackgroundGenerator(Integer width, Integer height) {&lt;br /&gt;     super(width, height);&lt;br /&gt;     try {&lt;br /&gt;         Field rndField = AbstractBackgroundGenerator.class.getDeclaredField("myRandom");&lt;br /&gt;         rndField.setAccessible(true);&lt;br /&gt;         rndField.set(this, new Random());&lt;br /&gt;     }&lt;br /&gt;     catch (Exception e) {&lt;br /&gt;         e.printStackTrace();&lt;br /&gt;     }&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div&gt;I know, that is dirty hack, but as far "myRandom" is declared with default visibility, that's the shortest way to replace it for now . And what we have now is:&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: monospace; font-size: 13px; white-space: pre; "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;Total time is [1308]&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Approximately 7 time quicker. Not that bad, specially for a sample case. In real world application improvement will be even more significant because some other processes may use '/dev/(u)random' or application itself can utilize SecureRandom for other purposes.&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That's not it. There is another bottleneck, which is usage of Java2D for rendering captcha images. Java2D is well known for it's problems with multi-threading and the summary of these problems is that Java2D doesn't scale well. Some details can be found &lt;a href="http://stackoverflow.com/questions/3922440/howto-make-image-generation-scalable-on-java"&gt;here&lt;/a&gt;. Possibly the way to fix that problem may be removing Java2D and using direct access to image via &lt;a href="http://download-llnw.oracle.com/javase/6/docs/api/java/awt/image/WritableRaster.html"&gt;WritableRaster&lt;/a&gt; instead. However, it doesn't solve all problems, as far as Java2D is still used for drawing text.&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-7240139820451959615?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/IS4RyBC72L34O6qeWHR6-Gk6k8o/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IS4RyBC72L34O6qeWHR6-Gk6k8o/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/IS4RyBC72L34O6qeWHR6-Gk6k8o/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/IS4RyBC72L34O6qeWHR6-Gk6k8o/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=0vAeGgRTaUE:Mx_kn2akFi8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=0vAeGgRTaUE:Mx_kn2akFi8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=0vAeGgRTaUE:Mx_kn2akFi8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=0vAeGgRTaUE:Mx_kn2akFi8:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/0vAeGgRTaUE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/7240139820451959615/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=7240139820451959615" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/7240139820451959615?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/7240139820451959615?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/0vAeGgRTaUE/jcaptcha-securerandom-performance.html" title="JCaptcha, SecureRandom &amp; performance" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2010/10/jcaptcha-securerandom-performance.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DU8MRn86eCp7ImA9WhRSF0U.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-4056131211687193796</id><published>2010-08-17T12:31:00.094+01:00</published><updated>2011-11-20T11:18:07.110Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-20T11:18:07.110Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="performance" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="concurrenthashmap" /><category scheme="http://www.blogger.com/atom/ns#" term="concurrency" /><title>ConcurrentHashMap revealed</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Java 1.5 introduced some new cool concurrency stuff which is located in java.util.concurrent package. There are lots of good things there including new ConcurrentHashMap class which I'm going to talk about. That class is targeted to be used in concurrent environment and provides significant performance benefits over synchronized version of HashMap. Javadoc doesn't really provide lots of details on how that class works and why can be better than synchronized version of HashMap. I think that understanding of these details is crucial for using that class in a right way, so I've made some research to undercover implementation details and mechanisms used to implement that class.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;b&gt;Map Regions&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Firstly I will repeat what is already said in JavaDoc - that map implementation consists of regions. Each region is hash table - an array where each element is associated with some range of hash codes and contains linked list of entries. It means that structurally region is very similar to normal HashMap. All write operations have to acquire write lock on the whole region. All read operation on the region are performed without locking, apart from one small exception. That exception happens on attempt to read value of entry and that value is "null". In that case code suspects that compiler and could possibly assign entry to array element before calling entry's constructor (good example and explanation of that problem can be found &lt;a href="http://en.wikipedia.org/wiki/Double-checked_locking"&gt;here&lt;/a&gt;). In reality it would mean that the compiler has a bug, because such optimization contradicts &lt;a href="http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html"&gt;Java Memory Model agreement&lt;/a&gt;. When that happens code tries to acquire write lock and perform reading inside that lock. Such strategy guarantees that initialization of the object is completed before the reference is assigned to the array element. As far as by contract ConcurrentHashMap doesn't allow neither key or value to be "null" and a possibility of compiler bug is extremely low, chance of "blocking read" is negligible. &lt;br /&gt;
Another interesting thing about region is that it has &lt;a href="http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html#volatile"&gt;volatile&lt;/a&gt; counter which counts number of modifications of that region. That value is used in many methods of ConcurrentHashMap to identify that region’s state is not changed during execution of current method. Basically it is used as a means of solving &lt;a href="http://en.wikipedia.org/wiki/ABA_problem"&gt;ABA problem&lt;/a&gt;. It doesn't seem right to me that such strategy is applied even on read methods, the most of them are much slower than they can be without that check. There is also some locking (e.g. in size() operation) of individual segments which looks unnecessary as far as result is not going to be accurate anyway. But, on the other hand, that class was created by Doug Lea who is very respectable for his concurrency research, so I suspect I'm missing something...&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Iteration through ConcurrentHashMap&lt;/b&gt;&lt;br /&gt;
&lt;div&gt;
&lt;br /&gt;
Some other stuff, which may raise questions, is relationship between collection and enumeration objects returned by “keySet()”, “values()”, “entrySet()”, “keys()” and “elements()” and ConcurrentHashMap instance which have created them. Implementation of all these objects is based on internal class HashIterator and the noticeable thing here is that instance of that class has some information about the state of ConcurrentHashmap at the moment of it’s (HashIterator’s instance) creation. As an example, there is direct reference to the segment’s data array and on the moment when the HashIterator instance is actually used, given segment could have already decided to create a new array, because the old one appeared to be too small. It means that data returned by these collections and enumerations may not reflect changes in the instance of ConcurrentHashmap which happened after given collection or enumeration was created.&lt;br /&gt;
Performance considerations for these objects are exactly the same as for ConcurrentHashMap’s methods - read methods are non-blocking and for update methods lock is acquired on segment level. Interesting, but not really practically useful fact, is that HashIterator isn’t that smart as ConcurrentHashMap itself and doesn’t lock when entry’s value is null. So in theory, it is possible that iterator created by “elements()” method will return null value from “next()” or “nextElement()”.&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Building the map&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
To build a map properly you have to understand what constructor’s arguments mean. Here is a brief explanation in the light of things which are written above:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Default initial capacity. That parameter is used to calculate initial capacity of segments. The capacity of each segment is nearest power of two bigger than provided initial capacity divided by number of regions (see Default concurrency level). E.g. initial capacity is 1000 and concurrency level is 3, then number of regions is 4 and capacity of each region is 256 (which is nearest power of two bigger than 1000/4). Default value of that argument is 16.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Default load factor. Is used to identify the moment when the region has to be resized (see section about memory consumption below). No magic, used as is. Default value of that argument is 0.75.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Default concurrency level. Defines number of regions which will be created. Exact number of regions is nearest power of two bigger than provided concurrency level. Concurrency level is always less than 2^16. E.g. if concurrency level is 18, number of regions will be 32. Default value of that argument is 16. Keep in mind, that more regions (better concurrency), means higher memory&amp;nbsp;consumption.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
And, probably, the last bit - memory consumption. In these terms ConcurrentHashMap is approximately the same as HashMap, but multiplied by number of regions. Region grows at the moment when number of elements appeared to be equal to loadFactor*currentSizeOfRegion value. New region size is always twice as big as previous one, maximum size of region is 2^30.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;b&gt;Migration to ConcurrentHashMap&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;
Other possible question which can be raised is the migration from synchronized version of HashMap to CuncurrentHashMap. There are several things which has to be evaluated during the migration process:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Some methods can use synchronized map object for synchronization purposes. If someone accrue the lock on the object, all it’s methods are locked as well. That’s be biggest fun. There is no simple way to archive such behaviour with CuncurrentHashMap.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;CuncurrentHashMap’s size method is slow. In the worst case it spins couple of time and then get the lock on all regions. This is much-much-much slower than HashMap implementation, which returns back just the value of the “size” field.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Iterator of CuncurrentHashMap does not throw ConcurrentModificationException. Do not see how this can cause problem, but just keep it is mind.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;Containing the same amount of elements ConcurrentHashMap object requires more memory than HashMap object (see “Building the map” section).&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
All in all, ConcurrentHashMap is brilliant container. In multi-threaded environments it will have much bigger throughput than synchronized version of HashMap on read and write operations. Such improvement is result of absence of locking on read and using of region-based locking on write operations. There is sill small chance that segment will be locked for a very short time on read, but chance is so small that it can be just ignored. Write operations are locking just one region, other regions can be updated at the same time.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
The price for all these improvements are increase in memory usage and some degradation of performance on read operations. More memory is used because each region wastes approximately the same amount of memory as one HashMap. Performance drop on accessing elements is because of &lt;a href="http://en.wikipedia.org/wiki/ABA_problem"&gt;ABA checks&lt;/a&gt;. Write operations do not seem to introduce any performance degradation, apart from use of locking.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-4056131211687193796?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Fu5Ic6QTFEMNpvQCf33Sd6oi1wM/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fu5Ic6QTFEMNpvQCf33Sd6oi1wM/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Fu5Ic6QTFEMNpvQCf33Sd6oi1wM/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Fu5Ic6QTFEMNpvQCf33Sd6oi1wM/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=otNWB3MO53E:jFcJxdcKaw4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=otNWB3MO53E:jFcJxdcKaw4:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=otNWB3MO53E:jFcJxdcKaw4:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=otNWB3MO53E:jFcJxdcKaw4:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/otNWB3MO53E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/4056131211687193796/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=4056131211687193796" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/4056131211687193796?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/4056131211687193796?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/otNWB3MO53E/concurrenthashmap-revealed.html" title="ConcurrentHashMap revealed" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>7</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2010/08/concurrenthashmap-revealed.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A04FSXk_fCp7ImA9WxFWEEo.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-1977489224995057735</id><published>2010-05-25T15:40:00.063+01:00</published><updated>2010-05-28T21:51:58.744+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-05-28T21:51:58.744+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><category scheme="http://www.blogger.com/atom/ns#" term="security" /><title>Some hints for writing secure code</title><content type="html">&lt;div class="MsoNormal"&gt;&lt;span class="apple-style-span"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;Security and data protection are becoming now more and more popular topics. We are coming into the world where too much information is transfered/used/processed by computer systems and any leak of that information can cause a big trouble. Thus, it is very important for application to protect customer information as much as it can and do not allow it to spread out.&lt;/span&gt;&lt;/span&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="apple-style-span"&gt;There are many aspects of application security and these cover processes, architecture, infrastructure, code, etc. The whole topic is extremely big and versatile and there are some&lt;/span&gt;&lt;span class="apple-converted-space"&gt; &lt;/span&gt;&lt;span class="apple-style-span"&gt;&lt;a href="http://books.google.co.uk/books?q=application+security&amp;amp;oq=application+se"&gt;books&lt;/a&gt; written to cover all its possible verges. I will touch just a small piece which is related to something which is in area of developer's responsibility - code and application architecture. Also, I assume that that reader mostly works on web applications implemented on Java or similar platform.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="apple-style-span"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;&lt;div class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;I disagree that creation of secure code is hard work; I would say it's just a question of some knowledge and discipline. Here are several guidelines which developer has to follow to cover the most of application security vulnerabilities. Of course list is not complete and mostly covers just protection of customer's data.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;Always hash user passwords&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;The worst thing you can do is do not hash user passwords and store then as clear text. Less bad thing is to encode them, but it’s still naughty. You do not need to know your customers’ password, let you know, better you sleep.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;I can't imagine scenario where application has to have an access to user passwords, but easily can imagine what would happen if someone&lt;span class="apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://www.nytimes.com/external/readwriteweb/2009/12/16/16readwriteweb-rockyou-hacker-30-of-sites-store-plain-text-13200.html"&gt;will get an access to such treasure&lt;/a&gt;. Thus, user's password must be hashed, preferably using&lt;span class="apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Salted_hash"&gt;salted hash&lt;/a&gt;&lt;span class="apple-converted-space"&gt; &lt;/span&gt;and good hash function like&lt;span class="apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/SHA-2"&gt;SHA-2&lt;/a&gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;And be always suspicious about websites, which are able to send you your password by mail.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;br /&gt;&lt;b&gt;Always encrypt sensitive data&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;If application operates with sensitive data, e.g. password for connecting to legacy backend systems or credit card numbers, that password mustn't be in clear text and must be encrypted. The most of the data has to be encrypted just in storage, but some also on runtime. There is very small chance that someone will get an access to your memory dump, that chance is really-really small, but for very critical data it shouldn't be ignored.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;Of course, encryption has to be done with proper cipher,&lt;span class="apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard_process"&gt;AES&lt;/a&gt;&lt;span class="apple-converted-space"&gt; &lt;/span&gt;should be fine. The only problem is that to encrypt something you need to have a secret, which has to be unencrypted and if attacker will get it, the whole system will be compromised. So that secret has to be protected properly, e.g. with help of&lt;span class="apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Hardware_Security_Module"&gt;HSM&lt;/a&gt;, or at least it has to be protected on OS level with proper permissions.&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;Logging&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;Logging mustn’t have user-related or any other type of sensitive information. Examples can be credit card details, bank details, personal messages, etc. Be very careful with “toString” implementation of classes which contain sensitive information. Always keep in mind that logs can fall into somebody's dirty hands.&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia;"&gt;&lt;b&gt;Always use strong ciphers and hashes&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal" style="margin-bottom: 12.0pt;"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;There is no much sense to use hash or cipher if it can be easily compromised. Thus, application has to use the best available set. Another thing developer has to remember is the fact, that even the best things will become trash in the face of tomorrow. It means that must be a way to change algorithm in future. For instance, hashed password may have prefix with algorithm name at the beginning, so as soon new algorithm is available it can be used. Here is an example of such hash:&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;i&gt;{SHA-1}:pOtmGeFyIsThHT6LfNE846FJAWxjmLiR&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Of course old passwords will remain the same, but it’s better than nothing. The similar principle applies to encrypted values with only difference that encrypted values can be recovered and re-encrypted.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Acceptable choice of algorithms at this moment (05.2010) is&lt;span class="apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/SHA-2"&gt;SHA-2&lt;/a&gt;&lt;span class="apple-converted-space"&gt; &lt;/span&gt;for hashing and&lt;span class="apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Advanced_Encryption_Standard"&gt;AES&lt;span class="apple-converted-space"&gt; &lt;/span&gt;&lt;/a&gt;for symmetric cryptography. There are not many choices of asymmetric algorithms,&lt;span class="apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/RSA"&gt;RSA&lt;/a&gt;&lt;span class="apple-converted-space"&gt; &lt;/span&gt;is the best known and wide used example. Apart from algorithm have a thought about hash/key size - bigger is better for security.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;Use Prepared Statement&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;That's just a must. Always use PreparedStatement or equivalent and never build SQL statement by concatenating arguments which with high probability will be cause of&lt;span class="apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/SQL_injection"&gt;SQL injection&lt;/a&gt;&lt;span class="apple-converted-space"&gt; &lt;/span&gt;problem. Let database driver think about that problem.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;Hide implementation details from the user&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;It doesn't matter who are your users, it can be another system or real person, you have to tell them as less as you can about your system. That knowledge can help attacker to recognize products you use or give some information how you system is build. All it can give some idea how application can be hacked. For example, printing exception stack trace into browser window, which is happening on some websites, provides almost all information about libraries, used products, architecture, etc.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;Validate user input&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Anything which comes externally must be validated. Any value has to have boundaries. The most convenient way to archive that is using regular expressions. This protects against&lt;span class="apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Cross-site_scripting"&gt;XSS&lt;/a&gt;&lt;span class="apple-converted-space"&gt; &lt;/span&gt;and related problems.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;Shield output&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Do not trust to anything and your own system is not exception. Before output any data to customer, it has to be shielded to remove any invalid characters. And again it can be base for &lt;a href="http://en.wikipedia.org/wiki/Cross-site_scripting"&gt;XSS&lt;/a&gt;&lt;span class="apple-converted-space"&gt; &lt;/span&gt;and related attacks.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;Re-create session after authentication&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;It is possible that session id was&lt;span class="apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Session_hijacking"&gt;compromised&lt;/a&gt;&lt;span class="apple-converted-space"&gt; &lt;/span&gt;or used in&lt;span class="apple-converted-space"&gt; &lt;/span&gt;&lt;a href="http://en.wikipedia.org/wiki/Session_fixation"&gt;session fixation&lt;/a&gt;&lt;span class="apple-converted-space"&gt; &lt;/span&gt;attack. Thus, using the same session id after authentication will open the system to attacker, so it has to be re-generated.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;Use authorization&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;You should explicitly authorize uses on every layer; otherwise there is too much space for the &lt;a href="http://www.xiom.com/whid-list/Insufficient%20Authorization"&gt;holes&lt;/a&gt;&lt;span class="apple-converted-space"&gt; &lt;/span&gt;in application. That is specifically important for web applications where sometimes all authorization is based on just URL principle, which is dangerous practice.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;Use auditing&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span"  style=" font-weight: normal;font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;b&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;b&gt;&lt;span style=" ;font-family:Georgia;color:black;"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;Would be funny if someone will attack your system and you will not have any tracks of it. Therefore, developer has to have some sort of log for recoding activities performed by the system. That logs shouldn’t be confused with logs used for debugging and troubleshooting, latter contain debug information which help to developer to look for and fix bugs (although they can contain relevant information as well and can be used for tracking attacker actions as well). Auditing logs, on other hand, contain events raised on performing certain activities, e.g. login attempts, payments, etc.&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia, 'Times New Roman', serif;"&gt;In conclusion, I would remind that it’s not complete list, there are much more things which you can do to protect your application. For ones who are interested in making their application more secure, I would recommend following links:&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;/div&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="https://www.pcisecuritystandards.org/index.shtml"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia, 'Times New Roman', serif;"&gt;PCI DSS&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia, 'Times New Roman', serif;"&gt;. This is more about payments and protecting card details, but do not forget that card details are just another piece of information.&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;a href="http://en.wikipedia.org/wiki/Application_security"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia, 'Times New Roman', serif;"&gt;Wikipedia application security page&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia, 'Times New Roman', serif;"&gt;. Has lots of good links for further reading.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia, 'Times New Roman', serif;"&gt;&lt;span class="Apple-style-span"  style="font-family:'Times New Roman';"&gt;&lt;a href="http://www.owasp.org/index.php/Main_Page"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia, 'Times New Roman', serif;"&gt;OWASP website&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia, 'Times New Roman', serif;"&gt;. Lots of information about &lt;/span&gt;&lt;span style="color:black;"&gt;&lt;span class="Apple-style-span"  style="font-family:Georgia, 'Times New Roman', serif;"&gt;vulnerabilities and how to avoid them and about web application security in general.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-1977489224995057735?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/U_SNNRfZJ9wVNu_k29TmaypGOU0/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U_SNNRfZJ9wVNu_k29TmaypGOU0/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/U_SNNRfZJ9wVNu_k29TmaypGOU0/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U_SNNRfZJ9wVNu_k29TmaypGOU0/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=SWv4DCIvmMo:8cXJzK9zvjQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=SWv4DCIvmMo:8cXJzK9zvjQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=SWv4DCIvmMo:8cXJzK9zvjQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=SWv4DCIvmMo:8cXJzK9zvjQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/SWv4DCIvmMo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/1977489224995057735/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=1977489224995057735" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/1977489224995057735?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/1977489224995057735?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/SWv4DCIvmMo/some-hints-for-writing-secure-code.html" title="Some hints for writing secure code" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2010/05/some-hints-for-writing-secure-code.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUBSXo6fSp7ImA9WxFRFUo.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-1783555964439141430</id><published>2010-04-05T20:17:00.044+01:00</published><updated>2010-04-29T22:40:58.415+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-04-29T22:40:58.415+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><title>Killing the private (and protected)</title><content type="html">&lt;div class="MsoNormal"&gt;Recently on one forum I've found topic which released from memory my C++ days. That was topic about using "private" modifier on methods. The question there was about cases where to use it and why. Everybody knows when you are programming on C++ (as the most glaring example) one of "good practices" is "less client can do - better". Of course that's not in sense of functionality provided to client, but in mind of something which is not explicitly provided. In C++, I believe, the main reason for that is fragility of runtime, which can be easily killed if someone accidentally will do something wrong, which can also cause physical damage to person who is responsible for doing that (worth mentioning, in Java situation is slightly different, it's hard (but still possible, of course) to kill the application by "accidental coding"). And a consequence of such “good practice” is the basic rule – “make private as much as you can”.&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;That rule makes a good job in protecting object’s invariant and supporting encapsulation, but it has some disadvantages as well. First, it indicates that author most probably haven’t ever unit-tested that method and, second, which is more important for the topic, client of such code loses freedom of modification of library if he needs to (btw, some other techniques, like &lt;a href="http://www.ibm.com/developerworks/java/library/j-jtp1029.html"&gt;final&lt;/a&gt; classes, static members, “default” access modifier are doing the same thing). In the most it affects developers who use languages similar to Java. The way how Java developer works assumes that he spends lots of time in libraries’ code – understanding how they work, looking possible ways of customization, etc. The most of IDE now days are brilliant and I feel no difference in browsing my own code or library code. Moreover, if I don’t have source code, IDE will kindly decompile class for me. As a consequence of such close interaction with the library code, the situation when you want to fix/change/hack something in library is not very rare. For me that happens at least several times per year. And the one of the worst things I can see in that case is method I want to “modify” is private and I can’t change its behaviour by inheritance or implementation of other strategy. In that situation author of library had decided what is safe for me and what is not. I appreciate that, but would prefer to make decision myself.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt;Some can say that with loss of “private” modifier we are loosing benefits of encapsulation. I wouldn't be so sure about it. The same effect can be easily archived using other methods, like combination if pure Interfaces and Factories. And it works even better – client would never know instance of which class he is using, all he knows is just an interface. &lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;The real problem of removing “private” is that we need to use something instead. The closest candidate is “protected” (I will not cover “default”, etc modifiers for simplicity reasons). Problem of “protected” is that such method is considered as part of interface. Commonly it is used as technique for implementing Template Method pattern. But the same effect can be achieved using Strategy, which provides less coupling, is more flexible in implementation, etc (see &lt;a href="http://staff.cs.utu.fi/~jounsmed/doos_06/material/TemplateAndStrategy.pdf"&gt;here&lt;/a&gt;) and as a result you will have class just with “public” methods.&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt;All in all, I suppose, that ideal approach is to build systems based on interfaces and appropriate patterns, which will exclude the most of need for “private” and “protected” method modifiers. In that case, actually, I even do not worry about them &lt;span style="font-family: Wingdings;"&gt;J&lt;/span&gt; But ideal case usually never happens. As a general approach for other cases, I would suggest to avoid private as much as you can and use appropriate patterns instead. Also, it’s good to avoid protected as well, but if you can’t then state clearly, that these methods are not part of the interface and if client is going to override them, he is doing it on his own risk.&lt;/o:p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-1783555964439141430?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/H6a3OwPjQumfgTvkX4h3Q25kD8M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/H6a3OwPjQumfgTvkX4h3Q25kD8M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/H6a3OwPjQumfgTvkX4h3Q25kD8M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/H6a3OwPjQumfgTvkX4h3Q25kD8M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=KEerfxYQRMs:ahqTDiE_A9E:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=KEerfxYQRMs:ahqTDiE_A9E:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=KEerfxYQRMs:ahqTDiE_A9E:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=KEerfxYQRMs:ahqTDiE_A9E:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/KEerfxYQRMs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/1783555964439141430/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=1783555964439141430" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/1783555964439141430?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/1783555964439141430?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/KEerfxYQRMs/killing-private-and-protected.html" title="Killing the private (and protected)" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>5</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2010/04/killing-private-and-protected.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C08CSXo4eip7ImA9WxFTEEo.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-1238055595055140517</id><published>2010-03-31T22:37:00.002+01:00</published><updated>2010-03-31T22:44:28.432+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-31T22:44:28.432+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PKI" /><category scheme="http://www.blogger.com/atom/ns#" term="cryptography" /><title>Public key infrastructure</title><content type="html">&lt;div class="MsoNormal"&gt;Some time ago I was asked to create presentation for my colleagues which describes Public Key Infrastructure, its components, functions, how it generally works, etc. To create that presentation, I've collected some material on that topic and it would be just dissipation to throw it out. That presentation wasn’t technical at all, and that post is not going to be technical as well. It will give just a concept, high-level picture, which, I believe, can be a good base knowledge before start looking at details.&lt;/div&gt;&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
&lt;div class="MsoNormal"&gt;I will start with cryptography itself. Why do we need it? There are at least three reasons for that - Confidentiality, Authentication and Integrity. Confidentiality is the most obvious one. It's crystal clear that we need cryptography to hide information from others. Authentication confirms that message is send by subject which we can identify and our claims about it are true. And finally, Integrity ensures that message wasn't modified or corrupted during transfer process.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;We may try to use Symmetric Cryptography to help us to achieve our aims. It uses just one shared key, which is also called secret. The secret is used for encryption and for decryption of data. Let’s have a look how it can help us to archive our aims. Does it encrypt messages? Yes. Well, Confidentiality is solved, as soon as nobody else, except communicating parties, knows the secret. Does it provide Authentication? Mmm… I would say, no. If there are just two parties in conversation, is seems ok, but if there are hundreds, then should be hundreds secrets, which is hard to manage and distribute. What about Integrity? Yes, it works fine – it’s very hard to modify encrypted message. As you can guess, symmetric cryptography has one big problem – and that problem is “shared secret”. These two words… they don't even fit one to other. If something is known by more that one person, it is not a secret any more. Moreover, to be shared, that secret somehow has to be transferred and during that process there are too many way for secret to be stolen. This means that such type of cryptography hardly solves our problems. But it is still in use and works quite well for its purposes. It's very fast and can be used for encryption/decryption of big amounts of data, e.g. you hard drive. Also, as far as it hundreds or even thousands times faster that asymmetric cryptography, it’s used in hybrid schemas (like TLS aka SSL), where asymmetric cryptography is used for just for transferring symmetric key and encryption/decryption is done by symmetric algorithm.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Let’s have a look at Asymmetric Cryptography. It was invented very recently about 40 years ago. The first paper (“&lt;a href="http://www.cs.rutgers.edu/~tdnguyen/classes/cs671/presentations/Arvind-NEWDIRS.pdf"&gt;New Directions in Cryptography&lt;/a&gt;”) was published in 1976 by  &lt;a href="http://en.wikipedia.org/wiki/Whitfield_Diffie"&gt;Whitfield Diffie&lt;/a&gt; and &lt;a href="http://en.wikipedia.org/wiki/Martin_Hellman"&gt;Martin Hellman&lt;/a&gt;. Their work was influenced by &lt;a href="http://en.wikipedia.org/wiki/Ralph_Merkle"&gt;Ralph Merkle&lt;/a&gt;, who believed to be the one who created the idea of Public Key Cryptography in 1974 (&lt;a href="http://www.merkle.com/1974/"&gt;http://www.merkle.com/1974/&lt;/a&gt;) and suggested it as project to his mentor - &lt;a href="http://en.wikipedia.org/wiki/Lance_Hoffman"&gt;Lance Hoffman&lt;/a&gt;, who rejected it. “New Directions in Cryptography” describes algorithm of key exchange known as “Diffie–Hellman key exchange”. Interesting fact that the same key exchange algorithm was invented earlier, in 1974 in Government Communication Headquarters, &lt;st1:country-region&gt;&lt;st1:place&gt;UK&lt;/st1:place&gt;&lt;/st1:country-region&gt; by Malcolm J. Williamson, but that information was classified and fact was disclosed just in 1997.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;Asymmetric Cryptography uses pair of keys - one Private Key and one Public Key. Private Key has to be kept secret and not shared with anybody. Public Key can be available to public; it doesn’t need to be secret. Information encrypted with public key can be decrypted only with corresponding private key. As far as Private Key is not shared, there is no need to distribute it, and there is reasonably small chance that it will be compromised. So such way of exchanging information can solve Confidentiality problem. What about Authentication and Integrity? These problems are solvable as well and utilise mechanism called Digital Signature. The simplest variant if Digital Signature can use following scenario – subject creates a hash based on message, encrypt that hash with Private Key and attach it to message. Now if recipient wants to verify the subject who created a message, he will encrypt that hash using subject’s public key (that’s Authentication) and compare it with hash generated on recipient side (Integrity). In reality hash is not exactly encrypted, instead it used in special signing algorithm, but the overall concept is the same. It’s important to notice that in Asymmetric Cryptography each pair of keys serves just one purpose, e.g. if pair is used for signing, it can’t be used for encryption.&lt;o:p&gt;&lt;/o:p&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Digital Signature, also, is the base for Digital Certificate AKA Public Key Certificate. Certificate is pretty much the same as your passport. It has identity information, which is similar to name, date of birth, etc. in passport. Owner of certificate has to have Private Key which matches Public Key stored in certificate, similar passport has photo of the owner, which matches owner’s face. And, finally, certificate has a signature, and its meaning is the same, as meaning of stamp in passport. Signature proves that certificate was issued by organization which made that signature. In Public Key Infrastructure world such organizations are called Certificate Authorities. If one system discovers that Certificate is signed by “trusted” Certificate Authority, it means that system will trust to information in certificate.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt; &lt;/o:p&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Last paragraph may not be obvious, especially “trust” part of it. What does “trust” mean in that context? Let have a look at simple example. Every site on Web which makes a use of encrypted connection does it via TLS (SSL) protocol, which is based on Certificates. When you go to &lt;a href="https://www.amazon.co.uk/"&gt;https://www.amazon.co.uk&lt;/a&gt; and it sends its certificate back to your browser. In that certificate there is information about website and reference to Certificate Authority who signed that certificate. First browser will look at the name in certificate – it has to be exactly the same as website domain name, in our case, that’s “www.amazon.co.uk”. Then browser will verify that certificate is signed by Trusted Certificate Authority, which is VeriSing in case of Amazon. You browser already has a list of Certificate Authorities (this is just a list of certificates with public keys) which are known as trusted ones, so it can verify  that certificate is issued by one of them. There are some other verification steps, that these two are the most important ones. Assume in our case verification was successful (if it’s not browser will show is big red warning message, like &lt;a href="https://www.rsdn.ru/"&gt;that one&lt;/a&gt;) – certificate has proper name in it and was signed by Trusted Certificate Authority. What does it give to us? Just one thing – we know that we are on &lt;a href="http://www.amazon.co.uk/"&gt;www.amazon.co.uk&lt;/a&gt; and the server behind that name is Amazon server, not some dodgy website, which just looks like Amazon. When we enter our credit card details and we can be relatively sure that they will be sent to Amazon, but not to hacker’s database. Our hope here based on assumption that such Certificate Authorities like VeriSign do not give dodgy certificates and Amazon server is not compromised. Well, better than nothing &lt;span style="font-family: Wingdings;"&gt;J&lt;/span&gt;&lt;/div&gt;&lt;div class="MsoNormal"&gt;Another example are severs in organization, which use certificates to verify that they can trust one to other. The schema there is very similar to browser’s ones, except two differences:&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l0 level1 lfo2; tab-stops: list 36.0pt;"&gt;Mutual      authentication. Certificates are, usually, verified but both sides, not      just by client. Client has to send his certificate to server.&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l0 level1 lfo2; tab-stops: list 36.0pt;"&gt;Certificate      Authority, is hosted inside the company.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal"&gt;When CA is inside the company we can be almost sure that certificates are going to be issued only to properly validated subjects. It gives some confidence that hacker can’t inject his server, even if he has access to network infrastructure. Attack is possible only if CA is compromised or some server’s Private Key is compromised.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;We already know, Certificate Authority is the organization which issues certificate and in the Internet, an example of such organization is VeriSing. If certificate is created to be used just inside organization (intranet), it can be issued by Information Security Department which can act as Certificate Authority. When someone wants to have certificate, he has to send certificate request which is called Certificate Signing Request to Certificate Authority. That certificate consists of subject’s identity information, subject’s public key and signature, created by subject’s private key to ensure, that subject who sent request has appropriate private key. Before signing Certificate Authority passes that request to Registration Authority who verifies all details, ensures that proper process is followed, etc. It’s possible that Certificate Authority can also act as Registration Authority. After all, if everything is ok, Certificate Authority creates new certificate signed by its private key and send it back to subject which requested certificate.&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div class="MsoNormal"&gt;I've already mentioned Certificate validation process. Here are some details of it; worth mentioning theirs details are still high-level. Validation consists of several steps which, broadly speaking can be described as:&lt;/div&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l4 level1 lfo1; tab-stops: list 36.0pt;"&gt;Certificate      data validation – validity date, presence of required fields, their      values, etc.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l4 level1 lfo1; tab-stops: list 36.0pt;"&gt;Verify      that certificate is issued by Trusted Certificate Authority. If you are      browsing internet that list if already built-in in your browser. If that’s      communication between two systems, each system has a list of trusted Certificate      Authorities; usually that is just a file with certificates.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l4 level1 lfo1; tab-stops: list 36.0pt;"&gt;Certificate’s      signature is valid and made by Certificate Authority who signed that      certificate.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l4 level1 lfo1; tab-stops: list 36.0pt;"&gt;Verify      that certificate is not revoked.&lt;o:p&gt;&lt;/o:p&gt;&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l4 level1 lfo1; tab-stops: list 36.0pt;"&gt;Key      verification – proves that servers can decode messaged encrypted by      certificate’s Public Key.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal"&gt;&lt;o:p&gt;Mentioned above certificate revocation can happen because of many reasons – certificate could be &lt;a href="ttp://www.amug.org/~glguerin/opinion/revocation.html"&gt;compromised&lt;/a&gt;, or, in corporate world, employee, which owned certificate, left company, or sever which had certificate was decommissioned, etc.   On order to verify certificate revocation, browser or any other piece of software, has to use one or both of following techniques:&lt;/o:p&gt;&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l2 level1 lfo5; tab-stops: list 36.0pt;"&gt;Certificate      Revocation List (CRL). That’s just a file, which can be hosted on http      server. It contains list of revoked certificate IDs. That’s method is      simple and straightforward, it doesn’t require lots of efforts for      implementation, but has three disadvantages – that’s just a file, which      means, that it’s not real-time, it can use significant network traffic and      it’s not checked by default by the most of the browsers (I would even say      by all browsers), even if certificate has a link to CRL.&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l2 level1 lfo5; tab-stops: list 36.0pt;"&gt;Online      Certificate Status Protocol (OCSP). That is preferable solution, which      utilizes dedicated server, which implements protocol which will return      back revocation status of certificate by its id. If browser (at least      FireFox &amp;gt; v.3.0) will find link to that server in certificate, it will      make a call to verify that certificate is not revoked. Only disadvantage is      that OCSP server has to be very reliable and be able to answer on requests      all the time.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal"&gt;In internet certificate usually contains links to CRL or OCSP inside it. When certificates are used in corporate network these links are usually known by all parties and there is no need to have them in certificate. &lt;/div&gt;&lt;div class="MsoNormal"&gt;So, finally, what is Public Key Infrastructure? That’s infrastructure, which supports everything which was described above and generally consists of following elements:&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l3 level1 lfo3; tab-stops: list 36.0pt;"&gt;Subscribers.      Users of certificates. Clients and ones who owns certificates.&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l3 level1 lfo3; tab-stops: list 36.0pt;"&gt;Certificates.&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l3 level1 lfo3; tab-stops: list 36.0pt;"&gt;Certificate      Authority and Registration Authority.&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l3 level1 lfo3; tab-stops: list 36.0pt;"&gt;Certificate      Revocation Infrastructure. Server with Certificate Revocation list or OCSP      Server.&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l3 level1 lfo3; tab-stops: list 36.0pt;"&gt;Certificate      Policy and Practices documents. Describe format of certificate, format of      certificate request, when certificated have to be revoked, etc. Basically      all procedures related to infrastructure.&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l3 level1 lfo3; tab-stops: list 36.0pt;"&gt;Hardware      Security Modules, which are usually used to protect &lt;st1:place&gt;&lt;st1:city&gt;Root&lt;/st1:city&gt;       &lt;st1:state&gt;CA&lt;/st1:state&gt;&lt;/st1:place&gt;’s private key.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal"&gt;And that entire infrastructure support following functions, which we’ve just discussed:&lt;/div&gt;&lt;ul style="margin-top: 0cm;" type="disc"&gt;&lt;li class="MsoNormal" style="mso-list: l1 level1 lfo4; tab-stops: list 36.0pt;"&gt;Public      Key Cryptography.&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l1 level1 lfo4; tab-stops: list 36.0pt;"&gt;Certificate      issuance.&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l1 level1 lfo4; tab-stops: list 36.0pt;"&gt;Certificate      validation.&lt;/li&gt;
&lt;li class="MsoNormal" style="mso-list: l1 level1 lfo4; tab-stops: list 36.0pt;"&gt;Certificate      revocation.&lt;/li&gt;
&lt;/ul&gt;&lt;div class="MsoNormal"&gt;And that’s it. Appeared to be not such a big topic ;)&lt;o:p&gt;&lt;/o:p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-1238055595055140517?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AeW9vdgtJUZZPDRdmOWBy-Oek4M/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AeW9vdgtJUZZPDRdmOWBy-Oek4M/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AeW9vdgtJUZZPDRdmOWBy-Oek4M/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AeW9vdgtJUZZPDRdmOWBy-Oek4M/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=LmQKP2LKHSQ:iFq-Tg71sFs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=LmQKP2LKHSQ:iFq-Tg71sFs:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=LmQKP2LKHSQ:iFq-Tg71sFs:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=LmQKP2LKHSQ:iFq-Tg71sFs:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/LmQKP2LKHSQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/1238055595055140517/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=1238055595055140517" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/1238055595055140517?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/1238055595055140517?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/LmQKP2LKHSQ/public-key-infrastructure.html" title="Public key infrastructure" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2010/03/public-key-infrastructure.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8DQn88fSp7ImA9WxBaE0U.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-1407033823472629702</id><published>2010-03-23T22:27:00.004Z</published><updated>2010-03-23T22:54:33.175Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-23T22:54:33.175Z</app:edited><title>Mac in 1984</title><content type="html">Was looking for some presentations on Web and found one made by Steve Jobs in 1984. The reaction of people there is just amazing, I have never seen anything similar on IT event. I wish I would visit one which will be the same impressive :)&lt;br /&gt;&lt;br /&gt;&lt;embed id="VideoPlayback" src="http://video.google.com/googleplayer.swf?docid=8631701936876784775&amp;amp;hl=en&amp;amp;fs=true" style="width:400px;height:326px" allowfullscreen="true" allowscriptaccess="always" type="application/x-shockwave-flash"&gt;&lt;/embed&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-1407033823472629702?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/U7ko9LBpmzHxFzzdEZTzdcTg3I4/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U7ko9LBpmzHxFzzdEZTzdcTg3I4/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/U7ko9LBpmzHxFzzdEZTzdcTg3I4/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/U7ko9LBpmzHxFzzdEZTzdcTg3I4/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=x81qSduVWwo:vsQxj_QyMJE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=x81qSduVWwo:vsQxj_QyMJE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=x81qSduVWwo:vsQxj_QyMJE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=x81qSduVWwo:vsQxj_QyMJE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/x81qSduVWwo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/1407033823472629702/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=1407033823472629702" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/1407033823472629702?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/1407033823472629702?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/x81qSduVWwo/mac-in-1984.html" title="Mac in 1984" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2010/03/mac-in-1984.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQMRHg7fyp7ImA9WxBUF08.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-1559992751452033635</id><published>2010-03-04T16:42:00.010Z</published><updated>2010-03-04T17:23:05.607Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-04T17:23:05.607Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="shell" /><title>Redirecting or error output to variable in shell</title><content type="html">Spent couple of painful hours trying to do that. And eventually, here is the code which will output standard output into the file and error into the variable:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;var=`(ls -l &gt; ./file.txt) 2&gt;&amp;amp;1`&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;bloody shell...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-1559992751452033635?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/ZI1UHGRuX5Gi1Mvc7BxBibLczIk/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZI1UHGRuX5Gi1Mvc7BxBibLczIk/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/ZI1UHGRuX5Gi1Mvc7BxBibLczIk/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/ZI1UHGRuX5Gi1Mvc7BxBibLczIk/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=vTze15XhiIs:d3GejksIkRA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=vTze15XhiIs:d3GejksIkRA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=vTze15XhiIs:d3GejksIkRA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=vTze15XhiIs:d3GejksIkRA:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/vTze15XhiIs" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/1559992751452033635/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=1559992751452033635" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/1559992751452033635?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/1559992751452033635?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/vTze15XhiIs/redirecting-or-error-output-to-variable.html" title="Redirecting or error output to variable in shell" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2010/03/redirecting-or-error-output-to-variable.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEECR3w_fip7ImA9WhRRE00.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-7413213097773456180</id><published>2010-03-01T09:53:00.230Z</published><updated>2011-11-26T11:24:26.246Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-11-26T11:24:26.246Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><title>Java bridge methods explained</title><content type="html">&lt;div dir="ltr" style="text-align: left;" trbidi="on"&gt;
Bridge methods in Java are synthetic methods, which are necessary to implement some of Java language features. The best known samples are covariant return type and a case in generics when erasure of base method's arguments differs from the actual method being invoked.&lt;br /&gt;
&lt;a name='more'&gt;&lt;/a&gt;&lt;br /&gt;
Have a look at following example:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;
public class SampleOne {
    public static class A&amp;lt;T&amp;gt; {
        public T getT() {
            return null;
        }
    }

    public static class  B extends A&amp;lt;String&amp;gt; {
        public String getT() {
            return null;
        }
    }
}
&lt;/pre&gt;
&lt;br /&gt;
Which in reality is just an example of covariant return type and after &lt;a href="http://en.wikipedia.org/wiki/Type_erasure"&gt;erasure&lt;/a&gt; will look like following snippet:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;
public class SampleOne {
    public static class A {
        public Object getT() {
            return null;
        }
    }

    public static class  B extends A {
        public String getT() {
            return null;
        }
    }
}
&lt;/pre&gt;
&lt;br /&gt;
And after the compilation decompiled result class "B" will be following:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;public class SampleOne$B extends SampleOne$A {
public SampleOne$B();
...
public java.lang.String getT();
Code:
0:   aconst_null
1:   areturn
public java.lang.Object getT();
Code:
0:   aload_0
1:   invokevirtual   #2; // Call to Method getT:()Ljava/lang/String;
4:   areturn
}
&lt;/pre&gt;
&lt;br /&gt;
Above you can see there is new &lt;a href="http://java.sun.com/docs/books/jvms/second_edition/html/ClassFile.doc.html#80128"&gt;synthetic&lt;/a&gt; method "java.lang.Object getT()" which is not present in source code. That method acts as bridge method and all is does is delegating invocation to "java.lang.String getT()". Compiler has to do that, because in JVM method return type is part of method's signature, and creation of bridge method here is just the way to implement covariant return type.&lt;br /&gt;
&lt;br /&gt;
Now have a look at following example which is generics-specific:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;
public class SampleTwo {
    public static class A&amp;lt;T&amp;gt; {
        public T getT(T args) {
            return args;
        }
    }

    public static class B extends A&amp;lt;String&amp;gt; {
        public String getT(String args) {
            return args;
        }
    }
}
&lt;/pre&gt;
&lt;br /&gt;
after compilation class "B" will be transformed into following:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;public class SampleThree$B extends SampleThree$A{
public SampleThree$B();
...
public java.lang.String getT(java.lang.String);
Code:
0:   aload_1
1:   areturn

public java.lang.Object getT(java.lang.Object);
Code:
0:   aload_0
1:   aload_1
2:   checkcast       #2; //class java/lang/String
5:   invokevirtual   #3; //Method getT:(Ljava/lang/String;)Ljava/lang/String;
8:   areturn
}
&lt;/pre&gt;
&lt;br /&gt;
here, the bridge method, which overrides method from base class "A", not just calling one with string argument (#3), but also performs type cast to "java.lang.String" (#2). It means, that if you will execute following code, ignoring compiler's "unchecked" warning, the result will be ClassCastException thrown from the bridge method:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;A a = new B();
a.getT(new Object()));
&lt;/pre&gt;
&lt;br /&gt;
These two examples are the best known cases where bridge methods are used, but there is, at least, one more, where bridge method is used to "change" visibility of base class's methods. Have a look at following sample and try to guess where compiler may need the bridge method to be created:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;package samplefour;

public class SampleFour {
    static class A {
        public void foo() {
        }
    }
    public static class C extends A {

    }
    public static class D extends A {
        public void foo() {
        }
    }
}
&lt;/pre&gt;
&lt;br /&gt;
If you will decompile class C, you will see method "foo" there, which overrides method from base class and delegates to it:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;public class SampleFour$C extends SampleFour$A{
...
public void foo();
Code:
0:   aload_0
1:   invokespecial   #2; //Method SampleFour$A.foo:()V
4:   return

}
&lt;/pre&gt;
&lt;br /&gt;
compiler needs that method, because class A is not public and can't be accessed outside it's package, but class C is public and all inherited method have to become visible outside the package as well. Note, that class D will not have bridge method, because it overrides "foo" and there is no need to "increase" visibility.&lt;br /&gt;
It looks like, that type of bridge method, was introduced after &lt;a href="http://bugs.sun.com/view_bug.do?bug_id=6342411"&gt;bug&lt;/a&gt; which was fixed in Java 6. It means that before Java 6 that type of bridge method is not generated and method "C#foo" can't be called from package other than it's own via reflection, so following snippet causes IllegalAccessException, in cases when compiled on Java version &amp;lt; 1.6:&lt;br /&gt;
&lt;pre class="prettyprint"&gt;package samplefive;
...
SampleFour.C.class.getMethod("foo").invoke(new SampleFour.C());
...
&lt;/pre&gt;
&lt;br /&gt;
Normal invocation, without using reflection, will work fine.&lt;br /&gt;
&lt;br /&gt;
Probably there are some other cases where bridge methods are used, but there is no source of information about it. Also, there is no definition of bridge method, although you can guess it easily, it's pretty obvious from examples above, but still would be nice to have something in spec which states it clearly. In spite of the fact that method &lt;a href="http://java.sun.com/j2se/1.5.0/docs/api/java/lang/reflect/Method.html#isBridge%28%29"&gt;Method#isBridge()&lt;/a&gt; is part of public reflection API since Java1.5 and bridge flag is part of &lt;a href="http://java.sun.com/docs/books/jvms/second_edition/ClassFileFormat-Java5.pdf"&gt;class file format&lt;/a&gt;, JVM and JLS specifications do not have any information what exactly is that and do not provide any rules when and how it should be used by compiler. All I could find is just reference in "Discussion" area &lt;a href="http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.12.4.5"&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-7413213097773456180?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/AmXZd6H63PjyIOPXZ8aA7nYP6EE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AmXZd6H63PjyIOPXZ8aA7nYP6EE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/AmXZd6H63PjyIOPXZ8aA7nYP6EE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/AmXZd6H63PjyIOPXZ8aA7nYP6EE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=JfFpzwCg8hk:FOC8xsDB498:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=JfFpzwCg8hk:FOC8xsDB498:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=JfFpzwCg8hk:FOC8xsDB498:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=JfFpzwCg8hk:FOC8xsDB498:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/JfFpzwCg8hk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/7413213097773456180/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=7413213097773456180" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/7413213097773456180?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/7413213097773456180?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/JfFpzwCg8hk/java-bridge-methods-explained.html" title="Java bridge methods explained" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2010/03/java-bridge-methods-explained.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQNSH84eip7ImA9WxBUF08.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-6994279717724088584</id><published>2010-02-23T09:48:00.007Z</published><updated>2010-03-04T17:23:19.132Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-03-04T17:23:19.132Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><category scheme="http://www.blogger.com/atom/ns#" term="shell" /><title>Kill all child processes from shell script</title><content type="html">Small and simple script. Creates Ctrl-C trap and kills all it's child processes in it. Nice to have when your script has many child processes which execution have to be stopped when main script is interrupted by Ctrl-C or other signal.&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;kill_child_processes() {&lt;br /&gt;    isTopmost=$1&lt;br /&gt;    curPid=$2&lt;br /&gt;    childPids=`ps -o pid --no-headers --ppid ${curPid}`&lt;br /&gt;    for childPid in $childPids&lt;br /&gt;    do&lt;br /&gt;        kill_child_processes 0 $childPid&lt;br /&gt;    done&lt;br /&gt;    if [ $isTopmost -eq 0 ]; then&lt;br /&gt;        kill -9 $curPid 2&gt; /dev/null&lt;br /&gt;    fi&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;# Ctrl-C trap. Catches INT signal&lt;br /&gt;trap "kill_child_processes 1 $$; exit 0" INT&lt;br /&gt;&lt;br /&gt;for ((  i = 0 ;  i &lt;= 5;  i++  ))&lt;br /&gt;do&lt;br /&gt;  # do something...&lt;br /&gt;  sleep 10 &amp;&lt;br /&gt;done&lt;br /&gt;&lt;br /&gt;wait&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-6994279717724088584?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/QTNyE6x3SMCkVqsj7wNWlo7k7_Y/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QTNyE6x3SMCkVqsj7wNWlo7k7_Y/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/QTNyE6x3SMCkVqsj7wNWlo7k7_Y/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/QTNyE6x3SMCkVqsj7wNWlo7k7_Y/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=46us9j1BzsI:nwmmXa9KWsw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=46us9j1BzsI:nwmmXa9KWsw:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=46us9j1BzsI:nwmmXa9KWsw:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=46us9j1BzsI:nwmmXa9KWsw:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/46us9j1BzsI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/6994279717724088584/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=6994279717724088584" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/6994279717724088584?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/6994279717724088584?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/46us9j1BzsI/kill-all-child-processes-from-shell.html" title="Kill all child processes from shell script" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2010/02/kill-all-child-processes-from-shell.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EMRHo7fSp7ImA9WxBWGEo.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-5898081390702292392</id><published>2010-02-08T13:40:00.015Z</published><updated>2010-02-11T09:14:45.405Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-02-11T09:14:45.405Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="keytool" /><title>Exporting keys from keystore</title><content type="html">Recently I had a similar feeling to one I had writing one of previous &lt;a href="http://stas-blogspot.blogspot.com/2010/01/compile-recursively-with-javac.html"&gt;posts&lt;/a&gt;. It appeared that standard java tools do not have some basic functionality, which obviously (well, probably just for me :) ) should be there. Now I had to export key stored in keystore to share it with other department. It appeared, that &lt;a href="http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/keytool.html"&gt;keytool&lt;/a&gt; can't do that and you have to write tiny program by yourself. Not a big problem, really, it's even nice.&lt;br /&gt;&lt;br /&gt;There are lots of posts in web describing how to solve that problem, and &lt;a href="http://forums.sun.com/thread.jspa?threadID=5418825"&gt;here&lt;/a&gt; is the best code example I found so far to solve that it.&lt;br /&gt;And here is copy/paste of code snipped, just in case if original post will pass away.&lt;br /&gt;&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;File keystoreFile = new File("The filename of the keystore");&lt;br /&gt;KeyStore ks = KeyStore.getInstance("JKS"); // or whatever type of keystore you have&lt;br /&gt;char[] pw = "the keystore password".toCharArray();&lt;br /&gt;InputStream in = new FileInputStream(keystoreFile);&lt;br /&gt;ks.load(in, pw);&lt;br /&gt;in.close();&lt;br /&gt;for (Enumeration&lt;String&gt; en = ks.aliases(); en.hasMoreElements();)&lt;br /&gt;{&lt;br /&gt;    String alias = en.nextElement();&lt;br /&gt;    System.out.println("  Alias\t:" + alias);&lt;br /&gt;    // If the key entry password is not the same a the keystore password then change this&lt;br /&gt;    KeyStore.Entry entry = ks.getEntry(alias, new KeyStore.PasswordProtection(pw)); &lt;br /&gt;    if (entry instanceof KeyStore.SecretKeyEntry) {&lt;br /&gt;        System.out.println("    SecretKey");&lt;br /&gt;        KeyStore.SecretKeyEntry skEntry = (KeyStore.SecretKeyEntry) entry;&lt;br /&gt;        SecretKey key = skEntry.getSecretKey();&lt;br /&gt;        System.out.println("      alg\t: " + key.getAlgorithm());&lt;br /&gt;    } else if (entry instanceof KeyStore.PrivateKeyEntry) {&lt;br /&gt;        System.out.println("    PrivateKey");&lt;br /&gt;        KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry) entry;&lt;br /&gt;        PrivateKey key = pkEntry.getPrivateKey();&lt;br /&gt;        System.out.println("      alg\t: " + key.getAlgorithm());&lt;br /&gt;        java.security.cert.Certificate certificate = pkEntry.getCertificate();&lt;br /&gt;        System.out.println("      Certificate type\t: " + certificate.getType());&lt;br /&gt;        System.out.println("      Public key\t: " + certificate.getPublicKey().getAlgorithm());&lt;br /&gt;    } else if (entry instanceof KeyStore.TrustedCertificateEntry) {&lt;br /&gt;        System.out.println("    Certificate");&lt;br /&gt;        KeyStore.TrustedCertificateEntry certEntry = (KeyStore.TrustedCertificateEntry) entry;&lt;br /&gt;        java.security.cert.Certificate certificate = certEntry.getTrustedCertificate();&lt;br /&gt;        System.out.println("      type\t: " + certificate.getType());&lt;br /&gt;    }&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;If you need to send key to someone, it handy to make it base64 encoded:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;byte[] keyData = key.getEncoded();&lt;br /&gt;BASE64Encoder b64Encoder = new BASE64Encoder();&lt;br /&gt;String b64 = b64Encoder.encode(keyData);&lt;br /&gt;System.out.println("-----BEGIN KEY-----");&lt;br /&gt;System.out.println(b64);&lt;br /&gt;System.out.println("-----END KEY-----");&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-5898081390702292392?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/Zfs1qRf0SNV7v6pQrLYhPfnCIJE/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Zfs1qRf0SNV7v6pQrLYhPfnCIJE/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/Zfs1qRf0SNV7v6pQrLYhPfnCIJE/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/Zfs1qRf0SNV7v6pQrLYhPfnCIJE/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=zZL9b8039XI:4rW22xbORX0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=zZL9b8039XI:4rW22xbORX0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=zZL9b8039XI:4rW22xbORX0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=zZL9b8039XI:4rW22xbORX0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/zZL9b8039XI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/5898081390702292392/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=5898081390702292392" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/5898081390702292392?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/5898081390702292392?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/zZL9b8039XI/exporting-of-keys-from-keystore.html" title="Exporting keys from keystore" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2010/02/exporting-of-keys-from-keystore.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0cMRXs7fCp7ImA9WhRQFUk.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-8352239726158882349</id><published>2010-01-21T11:20:00.011Z</published><updated>2011-12-10T18:18:04.504Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-12-10T18:18:04.504Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="javac" /><title>Compile recursively with javac</title><content type="html">To my shame I have never used javac directly for compiling source files, always it was something like "ant". And today it was the first time on my memory when I had to do that :) It was a simple application, just an example for presentation and I didn't want to add anything additional there.&lt;br /&gt;
Thing which looks like a trivial task appeared to be not so trivial, because javac doesn't recursively compile files in directories, you have to specify each directory separately or create file with list of files for compilation, something like that:&lt;br /&gt;
&lt;br /&gt;
find ./src -name "*.java" &amp;gt; sources_list.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;txt&lt;/span&gt;&lt;br /&gt;
&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_1"&gt;javac&lt;/span&gt; -&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_2"&gt;classpath&lt;/span&gt; "${&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_3"&gt;CLASSPATH&lt;/span&gt;}" @sources_list.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;txt&lt;/span&gt;&lt;br /&gt;
&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;br /&gt;
&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_4"&gt;On Windows first line should be replaced with: dir .\src\*.java /s /B &amp;gt;&amp;nbsp;&lt;/span&gt;sources_list.&lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;txt&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-8352239726158882349?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/T89z8Ikh87hwrWKMNjuUSljvGsA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T89z8Ikh87hwrWKMNjuUSljvGsA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/T89z8Ikh87hwrWKMNjuUSljvGsA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/T89z8Ikh87hwrWKMNjuUSljvGsA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=BZbUHd-o2dA:CpjZhzJ2pU0:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=BZbUHd-o2dA:CpjZhzJ2pU0:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=BZbUHd-o2dA:CpjZhzJ2pU0:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=BZbUHd-o2dA:CpjZhzJ2pU0:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/BZbUHd-o2dA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/8352239726158882349/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=8352239726158882349" title="10 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/8352239726158882349?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/8352239726158882349?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/BZbUHd-o2dA/compile-recursively-with-javac.html" title="Compile recursively with javac" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>10</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2010/01/compile-recursively-with-javac.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0EGRHo5eyp7ImA9Wx9SGEk.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-1846692193628585526</id><published>2009-12-20T12:02:00.048Z</published><updated>2010-12-08T23:07:05.423Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-08T23:07:05.423Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="trading" /><category scheme="http://www.blogger.com/atom/ns#" term="opensource" /><title>List of Open source trading software</title><content type="html">For everybody who is interested in topic. List of links below should help to make initial evaluation of available open-source java trading software &amp;amp; related products and also provides some other interesting links. Note, that projects below are not ordered in any particular order.&lt;br /&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;font-size:130%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;font-size:180%;"&gt;Groups, forums&lt;/span&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;, communities&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Google Group, &lt;/span&gt;JavaTraders&lt;br /&gt;&lt;a href="http://groups.google.com/group/JavaTraders" target="_blank"&gt;http://groups.google.com/group/JavaTraders&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Elite trader&lt;/span&gt;, the #1 community for active traders of Stocks, Futures, Options, and Currencies.&lt;br /&gt;&lt;a href="http://www.elitetrader.com/"&gt;http://www.elitetrader.com/&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vb" style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Trading software&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span class="vb"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;"&gt;Marketcetera&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;Open source platform for strategy-driven trading, providing you with all the tools you need for strategy automation, integrated market data, multi-destination FIX routing, broker neutrality and more.&lt;br /&gt;Looks like is the leader in that list - it's well supported, has lots of capabilities and is active project.&lt;br /&gt;&lt;span class="vb"&gt;Latest version available at 23.12.2009: 1.5.0 (released 05.2009)&lt;/span&gt;&lt;br /&gt;&lt;span class="vb"&gt;&lt;a href="http://trac.marketcetera.org/"&gt;http://trac.marketcetera.org/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.marketcetera.com/"&gt;http://www.marketcetera.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;"&gt;EclipseTrade&lt;/span&gt;&lt;br /&gt;EclipseTrader is an application focused to the building of an online stock trading system, featuring shares pricing watch, intraday and history charts with technical analysis indicators, level II/market depth view, news watching, and integrated trading. The standard Eclipse RCP plug-ins architecture allows third-party vendors to extend the functionality of the program to include custom indicators, views or access to subscription-based data feeds and order entry.&lt;br /&gt;Latest version available at 23.12.2009: 0.30.0 (released 07.2009)&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/eclipsetrader/" target="_blank"&gt;http://sourceforge.net/projects/eclipsetrader/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://eclipsetrader.sourceforge.net/" target="_blank"&gt;http://eclipsetrader.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;JSystemTrader&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;JSystemTrader is a fully automated trading system (ATS) that can trade various types of market securities during the trading day without user monitoring. All aspects of trading, such as obtaining prices, analyzing price patterns, making trading decisions, placing orders, monitoring order executions, and controlling the risk are automated according to the user preferences. The central idea behind JSystemTrader is to completely remove the emotions from trading, so that the trading system can systematically and consistently follow a predefined set of rules.&lt;br /&gt;Latest version available at 23.12.2009:&lt;/span&gt; 6.24 (released 09.2008)&lt;br /&gt;&lt;span class="vb"&gt;&lt;a href="http://groups.google.com/group/jsystemtrader"&gt;&lt;span style="text-decoration: underline;"&gt;http://groups.google.com/group/jsystemtrader&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;"&gt;ActiveQuant&lt;br /&gt;&lt;/span&gt;AQ is a framework or an API for automated trading, opportunity detection, financial engineering, research in finance, connecting to brokers, etc. - basically everything around trading, written in Java, using Spring. All is published under a usage friendly open source license.&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;Latest version available at 23.12.2009:&lt;/span&gt; ??? Failed to find any possibility to download it or get latest version number, all links to that information are broken.&lt;br /&gt;&lt;span class="vb"&gt;&lt;a href="http://www.activestocks.eu/?q=node/1"&gt;http://www.activestocks.eu/?q=node/1&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.activestocks.eu/"&gt;http://www.activestocks.eu/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;"&gt;AIOTrade&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;AIOTrade (former Humai Trader) is a free, open source (under the terms of BSD license) stock technical analysis platform with a pluggable architecture that is ideal for extensions such as indicators and charts. It's built on pure java.&lt;br /&gt;Latest version available at 23.12.2009:&lt;/span&gt; 1.0.3a (released 02.2007)&lt;br /&gt;&lt;span class="vb"&gt;&lt;a href="http://sourceforge.net/projects/humaitrader" target="_blank"&gt;http://sourceforge.net/projects/humaitrader&lt;/a&gt;&lt;br /&gt;&lt;a href="http://blogtrader.org/" target="_blank"&gt;http://blogtrader.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;"&gt;JStock&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;strong style="font-weight: normal;"&gt;JStock makes it easy&lt;/strong&gt; to track your stock investment. It provides well organized stock market information, to help you decide your best investment strategy.&lt;br /&gt;&lt;span class="vb"&gt;No automated trading support.&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;Latest version available at 29.12.2009: &lt;/span&gt;1.0.5g&lt;span class="vb"&gt; (released 12.2009)&lt;/span&gt;&lt;br /&gt;&lt;a target="_blank" rel="nofollow" href="http://www.google.com/url?sa=D&amp;amp;q=http://jstock.sourceforge.net&amp;amp;usg=AFQjCNG1zCTRq59FH-7zT4PvjBhlBzoSjw"&gt;http://jstock.sourceforge.net&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" rel="nofollow" href="http://www.google.com/url?sa=D&amp;amp;q=https://sourceforge.net/projects/jstock/&amp;amp;usg=AFQjCNEu3g02KP80IXx3DatKG9aIGyeIqQ"&gt;https://sourceforge.net/projects/jstock/&lt;/a&gt;&lt;br /&gt;&lt;span class="vb"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;"&gt;Merchant of Venice&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vb"&gt;Venice is a stock market trading programme that supports portfolio management, charting, technical analysis, paper trading and experimental methods like genetic programming. Venice runs in a graphical user interface with online help and has full documentation.&lt;br /&gt;Latest version available at 23.12.2009:&lt;/span&gt; 0.7b (released 04.2006)&lt;br /&gt;&lt;span class="vb"&gt;&lt;a href="http://sourceforge.net/projects/mov" target="_blank"&gt;http://sourceforge.net/projects/mov&lt;/a&gt;&lt;br /&gt;&lt;a href="http://mov.sourceforge.net/" target="_blank"&gt;http://mov.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;"&gt;Market Analysis System&lt;br /&gt;&lt;/span&gt;&lt;span&gt;The Market Analysis System (MAS) is an open-source software application that provides tools for analysis of financial markets using technical analysis. MAS provides facilities for stock charting and futures charting, including price, volume, and a wide range of technical analysis indicators. MAS also allows automated processing of market data — applying technical analysis indicators with user-selected criteria to market data to automatically generate trading signals — and can be used as the main component of a sophisticated trading system.&lt;/span&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;br /&gt;Latest version available at 23.12.2009:&lt;/span&gt; 1.6.6 (released 07.2004)&lt;br /&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;a href="http://sourceforge.net/projects/eiffel-mas" target="_blank"&gt;http://sourceforge.net/projects/eiffel-mas&lt;/a&gt;&lt;br /&gt;&lt;a href="http://eiffel-mas.sourceforge.net/" target="_blank"&gt;http://eiffel-mas.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;"&gt;Open Java Trading System&lt;br /&gt;&lt;/span&gt;&lt;span&gt;The Open Java Trading System (OJTS) is meant to be a common infrastructure to develop stock trading systems. The project's aim is to provide a self contained pure Java (platform independent) common infrastructure for developers of trading systems.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vb"&gt;Latest version available at 23.12.2009:&lt;/span&gt; 0.13 (released 06.2005)&lt;br /&gt;&lt;span class="vb"&gt;&lt;a href="http://sourceforge.net/projects/ojts/" target="_blank"&gt;http://sourceforge.net/projects/ojts/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://ojts.sourceforge.net/" target="_blank"&gt;http://ojts.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;"&gt;Oropuro&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt; trading system&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;The software perform the technical analysis of stock or commodity for various markets, manage portfolio definitions and orders. It has the base characteristics of most populars technical analysis software.&lt;br /&gt;The most of information about that project is in Italian language, so it's really hard to dive in it :(&lt;br /&gt;&lt;span class="vb"&gt;Latest version available at 23.12.2009: 0.2.4 (released 11.2007)&lt;/span&gt;&lt;br /&gt;&lt;span class="vb"&gt;&lt;a href="http://sourceforge.net/projects/oropuro"&gt;http://sourceforge.net/projects/oropuro&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.oropuro.org/"&gt;http://www.oropuro.org&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;TrueTrade&lt;/span&gt;&lt;br /&gt;TrueTrade is a framework for developing, testing and running automatic trading systems. It is intended to provide support for a wide range of orders, financial instruments and time scales. It provides tooling for backtesting the strategy against historical data, and a separate tool for running the strategies in live mode.&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;Latest version available at 23.12.2009: 0.5 (released 05.2007)&lt;/span&gt;&lt;br /&gt;&lt;span class="vb"&gt;&lt;a href="http://code.google.com/p/truetrade/"&gt;http://code.google.com/p/truetrade/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://groups.google.com/group/TrueTrade-Gen"&gt;http://groups.google.com/group/TrueTrade-Gen&lt;/a&gt;&lt;br /&gt;&lt;a href="http://groups.google.com/group/TrueTrade-Dev"&gt;http://groups.google.com/group/TrueTrade-Dev&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;(j)robotrader&lt;/span&gt;&lt;br /&gt;Robotrader is a simulation platform for automated stock exchange trading. It delivers statistics to analyse performance on historic data and allows comparison between trading strategies.&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;Latest version available at 23.12.2009: 0.2.7 (released 02.2006)&lt;/span&gt;&lt;br /&gt;&lt;a href="http://jrobotrader.atspace.com/"&gt;http://jrobotrader.atspace.com&lt;/a&gt;&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/robotrader/"&gt;http://sourceforge.net/projects/robotrader/&lt;/a&gt;&lt;br /&gt;&lt;span class="vb"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;"&gt;SFL&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; Java Trading System &lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Enviroment&lt;/span&gt;&lt;br /&gt;At current moment project is inactive. Author suggests to use ActiveQuant instead.&lt;/span&gt;&lt;span class="vb"&gt;&lt;br /&gt;&lt;a href="http://sourceforge.net/projects/sfljtse" target="_blank"&gt;http://sourceforge.net/projects/sfljtse&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sflweb.org/index.php?blog=sfljtse" target="_blank"&gt;http://www.sflweb.org/index.php?blog=sfljtse&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:180%;"&gt;&lt;span style="font-weight: bold;"&gt;Related software&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;TA-Lib: Technical Analysis Library&lt;/span&gt;&lt;br /&gt;TA-Lib is widely used by trading software developers requiring to perform technical analysis of financial market data.&lt;br /&gt;* Includes 200 indicators such as ADX, MACD, RSI, Stochastic, Bollinger Bands etc...&lt;br /&gt;* Candlestick pattern recognition&lt;br /&gt;* Open-source API for C/C++, Java, Perl, Python and 100% Managed .NET&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;Latest version available at 23.12.2009:&lt;/span&gt; 0.4 (released 09.2007)&lt;br /&gt;&lt;span class="vb"&gt;&lt;a href="http://ta-lib.org/index.html"&gt;http://ta-lib.org/index.html&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;"&gt;Tail - A java technical analysis lib&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;Technical Analysis studies forecasting future price trends with the objective of managea best moment to buy and sell shares. The Tail's target is to develop a Java Open-Source library that abstracts the basic components of Technical Analysis, supplying tools for creation, manipulation and evaluation of strategies to buy and sell.&lt;br /&gt;Latest version available at 15.01.2010:&lt;/span&gt; 1.0 (released 12.2007)&lt;br /&gt;&lt;a href="http://tail.sourceforge.net/"&gt;&lt;span class="vb"&gt;&lt;span style="text-decoration: underline;"&gt;http://tail.sourceforge.net/&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;span class="vb"&gt;&lt;a href="http://tail.sourceforge.net/"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;"&gt;JessX&lt;/span&gt;&lt;br /&gt;JessX Project's main goal is to create a program allowing for the simulation of a financial market with realistic features (such as an order book and realistic orders). Researchers and teachers in Finance may find it helpful in their works.&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;Latest version available at 23.12.2009:&lt;/span&gt; 1.5 (released 05.2008)&lt;br /&gt;&lt;a href="http://jessx.ec-lille.fr/"&gt;http://jessx.ec-lille.fr/&lt;/a&gt;&lt;br /&gt;&lt;span class="vb"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;QuickFIX/J&lt;/span&gt;&lt;br /&gt;100% Java Open Source FIX (Financial Information eXchange protocol) Engine&lt;br /&gt;&lt;span class="vb"&gt;Latest version available at 23.12.2009:&lt;/span&gt; 1.4 (released 02.2009)&lt;br /&gt;&lt;span class="vb"&gt;&lt;a href="http://www.quickfixj.org/"&gt;http://www.quickfixj.org/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;"&gt;Auge&lt;/span&gt;&lt;br /&gt;Auge is an easy-to-use and very simple financial portfolio management application. Auge will help you monitor and analyze your stock and mutual fund positions, providing powerful insight into your entire investment portfolio.&lt;/span&gt;&lt;span class="vb"&gt;&lt;br /&gt;Latest version available at 23.12.2009:&lt;/span&gt; 0.2 (released 04.2007)&lt;br /&gt;&lt;span class="vb"&gt;&lt;a href="http://sourceforge.net/projects/auge"&gt;http://sourceforge.net/projects/auge&lt;/a&gt;&lt;br /&gt;&lt;a href="http://auge.sourceforge.net/"&gt;http://auge.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;"&gt;Matrex&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vb"&gt;Advanced spreadsheet.&lt;br /&gt;Latest version available at 23.12.2009:&lt;/span&gt; 1.3.8 (released 10.2009)&lt;br /&gt;&lt;span class="vb"&gt;&lt;a href="http://sourceforge.net/projects/matrex/" target="_blank"&gt;http://sourceforge.net/projects/matrex/&lt;/a&gt;&lt;br /&gt;&lt;a href="http://matrex.sourceforge.net/" target="_blank"&gt;http://matrex.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;Data Visualizer&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Data Visualizer displays text file stock market type data ("Date,Open,High,Low,Close,Volume,Adjusted Close Price") as Stock Charts, featuring a variation of Japanese "Candlesticks" chart elements.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vb"&gt;Latest version available at 23.12.2009:&lt;/span&gt; 0.0.1 (released 03.2006)&lt;br /&gt;&lt;span class="vb"&gt;&lt;a href="http://sourceforge.net/projects/dataviews" target="_blank"&gt;http://sourceforge.net/projects/dataviews&lt;/a&gt;&lt;br /&gt;&lt;a href="http://dataviews.sourceforge.net/" target="_blank"&gt;http://dataviews.sourceforge.net/&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;span class="vb"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;span class="vb"&gt;&lt;span class="vb"&gt;&lt;span style="font-weight: bold; "&gt;Forex Optimizer&lt;br /&gt;&lt;/span&gt;&lt;span&gt;Absolutely new revolutionary trade platform, is intended both for beginners, and for the tempered traders of Forex. Beginners can study market Forex, using a simulator, not risking the capitals and not being connected to the Internet. For more skilled traders Forex Optimizer allows to create and optimize trade strategy, not having knowledge in programming to operate (to make trading operations) the real account of the broker. The platform can offer professionals greater functionality for application of the strategy and methods of trade in market Forex.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="vb"&gt;Latest version available at 08.12.2010:&lt;/span&gt; 2.7 (released ??)&lt;br /&gt;&lt;a href="http://www.gordago.com/opensource/forex-optimizer/"&gt;http://www.gordago.com/opensource/forex-optimizer/&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="vb"&gt;&lt;span class="vb"&gt;&lt;a href="http://gordago.googlecode.com/svn/tags/2.7/"&gt;http://gordago.googlecode.com/svn/tags/2.7/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-1846692193628585526?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/SjEi-5G9e684HYISVIqYg6SoX6E/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SjEi-5G9e684HYISVIqYg6SoX6E/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/SjEi-5G9e684HYISVIqYg6SoX6E/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/SjEi-5G9e684HYISVIqYg6SoX6E/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=_yo-4XW5O0o:Kbe02OrF7iQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=_yo-4XW5O0o:Kbe02OrF7iQ:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=_yo-4XW5O0o:Kbe02OrF7iQ:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=_yo-4XW5O0o:Kbe02OrF7iQ:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/_yo-4XW5O0o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/1846692193628585526/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=1846692193628585526" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/1846692193628585526?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/1846692193628585526?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/_yo-4XW5O0o/open-source-traiding-software.html" title="List of Open source trading software" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2009/12/open-source-traiding-software.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUECRX07eSp7ImA9Wx5UF00.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-2510159187497776573</id><published>2009-10-21T15:11:00.077+01:00</published><updated>2010-10-22T00:27:44.301+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-10-22T00:27:44.301+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="hibernate" /><category scheme="http://www.blogger.com/atom/ns#" term="spring" /><title>Hibernate + Spring in Standalone application</title><content type="html">Just a quick reminder howto use Hibernate + Spring in standalone application.&lt;br /&gt;First comes hibernate session factory. I prefer to use separate file for hibernate, Instead of configuring it Spring's applicationContext.xml:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&amp;lt;bean name="hibernateSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"&gt;&lt;br /&gt;    &amp;lt;property name="configLocation" value="hibernate.cfg.xml"/&gt;&lt;br /&gt;    &amp;lt;!-- Those package will be scanned for classes with persistence annotations --&gt;&lt;br /&gt;    &amp;lt;property name="packagesToScan" value="net.test.domain"/&gt;&lt;br /&gt;    &amp;lt;!-- Annotated package. Contains package-level configuration. --&gt;&lt;br /&gt;    &amp;lt;property name="annotatedPackages" value="net.test.domain"/&gt;&lt;br /&gt;&amp;lt;/bean&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Transaction manager:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&amp;lt;bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt;&lt;br /&gt;    &amp;lt;property name="sessionFactory" ref="hibernate.session.factory"/&gt;&lt;br /&gt;&amp;lt;/bean&gt;&lt;br /&gt;&amp;lt;tx:annotation-driven transaction-manager="hibernateTransactionManager"/&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Next is hibernate session. Hibernate guys suggest to use HibernateDaoSupport class as base for your DAOs, but to be completely honest, I'm not really comfortable with it, because it adds really weird dependency on Spring in DAO classes. Instead, it looks more natural to use dependency injection, which is really Spring's approach. To archive that all you need to do is mark session definition as being scoped proxy, set scope to 'prototype' and define SessionFactoryUtils#getSession as factory method. In result, each call to "any_method" in hibernate session bean instance is converted to SessionFactoryUtils.getSession().any_method():&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&amp;lt;bean name="hibernateSession" class="org.springframework.orm.hibernate3.SessionFactoryUtils" factory-method="getSession"&lt;br /&gt;  scope="prototype"&gt;&lt;br /&gt;    &amp;lt;constructor-arg index="0" ref="hibernateSessionFactory"/&gt;&lt;br /&gt;    &amp;lt;constructor-arg index="1" value="false"/&gt;&lt;br /&gt;    &amp;lt;aop:scoped-proxy/&gt;&lt;br /&gt;&amp;lt;/bean&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;And all together:&lt;br /&gt;&lt;pre class="prettyprint"&gt;&lt;br /&gt;&amp;lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;br /&gt;&amp;lt;beans&lt;br /&gt;xmlns="http://www.springframework.org/schema/beans"&lt;br /&gt;xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop"&lt;br /&gt;xmlns:tx="http://www.springframework.org/schema/tx"&lt;br /&gt;xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;bean name="hibernateSessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean"&gt;&lt;br /&gt;        &amp;lt;property name="configLocation" value="hibernate.cfg.xml"/&gt;&lt;br /&gt;        &amp;lt;!-- Those package will be scanned for classes with persistence annotations -&gt;&lt;br /&gt;        &amp;lt;property name="packagesToScan" value="net.test.domain"/&gt;&lt;br /&gt;        &amp;lt;!-- Annotated package. Contains package-level configuration. --&gt;&lt;br /&gt;        &amp;lt;property name="annotatedPackages" value="net.test.domain"/&gt;&lt;br /&gt;    &amp;lt;/bean&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"&gt;&lt;br /&gt;        &amp;lt;property name="sessionFactory" ref="hibernateSessionFactory"/&gt;&lt;br /&gt;    &amp;lt;/bean&gt;&lt;br /&gt;    &amp;lt;tx:annotation-driven transaction-manager="hibernateTransactionManager"/&gt;&lt;br /&gt;    &amp;lt;bean name="hibernateSession" class="org.springframework.orm.hibernate3.SessionFactoryUtils" factory-method="getSession"&lt;br /&gt;  scope="prototype"&gt;&lt;br /&gt;        &amp;lt;constructor-arg index="0" ref="hibernateSessionFactory"/&gt;&lt;br /&gt;        &amp;lt;constructor-arg index="1" value="false"/&gt;&lt;br /&gt;        &amp;lt;aop:scoped-proxy/&gt;&lt;br /&gt;    &amp;lt;/bean&gt;&lt;br /&gt;&lt;br /&gt;    &amp;lt;bean name="someDao" scope="singleton" class="net.test.TestDAO"&gt;&lt;br /&gt;        &amp;lt;property name="session" ref="hibernateSession"/&gt;&lt;br /&gt;    &amp;lt;/bean&gt;&lt;br /&gt;&amp;lt;/beans&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In DAO class there is no need to worry about session management, "tx:annotation-driven" will do all work for you. The only thing, which developer has to think about is appropriate usage of transaction annotations.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-2510159187497776573?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/0yBVmC36oPkbNrZBl9GUej8mEQ8/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0yBVmC36oPkbNrZBl9GUej8mEQ8/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/0yBVmC36oPkbNrZBl9GUej8mEQ8/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/0yBVmC36oPkbNrZBl9GUej8mEQ8/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=dVv2IBXR1Ys:vAolNqVL8hg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=dVv2IBXR1Ys:vAolNqVL8hg:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=dVv2IBXR1Ys:vAolNqVL8hg:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=dVv2IBXR1Ys:vAolNqVL8hg:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/dVv2IBXR1Ys" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/2510159187497776573/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=2510159187497776573" title="5 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/2510159187497776573?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/2510159187497776573?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/dVv2IBXR1Ys/hibernate-spring-in-standalone.html" title="Hibernate + Spring in Standalone application" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>5</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2009/10/hibernate-spring-in-standalone.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4DSHs-fyp7ImA9Wx9RFEQ.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-7953718576677195879</id><published>2009-08-20T16:38:00.005+01:00</published><updated>2010-12-16T10:56:19.557Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-12-16T10:56:19.557Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ide" /><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="idea" /><category scheme="http://www.blogger.com/atom/ns#" term="linux" /><title>How to make IntelliJ Idea usable on linux</title><content type="html">Which Idea on Linux there are two big problems - memory (which I failed to resolve :)) and overall performance. When I've just installed it, it wasn't usable on may box with four Xeon CPUs and four gigs of memory, and that fact surprised me a lot. After some time spent looking on Internet found several tips, which resolved most of my problems. First one is following java setting, which switches off storing images in pixelmaps:&lt;br /&gt;&lt;br /&gt;-Dsun.java2d.pmoffscreen=false&lt;br /&gt;&lt;br /&gt;Another thing is one of Linux file system settings, which disables update of accessed timestamp. I'm working with quite big projects, which have several thousand files and updating timestamp of each file access is unnecessary overhead. That feature is something which doesn't have lots of use and can be witched off, specially when you are running Linux as desktop. Just add following to your filesystem mount settings in fstab:&lt;br /&gt;&lt;br /&gt;noatime,nodiratime&lt;br /&gt;&lt;br /&gt;After that Idea became reasonably fast, but I must admit, on Win XP or Vista it still runs faster and uses less memory.&lt;br /&gt;&lt;br /&gt;I'm running Fedora 10 with NVidia graphic drivers.&lt;br /&gt;&lt;br /&gt;Udpate 2010.12: I've just installed Idea 10. It looks just awesome and it's much faster! Works brilliantly. Thanks to IntelliJ!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-7953718576677195879?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/1DDo94UvM48d_uI7-vdncZEPkBA/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1DDo94UvM48d_uI7-vdncZEPkBA/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/1DDo94UvM48d_uI7-vdncZEPkBA/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/1DDo94UvM48d_uI7-vdncZEPkBA/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=DMKVYmNltE0:aq-JEdbhuLk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=DMKVYmNltE0:aq-JEdbhuLk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=DMKVYmNltE0:aq-JEdbhuLk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=DMKVYmNltE0:aq-JEdbhuLk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/DMKVYmNltE0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/7953718576677195879/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=7953718576677195879" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/7953718576677195879?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/7953718576677195879?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/DMKVYmNltE0/make-intellij-idea-usable-on-linux.html" title="How to make IntelliJ Idea usable on linux" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2009/10/make-intellij-idea-usable-on-linux.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE4BRX48fCp7ImA9WxVWFE4.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-4435073604665278012</id><published>2009-02-22T21:06:00.019Z</published><updated>2009-02-23T23:49:14.074Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-02-23T23:49:14.074Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="NIO" /><title>Memory mapped files in Java? Easy!?</title><content type="html">Heh. Not so easy :) In NIO there is ability to work with memory mapped files, which is provided via java.nio.MappedByteBuffer. I was really happy with idea using memory mapped files, which means icreasing of performace of working with  with big files. But... well, it is not so good, as could be. Generally speaking, it works, but has some serious pitfalls, which are well-known and described (and discussed) here:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4724038"&gt;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4724038&lt;/a&gt;&lt;br /&gt;&lt;a href="http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6417205"&gt;http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6417205&lt;/a&gt; (fixed in 1.6)&lt;br /&gt;&lt;br /&gt;In two words, you can't unmap file from memory, which is causing all other issues. It is released only when GC collects that buffer. Such limitation doesn't allow you to use that feature in any application which need to release file or work with mappings really intensive (create lots of new ones).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4215458222833264808-4435073604665278012?l=stas-blogspot.blogspot.com' alt='' /&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href="http://feedads.g.doubleclick.net/~a/gVg00VC8vhkVjIrLY9z6TDcya6w/0/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gVg00VC8vhkVjIrLY9z6TDcya6w/0/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;br/&gt;
&lt;a href="http://feedads.g.doubleclick.net/~a/gVg00VC8vhkVjIrLY9z6TDcya6w/1/da"&gt;&lt;img src="http://feedads.g.doubleclick.net/~a/gVg00VC8vhkVjIrLY9z6TDcya6w/1/di" border="0" ismap="true"&gt;&lt;/img&gt;&lt;/a&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=-j20qetbsZ8:lGFAr-ljrOk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=-j20qetbsZ8:lGFAr-ljrOk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?i=-j20qetbsZ8:lGFAr-ljrOk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/StasBlog?a=-j20qetbsZ8:lGFAr-ljrOk:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/StasBlog?d=qj6IDK7rITs" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/StasBlog/~4/-j20qetbsZ8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://stas-blogspot.blogspot.com/feeds/4435073604665278012/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://www.blogger.com/comment.g?blogID=4215458222833264808&amp;postID=4435073604665278012" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/4435073604665278012?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/4215458222833264808/posts/default/4435073604665278012?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/StasBlog/~3/-j20qetbsZ8/mmeory-mapped-files-in-java-easy.html" title="Memory mapped files in Java? Easy!?" /><author><name>Stas</name><uri>http://www.blogger.com/profile/08810736345204674453</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://stas-blogspot.blogspot.com/2009/02/mmeory-mapped-files-in-java-easy.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ENQn4-cCp7ImA9WxBXEUs.&quot;"><id>tag:blogger.com,1999:blog-4215458222833264808.post-2119544606472971465</id><published>2009-02-01T23:53:00.155Z</published><updated>2010-01-22T12:01:33.058Z</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2010-01-22T12:01:33.058Z</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="java" /><category scheme="http://www.blogger.com/atom/ns#" term="architecture" /><category scheme="http://www.blogger.com/atom/ns#" term="exceptions" /><title>Java Exceptions usage</title><content type="html">I'm working on project which definitely requires Exception re-architecture and I had a quick discussion about that topic with my colleagues. That discussion was the trigger which activated some parts of my brain and materialized into that post. Some ideas can be arguable, so comments are much appreciated.&lt;br /&gt;&lt;br /&gt;It looks like, there is big misunderstanding on how to use checked and unchecked exceptions and what exactly is the difference between them. Assume that misunderstanding was born from the fact that developers ignore fact that Java's error processing is based on Exceptions. That fact means that each piece of code can throw exception anytime, whether declared it explicitly or not. Which means, that you do not need to to declare exception explicitly to make developer think, that exception can be thrown - he has to assume it anyway.&lt;br /&gt;&lt;br /&gt;So rule is quite simple - unchecked exceptions are for system errors, checked exceptions are for business ones. Business errors are errors, which can happen as a result of EXPECTED business conditions, like UserNotFoundException. Business code has to make a decision based on caught exception and usually it will affect of execution flow. If such exception is thrown, it means, that system behaves as it is expected to behave.&lt;br /&gt;On opposite unchecked exception is something, which is NOT expected, so in the most of the cases, developer should not throw such exceptions by himself. There are just a few possible cases when developer can throw then - converting of checked system exceptions (like, java.io.IOException which is checked for some uknown reason) or throwing exceptions on "assertion" checks, e.g. throwing java.lang.IllegalArgumentException for invalid argument value, etc. Such exceptions are are consequence of system and technical failures, which are not part of business flow.&lt;br /&gt;&lt;br /&gt;There is opinion which says that it's a bad practice to log exception on every catc
