• 栈(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堆,栈,方法区的更多相关文章

  1. java 堆 栈 方法区的简单分析

    Java里的堆(heap)栈(stack)和方法区(method) 基础数据类型直接在栈空间分配, 方法的形式参数,直接在栈空间分配,当方法调用完成后从栈空间回收.   引用数据类型,需要用new来创 ...

  2. 从几个sample来学习JAVA堆、方法区、JAVA栈和本地方法栈

    最近在看<深入理解Java虚拟机>,书中给了几个例子,比较好的说明了几种OOM(OutOfMemory)产生的过程,大部分的程序员在写程序时不会太关注Java运行时数据区域的结构: 感觉有 ...

  3. Java 底层机制(JVM/堆/栈/方法区/GC/类加载)

    转载:https://www.jianshu.com/p/ae97b692614e?from=timeline JVM体系结构 JVM是一种解释执行class文件的规范技术.   JVM体系结构 我翻 ...

  4. JVM堆 栈 方法区详解

    一.栈 每当启用一个线程时,JVM就为他分配一个JAVA栈,栈是以帧为单位保存当前线程的运行状态 栈是由栈帧组成,每当线程调用一个java方法时,JVM就会在该线程对应的栈中压入一个帧 只有在调用一个 ...

  5. [二]Java虚拟机 jvm内存结构 运行时数据内存 class文件与jvm内存结构的映射 jvm数据类型 虚拟机栈 方法区 堆 含义

    前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine  ,既然是虚拟机, ...

  6. [转载]JAVA内存分析——栈、堆、方法区 程序执行变化过程

    面向对象的内存分析 参考:http://www.sxt.cn/Java_jQuery_in_action/object-oriented.html :尚学堂JAVA300集-064内存分析详解_栈_堆 ...

  7. java中栈,堆,方法区

    最近在看面试题复习javaee,所以在这里对栈,堆,方法区做一下整理 参考了https://www.cnblogs.com/hqji/p/6582365.html 1.栈 每个线程包含一个栈区,栈中只 ...

  8. JVM之栈、堆、方法区(三)

    一.CPU和内存的交互 今天除夕,祝大家新年快乐,其实,我们知道的,我们的CPU跟内存会有非常频繁的交互,因为如果这个频繁的交互是交给我们的磁盘的话,那么随着我们的CPU运转速度越来越快,那么我们的磁 ...

  9. Java JVM——9.方法区

    前言 方法区是运行时数据区的最后一个部分: 从线程共享与否的角度来看: 大家可能在这里有些疑惑,方法区和元空间的关系到底是怎样的?请往下看,下面会为大家解惑. 栈.堆.方法区的交互关系 下面就涉及了对 ...

随机推荐

  1. java编程思想第四版第十章习题

    第一题 package net.mindview.innerclasses; public class Outer { class Inner { Inner(){ System.out.printl ...

  2. Python3.7.1学习(八) Python访问SQL Server数据库

    一.pip install pymssql即可安装pymssql库 二.Python连接SQL Server数据库     实例代码如下: # -*- coding:utf-8 -*-"&q ...

  3. Linux入门之安装及相关知识。

    一.VMware虚拟机安装与使用 1.1.VMware 简介 VMware是一个虚拟PC的软件,可以在现有的操 作系统上虚拟出一个新的硬件环境,相当于模拟 出一台新的PC.以此来实现在一台机器上真正 ...

  4. python:模块0

    一.模块是更高级的封装: 容器:数据的封装 函数:语句的封装 类   :方法和属性的封装 模块:模块就是程序,即每个.py文件 二.引入 import 模块名 from 模块名 import xx(函 ...

  5. 数据类型-Java基础一-初学者笔记

    初学者笔记 1.Java中的两种类型   在java源代码中,每个变量都必须声明一种类型(type). 有两种类型:primitive type和reference type.引用类型引用对象(ref ...

  6. matlab-汉字unicode编码转换

    str='黑大哥'bianma=unicode2native(str); disp(bianma); pp=native2unicode(bianma);disp(pp)

  7. 2019/12/1 智能硬件实验室(ROS方向)

    浅谈安装ubuntu与ros感想 ubuntu 以前看电脑软件安装管家上的教程尝试在另一台电脑上安装ubuntu(虚拟机上),但是后面遇到了无法解决的问题,放弃了.这次因为选的ros方向,所以昨天在学 ...

  8. 安装anaconda后启动终端头部会有(base)如何解决

    conda config --show conda config --set auto_activate_base False

  9. 盒模型 | CSS权重 | CSS层叠

    span{ color:red;} *{ font-family:"楷体";line-height:2em; font-size:18px;} 盒模型 CSS定义所有的元素都可能拥 ...

  10. Python用正则表达式匹配汉字

    Python用正则表达式匹配汉字 匹配多个汉字,不包括空格 import re res = re.match(r'[\u4E00-\u9FA5]+', '我是 汉字') print(res) # &l ...