
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
Java编程开发语言的学习与应用是目前大多数人转行软件开发行业都要熟练掌握的一个编程开发技术,而本文我们就通过案例分析来简单了解一下,Java编程运行原理分享。
一、类加载子系统
类加载子系统:负责查找和装载class文件,将其中的二进制数据加载到jvm中。
字节码-->加载-->验证-->准备-->解析-->初始化
加载:通过类的完全限定名找到类文件所在位置,根据其中的字节码创建java.lang.Class对象,所以才会说万物皆对象,我们也可以继承ClassLoader,重写findClass方法来自定义实现类加载器。默认情况下我们都使用AppClassLoader
验证:确保加载的字节码的是否符合虚拟机的要求,是java提供的一种自我保护机制,不让其危害虚拟机安全。其主要包括四种验证,字节码验证、文件格式验证,元数据验证、符号引用验证。
准备:为类变量分配地址和初始化值,类变量会分配到方法区(元空间)中,这里的初始化是指该数据类型的默认初始值,例如int对应的是0,long对应的0L,只有在初始化时才会动显示赋值
解析:把类中的二进制数据中的符号引用转换为直接引用;例如我们通过user.getInfo();这里的.getInfo()就是符号引用,在解析阶段会将它指向真正的内存位置,这就是直接引用
初始化:主要为类的静态变量赋予正确的值,比如intnum=10;这里num的值会从准备阶段的0变为10;并且若该类有父类,会对其进行初始化操作;如果类中有初始化语句,系统会按照顺序进行初始化
二、虚拟机栈如何执行
栈帧
栈帧存在Java虚拟机栈中,是虚拟机栈中的单位元素。方法执行会创建栈帧,一个方法就是一个栈帧,一个栈帧分为四个部分:
1.局部变量表
存放方法参数或者内部定义的一组变量列表;例如方法中声明的对象:
2.操作数栈
执行字节码指令的时候使用,通俗的讲就是方法的执行在操作数栈中进行,通过压栈和出栈进行访问
3.动态链接
Java运行期间是动态链接的,需要将指向方法的符号引用转换为直接引用(内存地址);在类加载解析阶段,将符号引用转换为直接引用称之为静态解析。而此处正好就是动态链接
user.getInfo();//找到这个getInfo()方法的内存位置
4.返回地址
方法不管正常执行结束还是异常退出,需要返回方法被调用的位置
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。