在java中,堆栈和方法区的原理是它的底层运行机制之一,如果能了解透对我们编写java代码会有非常大的帮助,本篇文章就跟小编来了解下。

栈区

在java中,每个线程都会包含一个栈区,且在栈中它只会保存方法的基础数据类型及自定义对象的引用,栈的内存管理不会存在内存回收问题,但堆会,因为堆是随机分配内容的。

Java中的JVM是基于堆栈的虚拟机,在创建每个新线程时都会分配一个堆栈.就是说,对Java程序而言,它的运行就只是通过一些堆栈操作来完成的。

每当线程执行一个方法时,它就会跟着创建一个对应栈帧,并把建立的栈帧压栈。方法执行完毕后,再把栈帧出栈。

由此我们可知,线程与当前所执行的方法对应的栈帧是必定位于Java栈顶部的。因此对于所有的程序设计语言而言,栈这部分空间对开发者来说是不透明的。

堆区

在java中,堆数据区是用来存放对象和数组的,每个对象都包含一个与之对应的class的信息,堆内存是被多个线程共享的。在JVM启动后堆内存会随之创建。堆中只会存放对象本身,不会存放基本类型和对象引用,几乎所有的对象实例和数组都在堆中分配。

方法区

我们一般也叫静态区,它与堆一样是被所有的线程共享的。方法区用于存储已经被虚拟机加载的常量、静态变量、类信息、即时编译器编译后的代码等数据。

方法区实际上来说是一个各个线程共享的内存区域,就是用来存储已经被虚拟机加载完成的各种即时编译器编译后的代码等一些数据。

内存区存放示意图:

以上就是本篇文章的所有内容,更多详细java常见问题及解决方法敬请关注奇Q工具网了解详情。

推荐阅读:

java堆栈方法区_java堆栈方法区详解相关推荐

  1. java final修饰符_java final修饰符详解,final修饰方法

    之前给大家讲过java final修饰符final修饰变量方面的知识,那么下面要继续给大家讲到的就是final修饰方法方面的知识,一起来了解一下吧. final修饰的方法不能被重写,假如因为一些原因, ...

  2. java有返回值的方法回调_java调用回调机制详解

    调用和回调机制 在一个应用系统中, 无论使用何种语言开发, 必然存在模块之间的调用, 调用的方式分为几种: 1.同步调用 同步调用是最基本并且最简单的一种调用方式, 类A的方法a()调用类B的方法b( ...

  3. java虚拟机工作原理_Java虚拟机工作原理详解

    一.类加载器 首先来看一下java程序的执行过程. 从这个框图很容易大体上了解java程序工作原理.首先,你写好java代码,保存到硬盘当中.然后你在命令行中输入: javac YourClassNa ...

  4. java 打印异常内容_java自定义异常打印内容详解

    本文实例为大家分享了java自定义异常打印内容的具体代码,供大家参考,具体内容如下 背景:在开发中,我们可能会使用到自定义异常,但是,这个自定义异常在打印日志时,往往打印的内容比较多. 1.自定义异常 ...

  5. java代码轻量级锁_Java轻量级锁原理详解(Lightweight Locking)

    转自http://www.cnblogs.com/redcreen/archive/2011/03/29/1998801.html 大家知道,Java的多线程安全是基于Lock机制实现的,而Lock的 ...

  6. java单例设计模式_Java设计模式之单例模式详解

    在Java开发过程中,很多场景下都会碰到或要用到单例模式,在设计模式里也是经常作为指导学习的热门模式之一,相信每位开发同事都用到过.我们总是沿着前辈的足迹去做设定好的思路,往往没去探究为何这么做,所以 ...

  7. java的static类_java中staticclass静态类详解

    一般情况下是不可以用static修饰类的.如果一定要用static修饰类的话,通常static修饰的是匿名内部类. 在一个类中创建另外一个类,叫做成员内部类.这个成员内部类可以静态的(利用static ...

  8. Java 初始化 代码块_Java中初始化块详解及实例代码

    Java中初始化块详解 在Java中,有两种初始化块:静态初始化块和非静态初始化块. 静态初始化块:使用static定义,当类装载到系统时执行一次.若在静态初始化块中想初始化变量,那仅能初始化类变量, ...

  9. java connection 单例_Java设计模式之单例模式详解

    Java设计模式之单例模式详解 什么是设计模式 设计模式是在大量的实践中总结和理论之后优选的代码结构,编程风格,以及解决问题的思考方式.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可 ...

  10. java解析json数据_java解析JSON数据详解

    JSON是目前最流行的轻量级数据交换语言(没有之一).尽管他是javaScript的一个子集.但由于其是独立与语言的文本格式,它几乎可以被所有编程语言所支持. 以下是对java语言中解析json数据的 ...

最新文章

  1. 地面标识检测与识别算法
  2. 高斯过程及其家族往事
  3. linux同步工具rsync​
  4. swift_016(Swift 的闭包)
  5. HDU - 4858 项目管理
  6. 栈(顺序存储)C++模板实现
  7. Spring:设置日志依赖项
  8. 论文 参考文献的格式说明
  9. 信息学奥赛C++语言:十位能被个位和百位之和整除
  10. 安卓Service完全解析(中)
  11. android (12) Fragment使用
  12. ESP分区重建,解决各种引导问题
  13. 【译文 Part 1】NEO vs. ETH--为什么NEO可能是2018最强数字货币?
  14. RocketMQ类关系图之broker/store
  15. tbschedule 前后置处理器、定期执行任务
  16. OneNote网页版链接用桌面应用打开报错的解决
  17. 2023年天津天狮学院专升本专业课考试延期的通知
  18. DNS图解(秒懂 + 史上最全)
  19. vant上传图片 转二进制_土旦:移动端 Vue+Vant 的Uploader 实现 :上传、压缩、旋转图片-Go语言中文社区...
  20. C语言-输出最长单词

热门文章

  1. Delphi 法简介
  2. Qt信号和槽机制详解
  3. python求绝对值_python求绝对值
  4. 如果更快的访问ESS系统?
  5. Unity3D 一些工具总结
  6. 这一代系统,真的不行!(一)
  7. 机载Lidar数据滤波方法研究
  8. Python实现熵权法(正负指标)并计算综合评分—————附增完整代码和测试用例
  9. TwinCAT 3 file记录日志txt文件程序
  10. 零基础程序员如何自学编程?用这6种方法就够了!