JVM 的基本认识

一、对平台的认识

  在学习了J2EE之后,会涉及到java平台这个概念,可以从不同的角度去理解平台;很多文章认为是J2SE,J2EE,J2ME 都是不同的java平台,分别是基础平台,企业级平台,和微型平台。

     但可以从java运行基础平台去理解,目前了解到,代码运行的最底层是我们的OS操作系统,再上面就是我们的JVM--java虚拟机,再有就是我们的JRE---java运行环境,这些都包含在我们经常使用的JDK--java开发工具包中。

二、对JVM的认识

    java作为解释型语言可以一次编译多次运行,这其中JVM的作用是功不可没的。

   JVM会有会把编译后的代码和数据存储在公共的方法区,JVM的核心操作是虚拟机栈VM Stack,简单理解为是一级缓存,虚拟机栈操作完成的变量暂时存储在本地方法栈中,本地方法栈供虚拟机栈的调用和临时存储;存储new出来的类的实例和全局变量公共调用区,简单理解为二级缓存。那么方法和对象以及数据间的加载顺序是由谁来控制的呢? 那就是程序计数器了,它是每个线程私有的,每一个线程都会有一个自己的程序计数器。

JVM 的基本认识

1、对程序计数器的认识

 根据图中的解释,程序计数器是线程执行的字节码的行号指示器,怎么理解? 什么是字节码? 行号指示器怎么理解?

你有没有过这样的疑问:我们在执行代码的时候经常会遇到多线程的情况,当在执行主线程的过程中,还可以执行其他的子线程,子线程执行完后,还可以继续回来执行未执行完的主线程,这其中程序计数器是怎么做的标识呢?

已经有人做了详细的解答:程序计数器的详解

2、对栈的认识

根据图中对栈中VM Stack的解释,它可以作为操作栈,加载计算局部变量,虚拟机栈和本地方法栈之间有什么关系?在栈之间的调用过程中,字节码又起到了什么作用呢?

参考两篇经典的博客详解:JVM中的字节码     Java字节码介绍

 

小结:参考经典的文章可以更好理解,站在巨人的肩膀上

目前了解到这里,欢迎交流~