java 内存 中的区域 一共 5种。 分别是 (既然是区域,就是空间,有大小,放数据用的。)
1 程序计数器(Program Counter Register )
当前线程执行字节码的行号计数器。 就是 一个 字节码文件 在虚拟机里被执行的时候,在这个区域内,存放当前线程在当前所执行到的行号,每个线程都有唯一的程序计数器,也必须是这样的。该区域不存在 OutOfMemoryError。(就是一个行号计数器)
2 虚拟机栈 (Java Vritual Machine Stacks )
Java 方法运行的区域。所有Java方法都在这个区域内运行。Java 方法的运行意味着一个栈帧,从虚拟机栈入栈到出栈的过程。 栈帧在Java方法运行时创建,包含 入口信息,出口信息,局部变量表,操作数栈???,动态连接???。其中局部变量表里存放8大基本数据类型。(我以前一直以为栈上只放 8 大基础类型的)
3 本地方法栈 (Native Method Stacks)
同上,不过运行的native 方法。
4 堆 (Heap)
对象的创建,都在这里分配内存。(面向对象编程的对象就在这里) 最大的内存区域。又被成为GC(Grabage Collection Heap) ,小名 垃圾堆。可细分为 新生代和老年代。还可继续细分,没接触过,比较陌生就不写了。所有线程共享。GC主要作用域。
5 方法区(Method Area)
存放 被虚拟机加载过的常量,类信息,静态变量,即使编译器编译后的代码???。 小名 永久代。包括运行时常量池(Constant Pool Table),存放编译器生成的字面量?????和符号引用????。
总结,5大区域,3个线程私有,2两个共享。
如图:
网友评论