Running finalizers on JVM exit is disabled by default. It can be enabled with ``++System.runFinalizersOnExit++`` and ``++Runtime.runFinalizersOnExit++``, but both methods are deprecated because they are are inherently unsafe. 


According to the Oracle Javadoc:

____
It may result in finalizers being called on live objects while other threads are concurrently manipulating those objects, resulting in erratic behavior or deadlock.

____

If you really want to be execute something when the virtual machine begins its shutdown sequence, you should attach a shutdown hook. 


== Noncompliant Code Example

----
public static void main(String [] args) {
  ...
  System.runFinalizersOnExit(true);  // Noncompliant
  ...
}

protected void finalize(){
  doSomething();
}
----


== Compliant Solution

----
public static void main(String [] args) {
  Runtime.addShutdownHook(new Runnable() {
    public void run(){
      doSomething();
    }
  });
  //...
----


== See

* https://wiki.sei.cmu.edu/confluence/x/4jZGBQ[CERT, MET12-J.] - Do not use finalizers

