浅析Java堆,栈,方法区
栈(Stack)
1.栈是线程私有的,其生命周期和线程相同。
2.每个方法在执行的时候都会开辟一个栈区,同时创建一个栈帧(Stack Frame)。
3.栈帧用于存储局部变量表,操作数栈,动态链接和方法出口等信息。
4.局部变量表中存放两种数据类型:
①基本数据类型:boolean ,byte, short, int , char, float , long, double。
②引用数据类型:对象的引用,而非对象本身,比如 String s = new String() ,局部变量表中存放的就是 s , 而 new String() 是存放在堆中。此处的 s 是一个指向对象起始地址的引用指针。
5.每个方法的调用到结束,对应着栈帧在虚拟机的栈中从入栈到出栈的过程。
堆(Heap)
1.堆是被所有线程共享的内存区域,在虚拟机启动的时候创建,是虚拟机中最大的内存块。
1.堆是线程共享,也是虚拟机中最大的内存块,在虚拟机启动时创建。
2.用于存放对象,几乎所有的对象都在这里分配内存。
(由于JIT编译器的发展和逃逸分析技术的成熟,栈上分配,标量替换使得并不是所有对象都在堆中分配。)
3.堆是垃圾收集器管理的主要区域,有时候也叫做
GC堆。4.堆的内存在物理上不是连续的,速度较慢,但是逻辑上是连续的,分配灵活,可扩展。
方法区(Method Area)
1.方法区又叫静态区,是线程共享的内存区域。
2.用于存储被虚拟机加载的类信息,字符常量,静态变量,静态方法。
3.要求被加载的内容是不可变或者唯一的。(类信息,字符常量,静态变量等。)
4.官方虽然把方法区描述为堆的一个逻辑部分,但是他并不是真正意义上完全属于堆,
他还有一个名字Non-Heap。其目的就是为了和堆进行区分。
运行时常量池(Runtime Constant Pool Table)
1.是方法区的一部分。
2.运行时常量池具有动态特性,在运行期间也可将新的常量送入常量池中,比如String类中 的inter()方法。
说在最后
1.码字不易,欢迎关注和转发,转发请注明出处,感谢支持。
2.部分内容参考自《深入理解java虚拟机》一书。
浅析Java堆,栈,方法区的更多相关文章
- java 堆 栈 方法区的简单分析
Java里的堆(heap)栈(stack)和方法区(method) 基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收. 引用数据类型,需要用new来创 ...
- 从几个sample来学习JAVA堆、方法区、JAVA栈和本地方法栈
最近在看<深入理解Java虚拟机>,书中给了几个例子,比较好的说明了几种OOM(OutOfMemory)产生的过程,大部分的程序员在写程序时不会太关注Java运行时数据区域的结构: 感觉有 ...
- Java 底层机制(JVM/堆/栈/方法区/GC/类加载)
转载:https://www.jianshu.com/p/ae97b692614e?from=timeline JVM体系结构 JVM是一种解释执行class文件的规范技术. JVM体系结构 我翻 ...
- JVM堆 栈 方法区详解
一.栈 每当启用一个线程时,JVM就为他分配一个JAVA栈,栈是以帧为单位保存当前线程的运行状态 栈是由栈帧组成,每当线程调用一个java方法时,JVM就会在该线程对应的栈中压入一个帧 只有在调用一个 ...
- [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义
前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine ,既然是虚拟机, ...
- [转载]JAVA内存分析——栈、堆、方法区 程序执行变化过程
面向对象的内存分析 参考:http://www.sxt.cn/Java_jQuery_in_action/object-oriented.html :尚学堂JAVA300集-064内存分析详解_栈_堆 ...
- java中栈,堆,方法区
最近在看面试题复习javaee,所以在这里对栈,堆,方法区做一下整理 参考了https://www.cnblogs.com/hqji/p/6582365.html 1.栈 每个线程包含一个栈区,栈中只 ...
- JVM之栈、堆、方法区(三)
一.CPU和内存的交互 今天除夕,祝大家新年快乐,其实,我们知道的,我们的CPU跟内存会有非常频繁的交互,因为如果这个频繁的交互是交给我们的磁盘的话,那么随着我们的CPU运转速度越来越快,那么我们的磁 ...
- Java JVM——9.方法区
前言 方法区是运行时数据区的最后一个部分: 从线程共享与否的角度来看: 大家可能在这里有些疑惑,方法区和元空间的关系到底是怎样的?请往下看,下面会为大家解惑. 栈.堆.方法区的交互关系 下面就涉及了对 ...
随机推荐
- hdu 5495 LCS (置换群)
Sample Input231 2 33 2 161 5 3 2 6 43 6 2 4 5 1 Sample Output24 C/C++: #include <map> #includ ...
- 力扣(LeetCode)旋转字符串 个人题解
给定两个字符串, A 和 B. A 的旋转操作就是将 A 最左边的字符移动到最右边. 例如, 若 A = 'abcde',在移动一次之后结果就是'bcdea' .如果在若干次旋转操作之后,A 能变成B ...
- HTML的footer置于页面最底部
vue项目中,使用element-ui的布局,仍然出现footer不固定页面底部的情况,网上找到的一个管用的 方法是:footer高度固定+绝对定位 <html> <head> ...
- vue—自定义指令
今日分享—自定义指令 需要学习的点: modifiers属性的具体实例就是v-on:click.stop=”handClick” 一样,为指令添加一个修饰符. 全局指令:新建一个newDir.js i ...
- Django使用mysql数据的流程
创建一个mysql数据库 1.打开终端(cmd): 输入: mysql -uroot -p 密码:*** 输入: create database 数据库名字; 2.在settings中进行配置 DAT ...
- SpringBoot 项目脚手架
写在前面 之前也一直很少有写SpringBoot项目相关的文章,今天 准备整理一个我自己初始化SpringBoot项目时的一个脚手架,便于自己后面查阅.因为SpringBoot的约定大于配置,在整合各 ...
- c#-PropertyChangingEventArgs
MSDN 解释连接:https://msdn.microsoft.com/zh-cn/library/system.eventargs.aspx#inheritanceContinued[Serial ...
- 【洛谷P1835】素数密度
题目描述: 给定区间[L,R](L≤R≤2147483647,R-L≤1000000),请计算区间中素数的个数. 思路: 暴力: 蒟蒻:哦?绿题?这么水?(便打出下面代码) 这绝对是最容易想到的!但, ...
- 一个有意义的Day类
早晨去单位的路上听到电台里在说“Everyday is a new chance to change your life”,正好最近在学Python类的使用方法,于是我编了一个关于Day的类,以供参考 ...
- Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: REFERENCES command denied to user 'nali'@'localhost' for table 'dbs'
按照教程 Install hive on Mac with Homebrew,在 mac 上安装 Hive 时, 最后执行 hive 命令后,出现错误: Exception in thread &qu ...