基础回答:
共享区:方法区,堆
私有区:程序计数器,虚拟机栈,本地方法栈
解释各区域的作用:
程序计数器:又称pc计数器,是程序运行时的行号指示器,主要用于字节码的分钟,循环,跳转,异常处理等逻辑的处理,是java执行过程种唯一没有outofmemoryerror的区域
虚拟机栈:是局部变量表,操作数栈,动态链接,方法出口等的存储区域。如果存入区域大于栈的深度,则抛出outofmemoryerror;同时如果栈扩展过程种无法申请到足够的内存,则抛出outofmemoryerror
本地方法栈:是native方法区域,错误可能同虚拟机栈
堆:java虚拟机种最大的一块区域,重要用于创建对象,也是垃圾收集的重要区域。一般区分为新生代和老年代,比例默认1:2;新生代又可以分为eden,From survivor,To survivor,比例一般是8:1:1
方法区:是常量,静态变量,即时编译的代码等存放的区域
在jdk8之后,增加了本地内存:元数据区,直接内存
用元数据区代替永久代