JMM

2019/10/10 posted in  Java

JVM将内存划分为五大块:

  • 堆 (进城内所有线程共享)
  • 方法区(进程内所有线程共享)
  • 虚拟机栈(每个线程独立)
  • native本地方法栈(每个线程独立)
  • pc计数器(每个线程独立) Java中基础数据类型是在栈上分配还是在堆上分配?
    我们继续深究一下,基本数据类占用内存大小是固定的,那具体是在哪分配的呢,是在堆还是栈还是方法区?大家不妨想想看!
    要解答这个问题,首先要看这个数据类型在哪里定义的,有以下三种情况。

如果在方法体内定义的,这时候就是在栈上分配的
如果是类的成员变量,这时候就是在堆上分配的
如果是类的静态成员变量,在方法区上分配的

JVM

栈,就是说的虚拟机栈或者说是虚拟机栈中局部变量表部分,局部变量表存放了编译期可知的各种基本数据类型,对象引用
本地方法栈与虚拟机栈发挥作用非常相似,
堆,Java堆是虚拟机所管理的内存中最大的一块,被所有线程共享,存放对象实例
Java堆是垃圾收集器管理的主要区域
方法区,与Java堆一样,是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息丶常量丶静态变量丶即时编译器编译后的代码等数据,是堆的一个逻辑部分

栈管运行,堆管存储