Java程序运行时内存划分

1.Java程序跨平台运行的原因

主要原因是:各种平台的JVM和字节码文件

Java源程序--具体平台的机器代码文件---被编译器翻译成平台无关的Class文件,又用特定JVM运行字节码文件,JVM在运行的过程中

将字节码指令转换为具体平台的机器指令。JVM运行在用户态,操作系统将JVM看作是一个特殊的软件,JVM启动的时候,OS给其划分

一定的内存供其运行字节码文件。存在基于JVM的其他编程语言的原因:对应特定语言的编译器可以将源码翻译成字节码文件,这个字节码可以被JVM识别并执行。

注意:执行引擎其实就是一系列的方法组成的流程---对应的就是线程,JVM执行字节码指令是基于栈的,所有操作数入栈。

Java的线程是用户态线程,线程状态改变维护都在用户态。

2.Java程序运行时内存区域划分

进行内存区域划分是由谁完成的---JVM完成,它将从操作系统获得内存,按照数据的存储结构模拟实际机器对内存进行划分。

将内存划分为以下几个区域:

  PC:字节码解释器通过PC的值找到下条要执行的字节码指令---线程私有

  虚拟机栈:存储Java方法的局部变量和参数,属于线程私有

  本地方法栈:存储JVM使用到的本地方法相关的局部变量和参数,线程私有

  堆:存储new产生的对象以及数组,是JVM垃圾回收的主要区域,线程共享

  方法区:存储类信息、常量、静态变量等,线程共享

  运行时常量池:存放在执行过程中生成的常量,属于方法区的一部分

Java程序运行时内存划分

上一篇:有评论就是我最大的动力~MySQL基础篇完结(存储引擎和图形化管理工具)


下一篇:Java运行时内存