第一课JVM
2019-12-11 11:09:16 0 举报
第一课jvm课堂笔记
作者其他创作
大纲/内容
class对象
1、先找到类文件所在的位置:磁盘 全路径 -->使用类装载器(ClassLoader)去寻找类 -->使用双亲委派方式装载(先到祖宗查找是否含有该类,有就不再加载)2、将类文件的信息交给JVM -->将类文件字节码静态存储结构放到JVM里面的某一块区域【方法区】3、将类文件所对应的对象Class交给jvm -->放到堆
Native Method Stacks本地方法栈调用C语言
一个线程的创建代表一个栈每个方法被当前线程调用了,就代表一个栈帧内存不够发生:StackOverflowError
加载 -> 链接 -> 初始化
JVM
Person.java
为静态变量初始化赋真实的值,static int a = 10;
方法区只有一个,线程共享的内存区域【线程非安全】,生命周期和虚拟机一样。垃圾回收不会太讨论方法区的垃圾回收内存不够发生:OutOfMemoryError(OOM)
Java Virtual Machine StacksJava虚拟机栈
运行时数据区 Run-time Data Areas
Persion.class16进制
编译原理 词法分析-->语法分析-->语法树-->字节码生成器-->Persion.class
PC Resgiter程序计数器用于记录栈帧的位置
栈
javac编译
Thread Stack
装载
Method Area方法区
数组
Heap堆
初始化
链接
常量
私有区域 线程安全
堆只有一个,线程共享的内存区域【线程非安全】,生命周期和虚拟机一样。内存不够发生:OutOfMemoryError(OOM)
共享区域 非线程安全
类的信息
栈帧
静态变量
1、验证【正确性】,验证类的正确性,加载器文件格式、元素、字节码等等是否正确2、准备,要为类的静态变量分配内存空间,并将该静态变量值初始化默认值(0) static int a=10; --- a = 0;3、解析,将类中的符号引用转变为直接引用:符号引用(class文件的符号)->直接引用(内存中对应的某一个真实地址),class的符号
源码----类文件
类加载机制
运行时常量池
0 条评论
回复 删除
下一页