2KB项目,专业的源码交易网站 帮助 收藏 每日签到

JVM中的Hello World

  • 时间:2019-01-23 18:46 编辑:2KB 来源:2KB.COM 阅读:380
  • 扫一扫,手机访问
  • 分享
摘要:
JDK 英文原文:HelloWorld In JVM’s View – How Java Program executed internally in JVM 每一个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

JVM的自述 Hey,Guys,我是JVM,让我来给大家说说我是如何运行这个程序的。 在一开始,BoostrapperClassLoader 加载java.lang.package这个包,我内部的System Class Loader通过给定的classpath找到类"HelloWorld"。在定位到HelloWorld.class后,我将得到这个二进制流。然后我 从这个class文件中提取出了一下信息。
  • constants(例如文本、常数、类型、方法的符号引用)将被放到constant pool【在这个例子中包括HelloWorld class、方法、常量的符号】
  • 包、修饰符、静态变量【在这个例子中,"HELLOWORLD"这个静态变量】
  • 字段信息(名称、类型、修饰符)
  • 方法信息(名称、返回值类型、方法参数、修饰符、方法的字节码)【在这个例子中是print、void、public和字节码】
  • ClassLoader的引用【装载这个类的classloader】
  • 引用class的类
以上信息都被存在"Method Area"中。 在装载完毕以上信息后,我(JVM)试着找出"public static void main(String [] args)"方法。 我(JVM)中的每一个线程,除了共享"Method area"和"Heap Space"之外,他们还拥有自己的"stack"和"pc register"。 我(JVM)将从Method area中获取的main()方法信息压入栈(push),程序计数寄存器(pc register)将会告诉我下一步该干什么。

然后在程序计数器的指引下,我开始执行下面这行:

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有更深一步的了解。 本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。 2KB翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。


2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务

  • 全部评论(0)
资讯详情页最新发布上方横幅
最新发布的资讯信息
【计算机/互联网|】Nginx出现502错误(2020-01-20 21:02)
【计算机/互联网|】网站运营全智能软手V0.1版发布(2020-01-20 12:16)
【计算机/互联网|】淘宝这是怎么了?(2020-01-19 19:15)
【行业动态|】谷歌关闭小米智能摄像头,因为窃听器显示了陌生人家中的照片(2020-01-15 09:42)
【行业动态|】据报道谷歌新闻终止了数字杂志,退还主动订阅(2020-01-15 09:39)
【行业动态|】康佳将OLED电视带到美国与LG和索尼竞争(2020-01-15 09:38)
【行业动态|】2020年最佳AV接收机(2020-01-15 09:35)
【行业动态|】2020年最佳流媒体设备:Roku,Apple TV,Firebar,Chromecast等(2020-01-15 09:31)
【行业动态|】CES 2020预览:更多的流媒体服务和订阅即将到来(2020-01-08 21:41)
【行业动态|】从埃隆·马斯克到杰夫·贝佐斯,这30位人物定义了2010年代(2020-01-01 15:14)
联系我们

Q Q: 7090832

电话:400-0011-990

邮箱:7090832@qq.com

时间:9:00-23:00

联系客服
商家入住 服务咨询 投拆建议 联系客服
0577-67068160
手机版

扫一扫进手机版
返回顶部