jvm 运行时数据区
1.线程私有
1.1 程序计数器(pc寄存器)
前提条件:线程只负责干活,不负责思考跟记录
作用:当前线程正在执行的字节码的行号
1.2 栈
虚拟机栈 一个方法一个栈帧
1.局部变量表(存放方法中的局部变量)
2.操作数栈(变量运行过程中数据的中转)
3.动态链接(运行时的多态)
4.出口(出栈:正常/异常)
......
本地方法栈
带有native方法的,java给你提供的,c语言编写的
2.线程共享
2.1 堆 - 对象的实例,字符串常量池从jdk1.7之后都是在堆里
2.2 方法区(jdk1.8之前实现方式叫永久代,jdk1.8之后实现方式叫元空间)
元空间在电脑内存中:
运行时常量池(class常量池,class文件在内存中运行,最终叫运行时常量池)
类的信息...
字面量:int a = "abc"; abc就是字面量
引用符号:引用关系
Java对象的组成
对象头:gc的年龄,锁的指针,引用关系
对象实例:
数据填充:对象必须是8字节的倍数,不够就进行填充
栈上分配:
是不是所有的对象实例都在堆中?不是
方法逃逸:默认开启
变量没有逃出方法的范围
栈上分配,将一个对象拆分为基本数据类型
本文详细介绍了Java虚拟机(JVM)的运行时数据区,包括线程私有的程序计数器、虚拟机栈和本地方法栈,以及线程共享的堆和方法区。在虚拟机栈中,每个方法对应一个栈帧,包含局部变量表、操作数栈、动态链接和出口。方法区则包含了运行时常量池等信息。此外,还讨论了Java对象的组成和栈上分配策略。
1658

被折叠的 条评论
为什么被折叠?



