Java 内存模型

Java 虚拟机将其管辖的内存大致分三个逻辑部分:方法区(Method Area)、Java 栈和 Java 堆。
1、方法区是静态分配的,编译器将变量绑定在某个存储位置上,而且这些绑定不会在运行时改变。常数池,源代码中的命名常量、String 常量和 static 变量保存在方法区。
2、Java Stack 是一个逻辑概念,特点是后进先出。一个栈的空间可能是连续的,也可能是不连续的。 最典型的 Stack 应用是方法的调用,Java 虚拟机每调用一次方法就创建一个方法帧(frame),退出该方法则对应的 方法帧被弹出(pop)。栈中存储的数据也是运行时确定的。
3、Java 堆分配(heap allocation)意味着以随意的顺序,在运行时进行存储空间分配和收回的内存管理模型。 堆中存储的数据常常是大小、数量和生命期在编译时无法确定的。Java 对象的内存总是在 heap 中分配。

java 内存分配

1、基础数据类型直接在栈空间分配;
2、方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收;
3、引用数据类型,需要用 new 来创建,既在栈空间分配一个地址空间,又在堆空间分配对象的类变量;
4、方法的引用参数,在栈空间分配一个地址空间,并指向堆空间的对象区,当方法调用完后从栈空间回收;
5、局部变量 new 出来时,在栈空间和堆空间中分配空间,当局部变量生命周期结束后,栈空间立刻被回收,堆空间区域等待 GC 回收;
6、方法调用时传入的实际参数,先在栈空间分配,在方法调用完成后从栈空间释放;
7、字符串常量在 DATA 区域分配 ,this 在堆空间分配;
8、数组既在栈空间分配数组名称, 又在堆空间分配数组实际的大小!

JVM 的内存结构和内存分配相关推荐

  1. JVM内存结构、内存模型 、对象模型那些事

    作者:Hollis,阿里资深攻城狮 来自:Hollis Java作为一种面向对象的,跨平台语言,其对象.内存等一直是比较难的知识点.而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚.比如本文我 ...

  2. JVM【带着问题去学习 01】什么是JVM+内存结构+堆内存+堆内存参数(逃逸分析)

    1.是什么 (1) 基本概念:可运行 Java 代码的非真实计算机 ,包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回器,堆和一个存储方法域.它运行在操作系统之上,与硬件没有直接的交互. (2) ...

  3. jvm内存结构和内存模型

    JVM内存结构 <深入理解Java虚拟机(第2版)>中的描述是下面这个样子的: JVM的内存结构大概分为: 堆(Heap):线程共享.所有的对象实例以及数组都要在堆上分配.回收器主要管理的 ...

  4. jvm内存结构_2-JVM内存结构

    内存结构 方法区 JDK1.7 之前包含1.7 将方法区称为 Perm Space 永久代 JDK1.8之后包含1.8 将方法区称为 MetaSpace 元空间. 堆(分配内存会大一些) 分配对象.n ...

  5. JVM:JVM内存结构、内存溢出及简单排查思路

    1.JVM内存结构 JVM 的运行时数据区主要包括:堆.栈.方法区.程序计数器等 1.1.程序计数器(PC寄存器) 程序计数器(Program Counter Register)是一块较小的内存空间, ...

  6. JVM之深入理解JVM内存结构(Java内存结构/Java内存区域)、Java内存模型

    Java作为一种面向对象的,跨平台语言,其对象.内存等一直是比较难的知识点.而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚.比如本文我们要讨论的JVM内存结构.JAVA内存结构.JAVA内存 ...

  7. java 栈内存结构_JVM内存结构概念解析

    一. Java 内存结构 Java代码运行在虚拟机上,虚拟机在运行过程将程序(也就是进程)所占有内存分为几个不同的数据区域.不同的区域有不同的职责. Java运行时内存结构图如下: Java运行时内存 ...

  8. java 堆内存结构_JVM内存结构、Java内存模型和Java对象模型

    JVM内存结构 我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途.其中有些区域随着虚拟机进程的启动而存 ...

  9. day06 : 01 Oracle 体系结构概念,内存结构,内存结构(服务器进程和用户进程)

    一    概念: 1. 实例/instance: 后台进程+共享内存 用于管理和控制数据库  数据库/database: 物理文件的集合 为实例提供数据,如数据文件,控制文件,参数文件,日志文件等   ...

  10. java内存模型和内存结构_Java内存模型和优化

    java内存模型和内存结构 总览 许多多线程代码开发人员都熟悉这样的想法,即不同的线程可以对持有的值有不同的看法,这不是唯一的原因,即如果线程不安全,它可能不会看到更改. JIT本身可以发挥作用. 为 ...

最新文章

  1. MFC Timer定时器
  2. c 字符串转数字_C语言实现十进制转216进制、十六进制转十进制
  3. 【渝粤题库】陕西师范大学201981教育统计与测量 作业 (专升本、高起本)
  4. 我的NopCommerce之旅(4): 定时任务之邮件
  5. 瞬间读懂什么是互联网思维、大数据、O2O、众筹、红海
  6. Python列表排序 list.sort方法和内置函数sorted
  7. 如何为***选择合适的动态密码双因素认证方案
  8. 小程序组件库开发之车牌号专属键盘
  9. python黑帽编程视频_Python黑帽编程 3.4 跨越VLAN详解
  10. java -为什么重写equals(),还需要重写hashCode()?
  11. MVC如何分离Controller与View在不同的项目
  12. 任玉刚【Android开发艺术探索】读后笔记三
  13. Java LDAP统一身份认证
  14. 怎么把java程序打包?java源代码打包方法
  15. SHFileOperation 用法
  16. HDU 2825 AC自动机+状压dp
  17. Shape Shifter——制作简单动画
  18. 我的阴阳两界:革命时期的爱情--王小波
  19. 读懂python代码_【坚持】Selenium+Python学习之从读懂代码开始 DAY6
  20. 分治算法--L型骨牌棋盘覆盖

热门文章

  1. SAP CK40N常见问题
  2. 离职后,我们该如何处理社保!
  3. MRP区域“MRP Area”的定义以及作用
  4. SAP 年结(转载)
  5. 年入百万还是低龄低收入?9.04亿网民的真实面目,都藏在这些数据里
  6. 五一商圈之外,红星商圈再塑长沙商圈第二极
  7. mysql 检查哪些项目_mysql根据内容查询在哪个表.go
  8. python如何创建函数对列表里的元素进行分类_列表(List)操作方法详解
  9. error: a label can only be part of a statement and a declaration is not a statement
  10. linux高通平台代码,高通linux系统初始化