🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
>[warning] java程序运行在虚拟机上 ## JVM所处的位置 ![](http://img.blog.csdn.net/20160816185506969?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) ## JDK、JRE和JVM三者之间关系 * jvm:Java虚拟机-(负责执行符合规范的Class文件) * jre: 运行时环境-(包含jvm和类库) * jdk:java开发工具包-(包含jre和开发工具包) ![](http://img.blog.csdn.net/20160614105103329?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) ## Class字节码 编译后被Java虚拟机所执行的代码使用了一种平台中立(不依赖于特定硬件及操作系统的)的二进制格式来表示,并且经常(但并非绝对)以文件的形式存储,因此这种格式被称为Class文件格式。Class文件格式中精确地定义了类与接口的表示形式. ![](http://img.blog.csdn.net/20160816185601413?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center) ## ava虚拟机的体系结构 ![](http://images2015.cnblogs.com/blog/665375/201601/665375-20160126212928129-1855187537.png) 1. 类装载子系统. 2. 运行引擎.负责执行包含在已装载的类或接口中的指令. 3. 运行数据区域.方法区、Java堆、Java虚拟机栈、PC寄存器、本地方法栈,还有常量池 ## 运行数据区域 ### 线程共享数据区 包括:Java堆、方法区。它们会随着虚拟机启动而创建,随着虚拟机退出而销毁。 #### 1.Java堆 Java堆主要用来为类实例对象分配内存。 [详细了解](http://blog.csdn.net/ljheee/article/details/52196455) #### 2.方法区(静态区) 存储运行时常量池,类(即时编译器编译后的行为代码+静态变量) ### 线程私有数据区 ### 3.java栈 描述Java方法(函数)执行的内存模型. 栈帧:局部变量表、操作数栈、动态链接、方法出口 >[info] 局部变量表所需的内存空间大小在编译期间完成分配。 #### 4.本地方法栈 用于支持native方法的运行内存模型。(native方法,比如用C/C++实现的代码) #### 程序计数器 记录当前线程所执行到的字节码的行号.