Java虚拟机学习笔记
【摘要】 基本知识 虚拟机的好处跨平台、可移植性提供了托管环境(managed runtime)垃圾回收内存管理动态检测(数组越界、动态类型、安全权限) 虚拟机内存线程共享方法区堆区线程私有PC寄存器Java方法栈本地方法栈 java程序执行方式解释执行即时编译(Just-In-Time) Java类加载 加载过程加载。双亲委派模型:父加载器找不到时才会由当前加载器尝试加载启动类加载器(bootst...
基本知识
虚拟机的好处
- 跨平台、可移植性
- 提供了托管环境(managed runtime)
- 垃圾回收
- 内存管理
- 动态检测(数组越界、动态类型、安全权限)
虚拟机内存
- 线程共享
- 方法区
- 堆区
- 线程私有
- PC寄存器
- Java方法栈
- 本地方法栈
java程序执行方式
- 解释执行
- 即时编译(Just-In-Time)
Java类加载
加载过程
- 加载。双亲委派模型:父加载器找不到时才会由当前加载器尝试加载
- 启动类加载器(bootstrap class loader): C++实现,没有对应的java对象
- 其他类加载器:java.lang.ClassLoader的子类
- 扩展类加载器(extension class loader)
- 应用类加载器(application class loader):扩展类加载器的子类
- 链接
- 验证:类满足虚拟机的约束条件
- 准备
- 为静态字段分配内存
- 生成符号引用。实现虚方法的动态绑定的方法表
- 解析:符号引用解析为实际引用
- 初始化
- static final基本类型或字符串类型字段赋值
- 调用clinit方法,加锁保证只被执行一次
加载方式
- 数组类:虚拟机直接生成
- 接口、类:查找字节流,进行加载
- 泛型:编译时直接擦除
虚拟机方法调用
方法调用指令
- invokestatic: 静态方法调用
- invokespecial: 私有实例方法、构造方法、super调用的方法、接口default方法
- invokevirtual: 非私有实例方法
- invokeinterface: 接口方法
- invokedynamic: 动态方法
虚方法调用
- invokevirtual和invokeinterface指令都属于虚方法调用指令
- 动态绑定:根据调用者的动态类型,确定虚方法调用的目标方法
- 虚方法调用如果指向final方法,便可以进行静态绑定
方法表
- 类加载的链接阶段的准备步骤,会构造和类相关联的方法表。
- 方法表是一个数组,每一个元素指向一个非私有的实例方法
- 子类方法表包含父类方法表的所有方法
- 子类方法的索引值,与它重写的父类方法的索引值相同
异常处理
基本概念
- Throwable: 异常基类
- Error: 程序不应捕获的异常
- Exception: 可能需要捕获并处理的异常
- RuntimeException
- RuntimeException和Error是非检查异常,其他是检查异常
异常捕获
- 构造异常时虚拟机需要访问线程的java栈帧,构建栈轨迹
- 字节码中,每一个方法都附带一个异常表。其中的每一个条目代表一个异常处理器
- 编译finally代码块时,Java编译器会复制finally代码块的内容,分别放在try-catch代码块所有正常执行路径以及异常执行路径的出口中。
反射
反射的应用
- IDE根据点号动态展示字段或方法
- Java调试器,枚举某一对象所有字段的值
- 依赖反转
反射调用的实现
- Method.invoke底层交给MethodAccessor来处理
- MethodAccessor有三个实现,委派实现的底层可以是本地实现或动态实现
- 委派实现(DelegatingMethodAccessorImpl):反射调用超过15次后,将从本地实现切换为动态实现
- 本地实现(NativeMethodAccessorImpl):仅调用一次快于动态实现
- 动态实现(GeneratedMethodAccessor1):运行效率快,但生成字节码慢
垃圾回收
回收算法
- 引用计数法
- 可达性分析
垃圾回收的三种方式
- 清除(sweep): 会产生内存碎片(适合老年代)
- 压缩(compact): 受压缩算法性能开销影响较大(适合老年代)
- 复制(copy): 内存区域两等分,对空间使用效率低(适合年轻代)
虚拟机的堆划分
- 新生代
- Eden区
- 两个大小相同的survivor区
- 老年代
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)