title: Why defining class as final improves JVM performance?
body: <p>Quoting from <a href="http://sites.google.com/site/gson/gson-design-document" rel="noreferrer">http://sites.google.com/site/gson/gson-design-document</a>:</p>
  
  <blockquote>
    <p>Why are most classes in Gson marked as
    final?</p>
    
    <p>While Gson provides a fairly
    extensible architecture by providing
    pluggable serializers and
    deserializers, Gson classes were not
    specifically designed to be
    extensible. Providing non-final
    classes would have allowed a user to
    legitimately extend Gson classes, and
    then expect that behavior to work in
    all subsequent revisions. We chose to
    limit such use-cases by marking
    classes as final, and waiting until a
    good use-case emerges to allow
    extensibility. Marking a class final
    also has a minor benefit of providing
    additional optimization opportunities
    to Java compiler and virtual machine.</p>
  </blockquote>
  
  <p>Why is this the case? [If I would guess: of JVM knows class is final it does not maintain method override tables? Are there any other reasons?] </p>
  
  <p>What is the benefit in performance?</p>
  
  <p>Does this applies to classes that are frequency instantiated (POJO?) or perhaps to class that are holders static methods (Utility classes) ?</p>
  
  <p>Are methods defined as final also can theoretically improve performance?</p>
  
  <p>Are there any implications?</p>
  
  <p>Thank you, 
  Maxim.</p>