赞
踩
将class文件加载到方法区中
验证:验证待加载的class文件是否正确,比如验证文件的格式
准备:为static变量分配内存并赋零值
解析:将符号引用解析为直接引用
总结就是,向上查找有没有加载过,再向下确定要不要加载
作用:
Java虚拟机运行程序的过程中,会将管理的内存分成若干不同的数据区域。以JDK1.8为例:
线程私有,随着线程的创建而创建,线程死亡则栈也死亡。结构如图:
每一个方法调用,都有一个栈帧压入栈中;方法结束,则栈帧被弹出。
所以栈帧主要存储方法相关的内容。
public static void main(String[] args) {
int a = 1;
int b = 2;
int c = a + b;
}
代码的计算过程,在局部变量表中,存储a、b各自的值,再将两者的值压入到操作数栈里面。
执行加法的实际行为,就是在操作数栈顶层的两个数字相加得到一个结果,再将结果存入局部变量表的c中。
局部变量表:
操作数栈:
当A方法调用B方法时,用于找到B方法的地址
方法调用结束后应该回到哪个地方
虚拟机栈不需要进行垃圾回收,但会出现StackOverflowError和OutOfMemoryError。
类似虚拟机栈,主要用于存储native方法相关信息
用于存放对象实例和数组。“new出来的东西都在堆里面”
-Xms 指定堆的初始化内存大小
-Xmx 指定堆的最大内存大小
新生代跟老年代占空间比例:1:2
Eden : S0 : S1 = 8 : 1 : 1
逻辑存在,是《Java虚拟机规范》规定的概念,不同的虚拟机有不同的实现,比如JDK1.8之前的永久代,1.8之后的元空间。
方法区用于存储已经被加载过的类相关的信息:类信息、字段信息、方法信息、常量、静态变量、即时编译器编译后的代码缓存等数据
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。