栈空间内存、堆空间内存和方法区内存

​ 在学习Java的过程中,我们知道,我们编译出的class文件,需要加载到内存中才可以运行。在Java中,有三个很重要的内存空间:栈内存空间、堆内存空间以及方法区内存空间。今天,我就来谈一下我对于这三个内存空间的一些理解吧。


​ 首先,我们先来讲一下,什么是栈内存空间、堆内存空间、方法区内存空间。

  • 栈内存空间:

​ 栈是一种数据结构,特点是后进先出,意思是最后进入的数据会最先被读取。在栈内存空间中,存储的是方法以及局部变量。当方法被执行时,栈内存空间中就会为其分配内存,此时方法就会进入栈空间执行,称为压栈。当方法执行结束后,就会释放空间,称为弹栈,此时方法就会退出栈内存空间。方法一定是压栈和弹栈!

  • 堆内存空间

​ 堆内存空间是一块比栈内存空间大得多的空间,主要用于储存java程序中产生的对象。比如在程序中遇到new关键字,就会产生一个对象实例,这个对象实例会被存储在堆内存空间中。

  • 方法区内存空间

​ 方法区内存空间中保存的是代码片段、常量以及static修饰的变量。在jdk1.7以前,方法区内存空间中还存在一个常量池来储存常量(其中包含了String),在jdk1.8以后,常量池从方法区中移除,在堆区增加了元数据空间。


实例

  • 代码
public class Test
{public static void main(String[] args){Test res = new Test();res.test();}public void test(){int a = 10;System.out.println(a);}
}
  • 内存区示意图

栈内存空间中所有方法执行结束后,都会弹栈,释放内存。

栈空间内存和堆空间内存相关推荐

  1. java堆内存和堆外内存_Java堆空间,本机堆和内存问题

    java堆内存和堆外内存 最近,我正在和一个朋友讨论为什么Java进程使用的内存比启动Java进程时设置的最大堆多. 代码创建的所有Java对象都是在Java堆空间内创建的,其大小由-Xmx选项定义. ...

  2. 浅谈Java堆内内存、堆外内存、直接内存、用户空间和内核空间

    我们都知道Java中大多数的对象都存在于堆内存中,那什么是堆外内存.直接内存?它们又分别用来做什么?分布在用户空间还是内核空间? 首先,有个前置知识点,所谓的Java程序,其实可以理解为是用C/C++ ...

  3. Java堆外内存:堆外内存溢出问题排查

    一.堆外内存组成 通常JVM的参数我们会配置 -Xms 堆初始内存  -Xmx 堆最大内存  -XX:+UseG1GC/CMS 垃圾回收器  -XX:+DisableExplicitGC 禁止显示GC ...

  4. java nio 堆外内存_Java堆外内存之突破JVM枷锁

    对于有Java开发经验的朋友都知道,Java中不需要手动的申请和释放内存,JVM会自动进行垃圾回收:而使用的内存是由JVM控制的. 那么,什么时机会进行垃圾回收,如何避免过度频繁的垃圾回收?如果JVM ...

  5. java堆外内存6_Java 堆外内存的使用

    更多 Java 虚拟机方面的文章,请参见文集<Java 虚拟机> 为什么需要使用堆外内存 将长期存活的对象(如 Local Cache )移入堆外内存( off-heap,又名直接内存 d ...

  6. 19.jvm内存结构部分——堆_内存诊断_jmap

    接下来我们给大家介绍一下堆内存的一个诊断. 这里主要先介绍一些堆内存诊断相关的一些工具. 我们接下来会掌握这样几个工具啊, 第一个叫 jps 的工具,它是查看当前系统中有哪些java 进程,并且把它们 ...

  7. Java堆内内存和堆外内存

    1.堆内内存概念 堆内一般指堆内内存,英文全称:on-heap memory (heap:堆,java的内存区) java虚拟机分配非空对象一般就放到堆内内存,并且虚拟机会定期会进行垃圾回收在某些特定 ...

  8. 堆外内存与堆内内存详解

    堆外内存一直是Java业务开发人员难以企及的隐藏领域,究竟他是干什么的,以及如何更好的使用呢?那就请跟着我进入这个世界吧. 一.什么是堆外内存 1.堆内内存(on-heap memory)回顾 堆外内 ...

  9. JVM学习笔记之-堆,年轻代与老年代,对象分配过程,Minor GC、Major GC、Full GC,堆内存大小与OOM,堆空间分代,内存分配策略,对象分配内存,小结堆空间,逃逸分析,常用调优工具

    堆的核心概述 概述 一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域.Java堆区在JVM 启动的时候即被创建,其空间大小也就确定了.是JVM管理的最大一块内存空间. 堆内存的大小是可 ...

最新文章

  1. 用 Python 详解《英雄联盟》游戏取胜的重要因素!
  2. 科技公司高管职位知多少?(转)
  3. NT式驱动和WDM式驱动程序
  4. 计算机网络高分笔记视频,计算机网络高分笔记(整理).pdf
  5. 了解linux内核必读的5本书
  6. springmvc的原理架构,Struts2运行原理,springmvc和Struts2的区别
  7. DLL 的导入与导出
  8. 游戏AI探索之旅:从AlphaGo到MOBA游戏
  9. java 内存数据库 sql_ssm+redis +Maven用于内存数据库 (No Sql)入门demo
  10. python使用pip安装_Python | 如何用pip安装模块和包
  11. MFC开发IM-第八篇、调整各个控件的上下tab顺序
  12. 前端有未来吗?听我娓娓道来!
  13. (转)invalidate()和postInvalidate() 的区别及使用
  14. python小爬虫,爬取文章(知乎专栏)片段
  15. ENVI5.3下载与安装
  16. 回文字符串判断python实现
  17. [RK3566] 通过GM8775 点LVDS屏调试记录
  18. 计算机上没有端口DOT4,dot4_001端口
  19. 2019年6月18号 AndroidStudio+夜神模拟器 搭建Xposed环境
  20. 2016 GDMS全球数字营销峰会在沪胜利召开

热门文章

  1. 生鲜水果微信小程序推广教程归纳
  2. autoit3 run某些exe没有回应
  3. android 新版支付宝遇到的问题 0D0680A8
  4. 【英语学习】【WOTD】obsequious 释义/词源/示例
  5. 项目中的防止同用户异地登录问题
  6. 亚马逊运营主管有哪些岗位要求和能力要求?
  7. 2016年初Android开源项目总结
  8. Pycharm安装第三方库显示 nothing to show问题
  9. ML基础 | 一文详解正态分布(附python实现)
  10. 国企软件开发岗校招指南