1.一个jvm的天职就是运行一个java程序,当这个java程序关闭退出,这个jvm也随之消亡。一个jvm从一个java的main方法开始,其内部分两种线程,守护线程和非守护线程,守护线程一般来讲是jvm的后台线程,比如gc线程就是一个守护线程,程序的入口main方法就是java程序的第一个飞守护线程,当所有的非守护线程都结束,jvm的生命周期也就结束了。
2.每个对象都还有一个对象锁,用于协调多个线程访问同一对象(资源)的同步。
2.每个对象都有一个等待集合(wait set),等待集合是为多个线程完成某一目标而协调工作的,当一个线程调用了某个对象的wait方法,该线程就被阻塞,并把它放到该对象的等待集合中,知道另一线程在同一对象中调用notify或者notifuAll进行唤醒。
3:数组,在java中,数组是真正的对象,它的直径超类是Object,每一个具有相同维度和类型的数组都是同一个类的实例,数组类的组成有两部分,每一维用一个“[”表示,用字符或者字符串表示元素类型,如int类型一维数组的类名为:"[i";String的二维数组为“[[java/lang/String”.
4.栈帧,包括:
(1)局部变量区,参数、局部变量的基本类型和引用
(2)操作数栈,执行引擎操作过程的中间变量
(3)帧数据区,存储常量池解析,正常返回或者异常派发等。
5.<clinit>方法是java编译器变量初时化语句静态初始话语句的代码都放到class的<clinit>方法中,jvm在加载初始化时调用该方法,如果有父类,就先调用父class的<clinit>,接口直径调用本身的<linit>.
6.实例化一个对象有四种方法1.new 2.Class或者Constructor的newInstance()反射实例化,3.clone (),4.ObjectInputStream.getObject()反序列化。