1.运行时数据区

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

jvm内存主要分为堆、程序计数器、方法区、虚拟机栈喝本地方法栈,直接内存等。

java方法的运行和虚拟机栈

虚拟机栈是线程运行java方法所需要的数据,指令,返回地址。

每一个方法执行都会打包成一个栈帧。

栈是先进后出的数据结构。

栈帧四个区域

局部变量表:

操作数据栈

动态连接

返回地址

程序计数器

较小的内存空间,当前线程执行的字节码的行号指示器,各线程之间独立存储,互不影响。

由于java是多线程语言,当执行线程数量超过cpu的核心数,线程之间会根据时间片轮询cpu资源。那么退出的线程就需要一个单独的计数器去记录下一条运行的指令。它也是为一个不会oom的内存区域。所有的方法都有程序计数器(native 本地方法除外)

本地方法栈

本地方法栈跟java虚拟机栈的功能类似

方法区

提供各个线程共享的运行时内存区域。它存储每一个类的结构信息,例如 运行时常量池字段和方法数据,构造函数和普通方法的字节码内容,类、实例、接口初始化的特殊方法、jdk 1.7 永久代 1.8元空间

运行时常量池

每一个类,接口的常量池的运行时表现形式,包括若干不同的常量,必须在运行期解析后才能获得方法或者字段的引用。

是jvm内存区域中最大的一块,申请的所有对象都在堆。垃圾回收也就是回收堆。

直接内存

jvm在运行的时候,会从系统中申请大块的堆内存。

jvm运行的总体流程

jvm在操作系统上启动申请内存,先进行运行时数据区的初始化,然后把类加载到方法区,最后执行方法。方法的执行和退出过程在内存的提现上是虚拟机栈中栈帧的入栈和出栈。同时在方法的执行过程中创建的对象一般情况下是放在堆中,最后堆中的对象也是需要进行GC。

java内存四大区,jvm基础-内存区域相关推荐

  1. JAVA面试题之JVM基础知识

    JAVA面试题总结-JVM的基础知识 JAVA面试题之JVM基础知识 说一下JVM的主要组成部分及作用 说一下 jvm 运行时数据区? 说一下堆和栈的区别? 队列和栈是什么?有什么区别? 什么是双亲委 ...

  2. Java技术专题之JVM逻辑内存回收机制研究图解版

    一.引言 JVM虚拟机内存回收机曾迷惑了不少人,文本从JVM实现机制的角度揭示JVM内存回收的原理和机制. 一.Java平台逻辑架构 二.JVM物理结构 通过从JVM物理结构图我们可以看到: 1.JV ...

  3. jvm分配内存_为JVM分配内存:一个案例研究

    jvm分配内存 这篇文章是关于最近的性能调整练习的. 与往常一样,这些开始于关于症状的模糊表述. 这次,魔鬼采取了"应用程序速度慢,我们无权访问源代码的形式. 我们有什么选择来改善局势&qu ...

  4. 【C 语言】内存四区原理 ( 栈内存与堆内存对比示例 | 函数返回的堆内存指针 | 函数返回的栈内存指针 )

    文章目录 一.函数返回的堆内存指针 二.函数返回的栈内存指针 一.函数返回的堆内存指针 在 main 主函数中 , 调用 get_memory 子函数 , 返回 malloc 初始化的堆内存 , 可以 ...

  5. java方法四要素_Java基础语法

    Free Talk 最近在JavaGuide博客里面兜兜转转了几天,一边等华为的实训消息,一边随便看点Java后端开发的知识.但是这一周总感觉看了就忘,而且光看也很容易走神发呆,要不然就是去打王者啥的 ...

  6. 【C 语言】内存四区原理 ( 栈内存属性增长方向 | 栈内存开口方向 | 代码示例 )

    文章目录 一.栈内存开口方向 二.栈内存开口方向代码示例 一.栈内存开口方向 栈内存的生长方向 : 先后定义两个变量 int a , b; 开口向上 : b 的地址 > a 的地址 , a 放在 ...

  7. 一、JAVA虚拟机------JVM自动内存管理

    JVM自动内存管理 一.JAVA内存区与内存溢出 1.1 概述 1.2 运行时数据区 1.2.1 程序计数器 (Program Counter Register) 1.2.2 Java虚拟机栈(Jav ...

  8. java内存管理课程设计_Java内存管理分析

    Java内存主要分为stack, heap, data segment, and code segment. stack(栈):存放非静态基本数据类型变量的名称和值,以及非静态对象的引用 若是非静态基 ...

  9. java短除法获取二进制_Java十四天零基础入门-Java的数据类型介绍

    不闲聊!!!不扯淡!!!小UP只分享Java相关的资源干货 本章节目标: 理解数据类型的作用.Java中包括哪些数据类型?常见的八种基本数据类型都有哪些?会用八种基本数据类型声明变量?什么是二进制?原 ...

最新文章

  1. 数据结构之快速排序图文详解及代码(C++实现)
  2. linux+proc+原理,Linux内核中的Proc文件系统(一)
  3. 老师:你根本不知道我有多想逃课
  4. JavaScript从入门到放弃 - ES6中的对象和类
  5. python二维数组换行输出_关于用python绘制二维数组的问题
  6. loss函数之SoftMarginLoss
  7. Excel文件输出到浏览器
  8. Tecplot 安装记录
  9. 移动app开发者必读:国内主要移动广告平台概况
  10. 邮件、社交营销最全“勾搭”策略
  11. java定时执行 web_定时执行任务-Java WEB程序【绝对好用】
  12. Trajan算法(强连通+缩点)
  13. DeeCamp 2020 挑战赛:通过深度学习识别生物电信号
  14. LaTex转word
  15. googleplay开发账号如何设置或更改帐号信息
  16. Flex布局和gird布局
  17. 工厂服务器系统,各种工厂时钟系统解决方案
  18. python画图小猪佩奇_用python画个小猪佩奇
  19. 亚马逊选品是单一产品好还是诸多产品好呢?
  20. Common Weakness Enumeration (CWE) 2021 Lastest

热门文章

  1. 在Windows上安装Docker
  2. 【One by One系列】IdentityServer4(四)授权码流程
  3. 对 Redis 中的有序集合SortedSet的理解
  4. 【视频回放与课件】搭上AI快车-在线公益课堂:基于移动应用的人工智能开发...
  5. Linux创始人:v5.8是有史以来最大的发行版之一
  6. 用C#在STM32上写第一个Hello world
  7. Azure App Service 如何在第一时间用上最新版 .NET Core
  8. HttpClientFactory的套路,你知多少?
  9. 将传统 WPF 程序迁移到 DotNetCore 3.0
  10. Sangmado 公共基础类库