按照线程来分:
私有:虚拟机栈、本地方法栈、程序计数器
共有(共享):堆、方法区
各部分的实际作用:
虚拟机栈:用于存储局部变量表、操作数栈、动态链接、方法出口等信息(栈里面存放的是地址,实际指是堆里面的对象)
本地方法栈:用于管理本地方法的调用,里面没有自己编写的代码逻辑,由native修饰,由C++实现
程序计数器:是一块很小的内存空间,主要用来记录各个线程执行的字节码地址,例如:分支,循环,线程恢复等都依赖于计数器。
堆:Java虚拟机中内存最大的一块,是被所有线程共享的,几乎所有的对象的实例都在这里分配内存
方法区:(元空间和永久代【1.7之前,在1.8之后被移除】)用于存放已被虚拟机加载的类信息,常量,静态变量、方法。