JVM(一)java的执行概要

作为一个接触过一段时间java的人来说,之前很少去思考这里面到底是怎么在执行的,在后面想要去了解这里面深层的机制和原理的时候就头疼了许久,所以,把一些从网上整理过来的资料以及一些我自己的理解都记录下来,作为自己的学习记录。

1.把握全局
Java程序从源文件创建到程序运行要经过两大步骤:
1、源文件.java由编译器编译成字节码.class
2、字节码由java虚拟机解释运行。

2.例子说明
在百度知道上看了一个不错的回答,写的很清楚,所以就把它拿过来了。
1)源文件.java由编译器编译成字节码.class
新建两个类Student和Test,Test打印学生对象的值
java在编译Test的时候,这个时候如果它依赖的学生类还没有被编译的话,就会先编译它依赖的这个Student类,然后再编译Test.

编译后的字节码文件格式主要分为两部分:常量池和方法字节码。
常量池记录的是代码出现过的所有token(类名,成员变量名等等)以及符号引用(方法引用,成员变量引用等等);
方法字节码放的是类中各个方法的字节码。

2)字节码由java虚拟机解释运行
java类运行的时候大概可以分为两个过程:类的加载和类的执行。

类的加载:JVM都是在程序不得不用的时候再来加载这些类,而非加载该程序下所有的类,而且只加载一次就够了。

继续上面的例子,编译之后得到了Test.class,
用java来运行的时候,系统就会启动一个jvm进程,jvm进程从classpath路径中找到一个名为Test.class的二进制文件,将Test的类信息加载到运行时数据区的方法区内,这个过程叫做Test类的加载。

然后JVM找到Test的主函数入口,开始执行main函数。
main函数的第一条命令是Student stu= new Student(“helen”);
就是让JVM创建一个Student对象,但是这时候方法区中没有Student类的信息,所以JVM马上加载Student类,把Student类的类型信息放到方法区中。

加载完Student类之后,Java虚拟机做的第一件事情就是在堆区中为一个新的Student实例分配内存, 然后调用构造函数初始化Student实例,这个Student实例持有着指向方法区的Student类的类型信息(其中包含有方法表,java动态绑定的底层实现)的引用。
当使用stu.getName()的时候,JVM根据stu引用找到Student对象,然后根据Student对象持有的引用定位到方法区中Student类的类型信息的方法表,获得getName()函数的字节码的地址。
开始运行getName()函数。

特别说明:java类中所有public和protected的实例方法都采用动态绑定机制,所有私有方法、静态方法、构造器及初始化方法都是采用静态绑定机制。而使用动态绑定机制的时候会用到方法表,静态绑定时并不会用到。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java是一种广泛应用于软件开发的高级编程语言。它具有简单、可移植、面向对象、安全和高性能等特点,被广泛应用于各种领域,包括企业级应用、移动应用、嵌入式系统等。 Java技术概要包括以下几个方面: 1. 语言特性:Java是一种面向对象的编程语言,支持封装、继承和多态等面向对象的特性。它还具有自动内存管理、异常处理、泛型、Lambda表达式等现代编程语言的特性。 2. 平台独立性:Java通过Java虚拟机(JVM)实现了平台独立性。开发人员可以编写一次Java代码,然后在不同的操作系统上运行,而无需修改代码。这使得Java成为跨平台开发的首选语言。 3. 应用领域:Java广泛应用于企业级应用开发,如Web应用、分布式系统、大数据处理等。它也是Android应用开发的主要语言。此外,Java还被用于嵌入式系统、游戏开发、科学计算等领域。 4. 开发工具和框架:Java拥有丰富的开发工具和框架,如Eclipse、IntelliJ IDEA等集成开发环境,以及Spring、Hibernate等流行的开发框架。这些工具和框架提供了丰富的功能和便捷的开发方式,提高了开发效率。 5. 安全性:Java具有强大的安全性特性,包括内置的安全管理器、字节码验证和沙箱机制等。这些特性使得Java在网络环境中能够安全地执行代码,防止恶意代码的攻击。 6. 社区支持:Java拥有庞大的开发者社区和丰富的资源,开发者可以通过各种在线论坛、博客、教程等获取帮助和学习资料。这使得Java成为一个活跃且不断发展的技术生态系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值