Java学习总结(1.1.1) Java程序运行原理分析
class是二进流
JVM运行时数据区
线程共享部分
方法区: 存class
堆内存: 存类对象等,全部线程可以访问
线程独占部分
虚拟机栈
本地方法栈
程序计数器
线程独占:独立空间,随线程生命周期创建和销毁
线程共享:全线程可以访问,随虚拟机或GC创建和销毁
JVM用来存储加载的类信息、常量、静态変量、编译后的代码等数据
虚拟机规范中这是一个逻辑区划。具体实现根据不同虚拟机来实现。
如: oracle的 Hotspot在java7中方法区放在永久代,java8放在元数据空间,并且通过GC机制对这个区域进行管理
堆内存还可以细分为:老年代、新生代(Eden、 From Survivor、 To Survivor
JVM启动时创建,存放对象的实例。垃圾回收器主要就是管理堆内存。
如果满了,就会出现 Outofmemroyerror,后续在内存模型中,详细讲解。
虚拟机栈,每个线程都在这个空间有一个私有的空间。
线程栈由多个栈帧( Stack Frame)组成。
一个线程会执行一个或多个方法,一个方法对应一个栈帧
栈帧内容包含:局部变量表、操作数栈、动态链接、方法返回地址、附加信息等。
栈内存默认最大是1M,超出则抛出 Stackoverflowerror
和虚拟机栈功能类似,虚拟机栈是为虚拟机执行JAVA方法而准备的,
本地方法栈是为虚拟机使用 Native本地方法而准备的。
虚拟机规范没有规定具体的实现,由不同的虚拟机厂商去实现。
Hotspot虚拟机中虚拟机栈和本地方法栈的实现式一样的。同样,超出大小以后也会抛出 Stackoverflowerror。
程序计数器( Program Counter Register)记录当前线程执行字节码的位置,存储的是字节码指令地址,如果执行 Native方法,则计数器值为空。
每个线程都在这个空间有一个私有的空间,占用内存空间很少。
CPU同一时间,只会执行一条线程中的指令。
JVM多线程会轮流切换并分配CPU执行时间的方式。
为了线程切換后,需要通过程序计数器,来恢复正确的执行位置
操作:
- 上一篇:
- 下一篇: Java学习总结(1.1.2) 线程状态
每日一句
博客分组
标签云
- 最近综合
- 情绪巨婴是什么 12.18
- 普通蛋糕做法 05.31
- 玉米烤肠芝士面包做法 05.31
- Mysql安装教程 - 绿色版 06.18
- 我们学习知识为什么总是忘记呢?【学习金字塔】 05.12
- Typora开发版⽆法使⽤解决⽅法 05.04
- 为什么无知者越自信? -- 达克效应 05.10
- 马斯洛需求层次理论 04.29
- 随机综合
- Java学习总结(1.1.3) 线程中止 03.17
- Java学习总结(1.2.1) Java内存模型详解 03.18
- Java学习总结(2.1.2) BIO阻塞网络编程 04.17
- Android开发,为什么Android不直接链接mysql数据库 04.12
- Java学习总结(1.2.2) 线程安全之原子操作 03.20
- Java学习总结(1.3.3) 并发容器类2 04.09
- [vue]VUE的一些问题和解决 08.05
- Java学习总结(1.1.6) 线程封闭 03.19