程序的加载流程
2017-03-27 15:19
141 查看
代码如下:
class ThisClass{
String name;
Integer age;
public void printThis(){
System.out.println("ThisClass本次调用对象的地址为:\t\t\t"+this);
}
}
class Test{
public static void main(String[] args){
ThisClass thisClass = new ThisClass();
thisClass.printThis();
System.out.println("ThisClass在main方法创建的对象的地址为:\t\t"+thisClass);
}
}
程序的加载流程如下:
1、执行Test类时,先装载Test到JVM中,并把main方法放入方法区
2、发现有ThisClass类的对象,先把ThisClass加载到JVM虚拟机中,发现拥有printThis方法,将printThis放到方法区中
3、在堆中开辟一块空间创建ThisClass对象,在栈中压入thisClass变量并将其引用地址指向在堆中创建的ThisClass地址,并给其属性初始化
4、将printThis压入栈中,并把thisClass的地址赋值给this,打印this,执行完毕后,将printThis出栈,this消失
5、运行输出语句,并将thisClass对像的地址输出
6、main方法执行完成,将thisClass、this.printThis()、输出程序出栈(注意出栈顺序是先进后出)
7、将main方法出栈
8、因thisClass对象已经没有变量引用,所以会被GC垃圾回收器不定时回收销毁
class ThisClass{
String name;
Integer age;
public void printThis(){
System.out.println("ThisClass本次调用对象的地址为:\t\t\t"+this);
}
}
class Test{
public static void main(String[] args){
ThisClass thisClass = new ThisClass();
thisClass.printThis();
System.out.println("ThisClass在main方法创建的对象的地址为:\t\t"+thisClass);
}
}
程序的加载流程如下:
1、执行Test类时,先装载Test到JVM中,并把main方法放入方法区
2、发现有ThisClass类的对象,先把ThisClass加载到JVM虚拟机中,发现拥有printThis方法,将printThis放到方法区中
3、在堆中开辟一块空间创建ThisClass对象,在栈中压入thisClass变量并将其引用地址指向在堆中创建的ThisClass地址,并给其属性初始化
4、将printThis压入栈中,并把thisClass的地址赋值给this,打印this,执行完毕后,将printThis出栈,this消失
5、运行输出语句,并将thisClass对像的地址输出
6、main方法执行完成,将thisClass、this.printThis()、输出程序出栈(注意出栈顺序是先进后出)
7、将main方法出栈
8、因thisClass对象已经没有变量引用,所以会被GC垃圾回收器不定时回收销毁
相关文章推荐
- 《鸟哥的linux》-第18章-启动关机的流程与加载程序
- 试图搞懂MDK程序下载到Flash(一)--Nand Flash启动流程,加载域和运行域
- 第18章 启动关机的流程与加载程序
- java 程序流程:类的加载、初始化、构造函数
- Java程序加载mybatis的大致流程
- [转] Linux下程序的加载、运行和终止流程
- 程序运行对象加载流程
- Android高效加载大图、多图解决方案,有效避免程序OOM流程
- 程序设计框架图和框架加载流程
- Linux下程序的加载、运行和终止流程 .
- Java程序最基本的加载流程
- 试图搞懂MDK程序下载到Flash(一)--Nand Flash启动流程,加载域和运行域
- Linux的启动和关机的流程、引导加载程序
- Linux下程序的加载、运行和终止流程 .
- 程序设计框架图和框架加载流程
- linux的启动流程和加载程序
- linux+shell编程 笔记 启动关机的流程与加载程序
- [李景山php]每天TP5-20161215|thinkphp5的程序加载运行流程【图】
- ClassLoader—流程观察程序执行类加载-verbose:class
- 编写、加载和存取插件程序(Plug-Ins)