JVM 的内存结构和内存分配
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 的内存结构和内存分配相关推荐
- JVM内存结构、内存模型 、对象模型那些事
作者:Hollis,阿里资深攻城狮 来自:Hollis Java作为一种面向对象的,跨平台语言,其对象.内存等一直是比较难的知识点.而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚.比如本文我 ...
- JVM【带着问题去学习 01】什么是JVM+内存结构+堆内存+堆内存参数(逃逸分析)
1.是什么 (1) 基本概念:可运行 Java 代码的非真实计算机 ,包括一套字节码指令集.一组寄存器.一个栈.一个垃圾回器,堆和一个存储方法域.它运行在操作系统之上,与硬件没有直接的交互. (2) ...
- jvm内存结构和内存模型
JVM内存结构 <深入理解Java虚拟机(第2版)>中的描述是下面这个样子的: JVM的内存结构大概分为: 堆(Heap):线程共享.所有的对象实例以及数组都要在堆上分配.回收器主要管理的 ...
- jvm内存结构_2-JVM内存结构
内存结构 方法区 JDK1.7 之前包含1.7 将方法区称为 Perm Space 永久代 JDK1.8之后包含1.8 将方法区称为 MetaSpace 元空间. 堆(分配内存会大一些) 分配对象.n ...
- JVM:JVM内存结构、内存溢出及简单排查思路
1.JVM内存结构 JVM 的运行时数据区主要包括:堆.栈.方法区.程序计数器等 1.1.程序计数器(PC寄存器) 程序计数器(Program Counter Register)是一块较小的内存空间, ...
- JVM之深入理解JVM内存结构(Java内存结构/Java内存区域)、Java内存模型
Java作为一种面向对象的,跨平台语言,其对象.内存等一直是比较难的知识点.而且很多概念的名称看起来又那么相似,很多人会傻傻分不清楚.比如本文我们要讨论的JVM内存结构.JAVA内存结构.JAVA内存 ...
- java 栈内存结构_JVM内存结构概念解析
一. Java 内存结构 Java代码运行在虚拟机上,虚拟机在运行过程将程序(也就是进程)所占有内存分为几个不同的数据区域.不同的区域有不同的职责. Java运行时内存结构图如下: Java运行时内存 ...
- java 堆内存结构_JVM内存结构、Java内存模型和Java对象模型
JVM内存结构 我们都知道,Java代码是要运行在虚拟机上的,而虚拟机在执行Java程序的过程中会把所管理的内存划分为若干个不同的数据区域,这些区域都有各自的用途.其中有些区域随着虚拟机进程的启动而存 ...
- day06 : 01 Oracle 体系结构概念,内存结构,内存结构(服务器进程和用户进程)
一 概念: 1. 实例/instance: 后台进程+共享内存 用于管理和控制数据库 数据库/database: 物理文件的集合 为实例提供数据,如数据文件,控制文件,参数文件,日志文件等 ...
- java内存模型和内存结构_Java内存模型和优化
java内存模型和内存结构 总览 许多多线程代码开发人员都熟悉这样的想法,即不同的线程可以对持有的值有不同的看法,这不是唯一的原因,即如果线程不安全,它可能不会看到更改. JIT本身可以发挥作用. 为 ...
最新文章
- MFC Timer定时器
- c 字符串转数字_C语言实现十进制转216进制、十六进制转十进制
- 【渝粤题库】陕西师范大学201981教育统计与测量 作业 (专升本、高起本)
- 我的NopCommerce之旅(4): 定时任务之邮件
- 瞬间读懂什么是互联网思维、大数据、O2O、众筹、红海
- Python列表排序 list.sort方法和内置函数sorted
- 如何为***选择合适的动态密码双因素认证方案
- 小程序组件库开发之车牌号专属键盘
- python黑帽编程视频_Python黑帽编程 3.4 跨越VLAN详解
- java -为什么重写equals(),还需要重写hashCode()?
- MVC如何分离Controller与View在不同的项目
- 任玉刚【Android开发艺术探索】读后笔记三
- Java LDAP统一身份认证
- 怎么把java程序打包?java源代码打包方法
- SHFileOperation 用法
- HDU 2825 AC自动机+状压dp
- Shape Shifter——制作简单动画
- 我的阴阳两界:革命时期的爱情--王小波
- 读懂python代码_【坚持】Selenium+Python学习之从读懂代码开始 DAY6
- 分治算法--L型骨牌棋盘覆盖
热门文章
- SAP CK40N常见问题
- 离职后,我们该如何处理社保!
- MRP区域“MRP Area”的定义以及作用
- SAP 年结(转载)
- 年入百万还是低龄低收入?9.04亿网民的真实面目,都藏在这些数据里
- 五一商圈之外,红星商圈再塑长沙商圈第二极
- mysql 检查哪些项目_mysql根据内容查询在哪个表.go
- python如何创建函数对列表里的元素进行分类_列表(List)操作方法详解
- error: a label can only be part of a statement and a declaration is not a statement
- linux高通平台代码,高通linux系统初始化