美文网首页
内存栈,堆,方法区

内存栈,堆,方法区

作者: 王哈哈哈哈哈 | 来源:发表于2018-09-25 23:03 被阅读0次

栈的特点:

  1. 栈描述的是方法执行的内存模型,每个方法被调用都会创建一个栈帧(存储局部变量,操作数,方法出口等)
  2. JVM为每个线程创建一个栈,用于存放该线程执行方法的信息(实际参数,局部变量)
  3. 栈属于线程私有,不能实现线程间的共享
  4. 栈的存储特性是 先进后出,后进先出
  5. 栈是由系统自动分配,速度快,栈是一个连续的内存空间

堆的特点:

  1. 堆用于存储创建好的对象和数组(数组也是对象)
  2. JVM只有一个堆,被所有线程共享
  3. 堆是一个不连续的内存空间,分配灵活,速度慢

方法区(静态区)的特点:

  1. JVM只有一个方法区,被所有线程共享
  2. 方法区实际也是堆,只是用于存储类,常量相关的信息!
  3. 用来存放程序永远不变或唯一的内容(类信息class对象,静态变量,字符串常量等)

示例:

@Data
public class Student {

    private String id;
    private String name;

    void play(){
        System.out.println("我在玩游戏");
    }

    public static void main(String[] args) {

        Student student = new Student();
        student.id ="1";
        student.name="王哈哈";

        student.play();
    }

}

当类运行时 方法区就加载类的数据,创建一个栈帧,此时空间是这样的


1.png

当类加载 new Student() 时会调用Student类的构造方法,当没有构造方法时JVM会自动创建一个无参构造方法,此时空间是这样的

2.png

运行
student.id ="1"; student.name="王哈哈";
此时空间是这样的name 地址指向字符串 "王哈哈" 地址

3.png

相关文章

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

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

  • Java大佬之学习历程(一)

    基础篇 JVM: ①JVM内存结构: 堆、栈、方法区、直接内存、堆和栈区别, ②JVM参数及...

  • 100字写点东西_JVM_20180002

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

  • JVM相关笔记

    JVM内存模型 JVM主要由堆内存,方法区,程序计数器,虚拟机栈,本地方法栈组成,其中对堆内存和方法区是线程共有的...

  • JVM内存分配-03-01

    JVM主要内存区域有堆、栈、方法区(非堆)。 堆:对象栈:方法,局部变量,对象引用方法区:静态属性,常量,代码块 ...

  • Java 工程师成神之路(2018 年修订版)

    基础篇 1.1 JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别。 Java内存模型 内存可见性、重排...

  • Java程序员需要掌握的技能

    一、基础篇 1.JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别 Java内存模型 内存可见性...

  • JVM内存详解--堆和栈

    JVM内存组成结构 JVM栈由堆、栈、本地方法栈、方法区等部分组成 1)堆 所有通过new创建的对象的内存都在堆中...

  • java基础、进阶、高级到架构的各种知识分类!

    一、基础篇 JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别 Java内存模型 内存可见性、重排序、顺...

  • Java工程师成神之路

    一、基础篇 JVM JVM内存结构 堆、栈、方法区、直接内存、堆和栈区别 Java内存模型 内存可见性、重排序、顺...

网友评论

      本文标题:内存栈,堆,方法区

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