Java Hour 26 Execution

时间:2024-11-16 23:03:25

有句名言,叫做10000小时成为某一个领域的专家。姑且不辩论这句话是否正确,让我们到达10000小时的时候再回头来看吧。

26 Hours.

Java 虚拟机启动的时候加载一个指定的类然后调用该类中的main 方法。分为loading, linking, initialization.

虚拟机启动

第一个指定的class 是以什么方式指定给Java 虚拟机的,这个已经超出了本文的范围。一般来说,在使用命令行的host 环境中,该class 的名字是以命令行参数的形式传递给虚拟机的。

加载指定的Class

初始化操作试图执行main 方法,但是包含该方法的类还没有载入。因此虚拟机使用class loader 试图载入该class, 如果该操作失败,将会抛出异常。更详细的表述下次再具体展开。

Link

Link 包含调用严重,准备和优化。具体如何连接下次再具体展开。

只有当初始化结束以后,main 方法才允许被执行。

显然,如果该类有父类,那么该父类也必须先被初始化。

Invoke main

最终,main 方法被调用。main 方法必须是public, static, void,然后接受一个String[] 为参数。

Finalization of Class Instances

class 对象有一个protected 的方法叫做 finalize. 在GC 回收存储之前,Java 虚拟机将会调用该对象的终结器。

终结器中可以用来回收一些无法被自动内存管理释放的资源。

Program Exit

程序终止一切活动并退出的两个条件:

1 所有非守护线程都终止了。

2 某些线程合法的调用了exit 方法。