java内存

一、JVM运行时数据区域

孤人 提交于 2020-03-16 18:55:19
某厂面试归来,发现自己落伍了!>>> JVM运行时数据区 其中 方法区 和 java堆 为 多线程共用区域 其余为现成私有区域 程序计数器: 当前线程执行的字节码的行号的存放空间,字节码解释器通过改变这个值来获取下一条执行字节码,各条线程都独立,互不影响; 如果正在执行的是Java方法,则在计数器中记录的是虚拟机字节码指令的地址; 若是Native方法,则记录的值为Undefined; 此区域没有规定OutOfMemoryError Java虚拟机栈: 用于存放局部变量 虚拟机栈用于存储编译期可知的基本类型(int、long等)、对象的引用(实例在java堆中地址)和一条字节码指令的地址 栈帧:每个方法执行时会把方法的局部变量、操作数栈、方法出口等信息存到一个栈帧中,即一个方法的执行就是一个栈帧从入栈到出栈的过程 每个方法在编译期会把方法中局部变量所占用的空间进行分配,即在方法执行可以得到的局部变量空间是完全确定的 本地方法栈: 用于存放本地方法(即用native关键字修饰的方法) 虚拟机对于方法的语言、使用方式和数据结构都没有特殊的规定,可有虚拟机自己实现 Java堆: JVM内存管理中最大的一块 用于存放对象实例和数组 垃圾回收的主要区域 方法区(有些地方叫 -- 非堆): 用于存放已经被虚拟机加载的类信息、常量、静态变量等数据 常量池:类信息中的一部分,用于存放字面量