美文网首页
java堆,栈,方法区

java堆,栈,方法区

作者: setone | 来源:发表于2018-08-16 09:38 被阅读0次
栈区:

每个线程包含一个栈区,栈中只保存方法中(不包括对象的成员变量)的基础数据类型和自定义对象的引用(不是对象),对象都存放在堆区中每个栈中的数据(原始类型和对象引用)都是私有的,其他栈不能访问。栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。

堆区:

存储的全部是对象实例,每个对象都包含一个与之对应的class的信息(class信息存放在方法区)。jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身,几乎所有的对象实例和数组都在堆中分配。

方法区:

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

方法区(非堆):是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

java堆:是虚拟机中所管理的内存中区域最大的一块,是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。java堆是垃圾收集器管理的主要区域。

java虚拟机栈:线程私有的,它的生命周期与线程相同。每个方法被执行的时候都会同时创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机中从入栈到出栈的过程。

代码执行的时候是执行一个方法,执行完,返回方法的上一个代码块继续往下执行后面的内容。这样的话是不是就是一个栈结构了?

先进后出。方法一边执行,一边往栈里面存数据,等执行完了就取出数据(取出的是返回值,是最后一个存进去的 栈结构是后进先出),

然后执行外面的代码。这么说你可能不明白,我给你举个例子。

int sub(int a,int b){

return a+b;

}

int c = sub(2,3);//注意执行这条语句的时候是不是执行了一个方法?

//那么语句执行的时候是要从左往右执行的对吧,但是事实的逻辑却是先算出来sub(2,3)这个方法的返回值(5)赋值给 c ,

那么这个怎么实现,肯定是一个栈的数据结构,编译的时候先把”int c = “入栈,然后再把 sub(2,3),入栈,执行的时候,从栈里面取,

取的第一个肯定是sub(2,3)吧?于是就计算出等于5,继续取,取出了int c =,然后就和5对接上了,

就把值赋给c了。这只是一个小例子。

道理是这样,但是具体的存取可不是这样的哦。具体的存取应该分的非常细腻,

应该是按照java语法的最小单位来往栈里存取的。说白了一句话,程序运行的时候的先后顺序是跟人大脑想问题的顺序一样的,

但是代码不是按照这样的顺序写的(从左到右),于是就用栈结构来达到这样的效果。

相关文章

  • JVM数据区域及各区域作用

    方法区/程序计数器/Java虚拟机栈/本地方法栈/堆

  • JVM运行时数据区

    线程共享:Java堆,方法区线程私有:本地方法栈,Java虚拟机栈,程序计数器 Java堆:存放的就是我们new出...

  • Jvm内存模型与垃圾回收

    内存模型 JVM内存空间包含:方法区、java堆、java栈、本地方法栈。 方法区是各个线程共享的区域,存放类信息...

  • 100字写点东西_JVM_20180002

    java内存模型-线程私有内存区-虚拟机栈-本地方法栈-程序计数器-线程共享内存区-堆内存-方法区 java类加载...

  • [安卓开发日记] 内存模型和GC

    一 、JAVA内存主要分5块:堆 - 方法区 - 程序计数器 - 本地方法栈 - 虚拟机栈 堆 和 方法区 这两块...

  • JVM 内存介绍

    和jvm(Java Virtual Machine)相关的内存,一般分为栈区、堆区、方法区(永久区)等。 一、栈区...

  • Java内存区域

    Java运行时数据区包括: 方法区 虚拟机栈 本地方法栈 堆 程序计数器

  • Java中的堆内存、栈内存和方法区总结[转]

    Java内存管理堆内存栈内存方法区 Java中内存分成两种,一种叫做栈内存,一种叫做堆内存。还有一个方法区,也...

  • Java面试-JVM问题整理

    1.java运行时数据区,包括堆,虚拟机栈,程序计数器,方法区,本地方法栈 堆:所有对象都在堆中 虚拟机栈:本地变...

  • 16-方法区

    一、栈、堆、方法区 方法区(Method Area)与Java堆一样,是各个线程共享的内存区域 方法区在JVM启动...

网友评论

      本文标题:java堆,栈,方法区

      本文链接:https://www.haomeiwen.com/subject/gnqedftx.html