浅析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.方法区
前言 方法区是运行时数据区的最后一个部分: 从线程共享与否的角度来看: 大家可能在这里有些疑惑,方法区和元空间的关系到底是怎样的?请往下看,下面会为大家解惑. 栈.堆.方法区的交互关系 下面就涉及了对 ...
随机推荐
- nyoj 813-对决 (i*j == k)
813-对决 内存限制:64MB 时间限制:1000ms 特判: No 通过数:11 提交数:23 难度:0 题目描述: Topcoder 招进来了 n 个新同学,Yougth计划把这个n个同学分成两 ...
- windows 通过appache链接cgi程序
#!D:\Python27\ print 'Content-type: text/plain' print print 'Hello, world' 出现错误 The server encounter ...
- React传值,验证值的类型和默认值
const ele = <Ff const={'哈哈'} index={55}></Ff> let box = document.querySelector('#app') / ...
- 纯css实现tab导航
仿照这个 实现了一个纯css的导航功能 html <div class="main"> <div id="contain1">列表一内容 ...
- [FPGA]浅谈LCD1602字符型液晶显示器(Verilog)
目录 概述 LCD1602 LCD1602是什么? LCD1602的管脚 RS_数据/命令选择 E_使能 D0-D7 LCD1602有个DDRAM LCD1602还有个CGROM 指令集 清屏 进入模 ...
- 【论文阅读】Where Is My Mirror?
Where Is My Mirror?(ICCV2019收录) 作者: 论文链接: https://arxiv.org/pdf/1908.09101.pdf 1. 研究背景 目前存在的计算机视觉任务 ...
- 借汇编之力窥探String背后的数据结构奥秘
熟悉C++.java.VB等编程语言的朋友都知道String(字符串),它是编程语言中表示文本的数据类型,字符串由若干字符组成的,是所有编程语⾔中⾮常重要的成员.可能很多朋友平时只是使用它,没有仔细研 ...
- C#Windows Forms窗体、按钮-xdd
1.更换窗体图标 方法:单击窗体,更改icon属性. 2.调整窗体打开时默认位置 方法:单击窗体,更改StartPotion属性. 3.修改窗体大小 方法:单击窗体,更改Size属性. 4.设置窗体的 ...
- firefox常用插件总结
当初因为ctf比赛而接触啦firefox,慢慢的在firfox上安装满啦各种插件,今天就想着总结一下,给那些刚玩firefox的朋友一些小小的帮助也是好的. 1:Firebug Firefox强 ...
- Elasticsearch系列---并发控制及乐观锁实现原理
概要 本篇主要介绍一下Elasticsearch的并发控制和乐观锁的实现原理,列举常见的电商场景,关系型数据库的并发控制.ES的并发控制实践. 并发场景 不论是关系型数据库的应用,还是使用Elasti ...