程序运行流程图:

如上图所示,首先Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行。在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的JVM内存。因此,在Java中我们常常说到的内存管理就是针对这段空间进行管理(如何分配和回收内存空间)。

运行时数据区图:

Java总内存:
总内存=堆内存(Xmx)+方法区内存(MaxPermSize)+栈内存(Xss)*线程数+直接内存(MaxDirectMemorySize,堆外)+虚拟机内存

堆内存

Java堆(Java Heap)是被所有线程共享的一块区域,所有的对象实例以及数组都要在堆上分配。

程序计数器

程序计数器是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。
Java虚拟机的多线程就是通过线程轮流切换并分配处理器执行时间的方式来实现的,任何一个确定的时刻,一个处理器只会执行一条线程中的指令。所以为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器。每个线程都有自己单独的程序计数器,互不影响这个属于“线程私有”的内存。

Java虚拟机栈(执行内存模型)

Java虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型,每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。
当线程调用Java方法时,虚拟机压入一个新的栈帧到对应线程的虚拟机栈中;当方法返回时,这个栈帧就被从栈中弹出并抛弃。
局部变量表所需的内存空间在编译期间完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小。

方法区

方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。
这个区域的内存回收目标主要是针对常量池和对类型的卸载。
当方法区无法满足内存分配需求时,将抛出OutOfMemoryError异常。

java程序的执行流程相关推荐

  1. java se开发_JAVA_SE基础——3.Java程序的开发流程

    上一篇,写的是JAVA的环境变量的配置,今天我抽空写篇Java程序的开发流程,下面的教程是我结合书本和毕向东老师的视频写下的心的~ 在没有真正写Java程序前,首先需要了解Java程序的开发过程. S ...

  2. 上海java程序员招聘流程分析

    当今最热销的职业,非IT行业莫属了,而java程序员作为其中的佼佼者一直都是求职者们关注的目标所在.为减轻求职者们的一些面试疑惑,下面本文就带来上海java程序员招聘流程. 上海java程序员招聘流程 ...

  3. php网页执行流程,PHP程序的执行流程

    PHP程序的执行流程 为了以后能开发PHP扩展,就一定要了解PHP的执行顺序.这篇文章就是为C开发PHP扩展做铺垫. Web环境我们假设为Apache.在编译PHP的时候,为了能够让Apache支持P ...

  4. 解释java程序所使用的命令是,Java程序的执行原理以及解释说明

    在初学Java的时候,我们安装完Java的开发环境后,就可以通过记事本等编辑工具编写程序了.推荐在Windows操作系统中使用EditPlus工具进行编写.由于我使用的是Mac OS,所以,我使用Su ...

  5. Java程序的执行方式

    1. java程序的执行方式:编译+解释 混合,在编译基础上进行解释运行的语言. 编译:将源代码一次性转换成目标代码的过程.编译器:.java→.class 编译只执行一次,转换成的目标代码影响运行速 ...

  6. java exe指的是什么,3.Java程序的执行过程中用到一套JDK工具,其中java.exe是指(5.0分)...

    3.Java程序的执行过程中用到一套JDK工具,其中java.exe是指(5.0分) 答:Java编译器 最早的有关学习迁移的一种代表性理论是( ) 答:形式训练说 能够通过母婴胎盘感染的寄生虫是( ...

  7. Java程序定时执行shell脚本

    第一次写博客,写的不好还请见谅. 之前在Linux环境中想定期执行某个脚本,第一反应就是将这个task加入到crontab里(crontab的知识点这里就不具体介绍了),当然,这种做法一般情况下是可行 ...

  8. 初识Java ~ (二) # Java 中程序的执行流程,(万字长文)特别细~ 可收藏~

    大家好~ ,我是 清汉 时隔一月,懒惰的我终于将 Java 初识系列文章,第二篇程序执行流程码出来了~ 初识Java ~ (一) 从0开始,Java基础知识,双手奉上~ 可收藏!! 应该不算太晚吧,这 ...

  9. java程序运行5步骤_浅析Java程序的执行过程

    一 .jdk内容概述 当安装好jdk后(本示例jdk版本为11.0.1,不同版本,目录有细微差别,但bin目录包含的exe是一样的),打开bin目录,有两个重要的exe文件:javac.exe(编译器 ...

最新文章

  1. 转帖:iOS UIWindow UIWindowLevel
  2. FFmpeg 源码学习(一):avformat_open_input 源码分析
  3. 三步骤定位Windows崩溃进程
  4. 【聚类算法】sklearn聚类方法详解
  5. 杭电oj1003java实现
  6. 长春理工计算机学院保研外校,长春理工大学计算机科学技术学院(专业学位)软件工程保研...
  7. CentOS HarBor安装与配置
  8. yiilite.php,YII Framework学习教程-YII的V-view的render若干函数-2011-11-17 | 学步园
  9. Linux 相关小技巧
  10. 数据结构——动态链表
  11. 098 元类(metaclass)
  12. inceptor手册
  13. KDD数据库知识发现流程
  14. 黑暗城堡(dijkstra算法)
  15. 【论文】联邦学习区块链 论文集(三)
  16. 使用Anbox在Jetson Nano 2GB上运行Android应用程序
  17. python测试框架nose研究
  18. idea + groovy + mybatis 自动生成 Dao、mappings 和 实体类
  19. 塑形管理小程序开发(一)-源头追溯
  20. 【交互设计】熟练使用2B铅笔前Not Open Axure

热门文章

  1. [附源码]计算机毕业设计springboot酒店客房管理信息系统
  2. 再高贵的打工人都得在体检报告前低下高贵的头颅
  3. XBOX360用HDMI线有图像没声音怎么办
  4. 解决IE没有响应、卡死现象
  5. 基于5G城市道路积水监测系统解决方案
  6. Odoo----异常、错误、警告、提示、确认信息显示
  7. 网络营销相关名词解释
  8. 重磅!中国科学技术大学,成立新学院!
  9. 【java】JavaFX从零开始实现拼图小游戏
  10. 机器人学笔记(01):1.绪论