Java-JVM(一)基础
目录
- 简介
- 字节码技术
- 类加载器
- 内存模型
1、简介
1、Java-GC:内存管理 + 垃圾回收
2、编程语言演变:机器语言-》汇编语言 -》高级语言
3、字节码+类加载器+虚拟机内存:Java文件通过编译器成字节码文件,字节码文件通过虚拟机的类加载器加载到虚拟机内部,再转化成对象实例
2、字节码技术
1、概念:由单字节的指令组成的操作码集
2、分类:栈操作指令、程序流程控制指令、对象操作指令、算数运算以及类型转换指令
3、生成/查看字节码指令
1、编译:javac demo/jvm0104/HelloByteCode.java
2、查看字节码:javap -c demo.jvm0104.HelloByteCode
3、类加载器
1、类的生命周期:加载class、校验、准备、解析、初始化、使用、卸载
2、类的加载时机:main、new、静态方法、静态字段、子类初始化父类、接口定义default、反射类调用、MethodHandle
3、不会初始化(可能会加载):子类引用父类的静态字段、对象数组、常量所在的类、类名获取class对象、Class.forname参数、Classloader的loadClass方法
4、三类加载器:启动、扩展、应用
4、内存模型
1、Stack栈:线程与方法线程栈
1、特点
1、栈访问范围:只能访问自己内部
2、栈之间沟通:变量副本沟通
2、原生类型存于栈
1、引用地址存于栈,实际对象存于堆
2、方法栈:每启动一个线程就会产生一个方法栈,每一个方法就是一个栈帧,保存在栈里面
2、heap堆-共享堆
1、特点
1、保存所有对象
2、对象的成员变量、对象引用都存于堆
3、类的静态变量、类定义存于堆
2、分区:年轻代(E、S1、S2)、老年代
3、Non-Heap 非堆
1、特点:属于堆,但是不归GC管理
2、持久代(常量池、方法区)、CCS、JIT