【笔记】深入理解 java 虚拟机---运行时数据区域
来源:互联网 发布:数字密码正则表达式js 编辑:程序博客网 时间:2024/06/05 15:26
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两个共享。
如图:
我们的程序都是有线程去执行的,Java代码也是。虚拟机加载字节码文件,分配具体线程去执行机器码,这时就有了 程序计数器,当执行到方法的时候,产生栈帧,一个方法运行需要多大的内存,已经分配好了,线程去跑这个方法,完成入栈到出栈的操作,这时候堆上有,咱的对象。方法区有编译好的类信息和符号引用。然后走完5大区域的线程被销毁。
- 【笔记】深入理解 java 虚拟机---运行时数据区域
- 1. 《深入理解Java虚拟机》Java运行时数据区域
- 【深入理解JAVA虚拟机】之运行时数据区域
- 深入理解java虚拟机学习—运行时数据区域
- 运行时数据区域-《深入理解JAVA虚拟机》
- 深入理解Java虚拟机:运行时数据区域
- 深入理解java虚拟机读书笔记(二): 运行时数据区域
- 深入理解Java虚拟机之一运行时数据区域
- 运行时数据区域--深入理解Java虚拟机
- 深入理解JAVA虚拟机--运行时数据区域
- 深入理解Java虚拟机之运行时数据区域
- 《深入理解java虚拟机 》学习笔记01——运行时数据区域
- 深入理解Java虚拟机 第二章 Java运行时数据区域
- 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域
- 《深入理解JAVA虚拟机》——JVM运行时数据区域
- 深入理解Java虚拟机(读书笔记)——运行时数据区域重点
- 深入理解Java虚拟机笔记---内存区域
- 深入理解Java虚拟机笔记---内存区域
- 阿里云-ubuntu-数据源问题
- Spring AOP中定义切点的详细介绍
- IDA调试安卓程序提示“The debugger could not ...”解决办法
- 线程的生命周期
- python基础语法
- 【笔记】深入理解 java 虚拟机---运行时数据区域
- css中设置边框阴影效果
- 2017年12月14日训练总结
- 基于UTP的Socket编程(基础)
- ionic侧拉实现
- 产品经理内功修炼——如何让用户任性的买买买
- tablayout横向滑动
- 网页复制的几种方法
- 12种视屏播放框架