JVM

来源:互联网 发布:js根据当前时间年月日 编辑:程序博客网 时间:2024/06/08 19:14

纯粹是个人学习总结,如有不对的地方请吐槽。

java虚拟机

在操作静态变量方法的时候会先初始化该类

在操作常量时不需要初始化该类,会在编译时将常量放到常量池中。

垃圾回收:

会先标记该对象是否可以回收,然后再遍历判断是否执行finalize()方法

如果需要执行finalize()方法就会调用finalize()方法,但是回收时不会等到finalize()执行完成再回收。

并且finalize()只执行一次

判断finalize()执行的条件:是否重写finalize()方法

对象耍流氓

@Overrideprotected void finalize() throws Throwable {    super.finalize();    System.out.println("嗯,已经执行了finalize()方法了");    Test.self = this;}private static void save() throws Exception {    self = null;    System.gc();    //Finalizer线程优先级比较低,我们稍等一小会    Thread.sleep(500);    if (self != null) {        System.out.println("我还活着");    } else {        System.out.println("啊哦,我挂了");    }}

打印结果:

嗯,已经执行了finalize()方法了

我还活着

啊哦,我挂了

同样是执行save方法,第一次对象成功拯救了自己,第二次却无法拯救自己,finalize方法也仅仅只被执行了一次而已!

如有雷同并且你介意请联系我

原创粉丝点击