JVM中的Hello World

2014-11-24 10:41:24 ? 作者: ? 浏览: 0

每一个Java开发者都是通过Hello World敲开面向对象世界的大门。但是在一开始,我们考虑的只是这个语言是什么样的,我们如何更好的编码,却很少有人关心他内部是怎么运行的。看下面一个简单的hello world。


package com.wordpress.kkarthikeyanblog;


public class HelloWorld {


public static String HELLOWORLD = "Hello World";


public void print() {
System.out.println(HELLOWORLD);
}


public static void main(String[] args) {
HelloWorld helloWorld = new HelloWorld();
helloWorld.print();
}
}


在使用javac工具编译了以上代码后,我使用下面的命令来运行这个程序。这时候JVM就启动了。


java com/wordpress/kkarthikeyanblog/HelloWorld


HelloWorld helloWorld = new HelloWorld();


我(JVM)将从constant pool中拿到HelloWorld的符号引用。然后查找Method area,获取到class信息,然后在Heap space中创建对象。


现在程序计数器将会指到


helloWorld.print();


我(JVM)将从我自己的线程的stack中取出变量"helloworld"的引用,并且找到print()方法。在从Method Area中得到字节码信息后,我将方法"print()"压栈(push),现在我将开始执行print()方法。


一旦print()方法执行结束,这个方法将出栈(pop up),将继续执行main()方法。一旦main()方法结束。main()方法将出栈,整个程序的执行也就结束了。


总结一下以上所说,在JVM中:


Method area-存放类信息


Heap Space-只存放对象


针对每一个线程来讲:


Stack-包含一个一个的栈帧【例如方法栈】-它也存放指定方法的局部变量


程序计数寄存器-指导下一步该执行什么。


另外,除了这些,还有一个"Garbage Collector"(垃圾回收器)来释放那些无用的对象。


最后,希望你看了此文能对JVM有更深一步的了解。


-->

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: