title: Does the garbage collector work on static variables or methods in java?
body: <p>I am creating a sample demo program for make me understand that how can I deallocate the reference of static variables, methods in java using garbage collector? </p>
  
  <p>I am using Weak Reference for not preventing the garbage collector.</p>
  
  <p>Class <code>Sample</code></p>
  
  <pre><code>public class Sample {
  
      private static String userName;
      private static String password;
      static {
          userName = "GAURAV";
          password = "password";
      }
      public static String getUserName(){
          return userName;
      }
      public static String getPassword(){
          return password;
      }
  }
  </code></pre>
  
  <p>Class <code>User</code> </p>
  
  <pre><code>import java.lang.ref.WeakReference;
  
  public class User {
  
      public static void main(String[] args) {
          /**
           * Created one object of Sample class
           */
          Sample obj1 = new Sample();
          /**
           * I can also access the value of userName through it's class name 
           */
          System.out.println(obj1.getUserName()); //GAURAV
          WeakReference&lt;Sample&gt; wr = new WeakReference&lt;Sample&gt;(obj1);
          System.out.println(wr.get());  //com.test.ws.Sample@f62373
          obj1 = null;
          System.gc();
          System.out.println(wr.get()); // null
          /**
           * I have deallocate the Sample object . No more object referencing the Sample oblect class but I am getting the value of static variable. 
           */
          System.out.println(Sample.getUserName()); // GAURAV
      }
  
  }
  </code></pre>