专业的JAVA编程教程与资源

网站首页 > java教程 正文

Jvm从编译到执行

temp10 2024-11-17 15:59:45 java教程 12 ℃ 0 评论

Java程序的执行过程

一个 Java 程序,首先经过 javac 编译成 class文件,然后 JVM 将其加载到方法区,执行引擎将会执行这些字节码。执行时,会翻译成操作系统相关的函数。jVM 作为 .class 文件的翻译存在,输入字节码,调用操作系统函数。

Jvm从编译到执行

过程如下: Java 文件->编译器>字节码->JVM->机器码。

INM 全称 Java virtual Machine,也就是我们耳熟能详的 Java虚拟机。它能识别 .class 后缀的文件,并目能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。



JVM内存区域

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域

运行时数据区的定义: Java 虚拟机在执行Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域。 在 JVM 中,JVM 内存主要分为堆、程序计数器、方法区、虚拟机栈和本地方法栈等。

同时按照与线程的关系也可以这么划分区域:

线程私有区域: 一个线程拥有单独的一份内存区域。

线程共享区域: 被所有线程共享,且只有一份。

另外还有一个直接内存,这个虽然不是运行时数据区的一部分,但是会被频繁使用。你可以理解成没有被虚拟机化的操作系统上的其他内存(比如操作系统上有 8G 内存,被 JVM 虚拟化了 3G,那么还剩余 5G, JVM 是借助一些工具使用这 5G 内存的,这个内存部分称之为直接内存)


虚拟机栈

栈的数据结构:先进后出(FIFO)的数据结构。

虚拟机栈的作用:在JVM 运行过程中存储当前线程运行方法所需的数据,指令、返回地址。

虚拟机栈是基于线程的:哪怕你只有一个 main()方法,也是以线程的方式运行的。在线程的生命周期中,参与计算的数据会频繁地入栈和出栈,栈的生命周期是和线程一样的。

虚拟机栈的大小缺省为 1M,可用参数 -Xss 调整大小,例如-Xss256k。

栈帧:在每个 Java 方法被调用的时候,都会创建一个栈帧,并入栈。一旦方法完成相应的调用,则出栈。

栈帧大致被分为四个区域:

?局部变量表

?操作数栈

?动态连接

?完成出口(返回地址)

同时,虚拟机栈这个内存也不是无限大,它有大小限制,默认情况下是 1M。如果我们不断的往虚拟机栈中入栈帧,但是就是不出栈的话,那么这个虚拟机栈就会爆掉。

程序计数器:

指向当前线程正在执行的字节码指令的地址

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表