PS:时间一晃好久了,距离上一篇文章过去许久了,出自两个方面的原因,其一,公司的项目接近尾声,用户提出的需求功能需要马上的解决;其二,出自整天加速完善和修改需求功能,下班之后几乎不想再继续下去了,懒散情绪有了。
扯淡话题结束了,开始继续学习笔记文章的整理,每天一小步,久而久之就是巨大的一步。今天要扯的话题是Java虚拟机的运行时数据区。
Java虚拟机(JVM)是 由JDK提供的一个软件程序,而其任务就是执行Java程序,下面给出虚拟机执行Java的过程图。
从图中可以看出由Java源文件编译出来的类文件可以在任意一种平台上运行,因而Java才有了“一出编译,到处运行”的俗称,也体现其跨平台这一强大的特点,归功揭底是Java虚拟机的强大,Java虚拟机封装了底层操作系统的差异,导致了不管是在哪种平台上,都是以下的步骤来运行程序。
首先,把.class文件中的二进制数据加载到内存中;其次对类的二进制数据进行验证;最后,解析并执行指令。
Java虚拟机提供了程序运行时的环境,而该环境中最为重要的一个资源就是运行时数据区。运行时数据区是操作系统为Java虚拟机分配的内存区域,Java虚拟机管辖这块区域,它又把该区进一步的划分为多个子区域,主要包括堆区、方法区和Java栈区…在栈区中存放着对象,在方法区中存放着类的类型信息,类型信息包括静态变量和方法信息等等,方法信息包含类的所有方法的字节码。
当运行Java编译命令时,就启动了一个Java虚拟机,该进程首先从classpath中找到要编译的Java文件,读取文件中的二进制数据,把Java文件类的类型信息存放到运行时数据区方法区中,此一过程称为Java类文件的加载过程。
Java虚拟机加载了要编译的Java类文件之后,还会对类文件进行验以及初始化,关于初始化的详细内容后期章节中在介绍,Java虚拟机然后定位到方法区中编译的类文件的主方法main()方法的字节码,执行其指令。
至此,对于Java扯淡的准备小理论知识都已经介绍完了,后续将正式步入学习Java了,语法、规范、JavaAPI中的各类的介绍等等…