【Java JVM】 字节码指令集
【Java JVM】 字节码指令集Metadatatitle: 【Java JVM】 字节码指令集
date: 2023-06-29 23:00
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/JVM
categories:
- Java
keywords:
- Java/JVM
description: 【Java JVM】 字节码指令集
概述
加载与存储指令
局部变量压栈指令
iload 从局部变量中装载int类型值
lload 从局部变量中装载long类型值
fload 从局部变量中装载float类型值
dload 从局部变量中装载double类型值
aload 从局部变量中装载引用类型值(refernce)
iload_0 从局部变量0中装载int类型值
iload_1 从局部变量1中装载int类型值
iload_2 从局部变量2中装载int类型值
iload_3 从局部变量3中装载int类型值
lload_0 从局部变量0中 ...
【Java JVM】 Class 文件结构
【Java JVM】 Class 文件结构Metadatatitle: 【Java JVM】 Class 文件结构
date: 2023-06-29 22:52
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/JVM
categories:
- Java
keywords:
- Java/JVM
description: 【Java JVM】 Class 文件结构
【Java JVM】 Class 文件结构Class 字节码文件结构
类型
名称
说明
长度
数量
魔数
u4
magic
魔数,识别Class文件格式
...
【Java JVM】 垃圾回收器
【Java JVM】 垃圾回收器Metadatatitle: 【Java JVM】 垃圾回收器
date: 2023-06-29 11:35
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java
categories:
- Java
keywords:
- Java
description: 【Java JVM】 垃圾回收器
概述按线程数分,可以分为串行垃圾回收器和并行垃圾回收器。
评估 GC 的性能指标
吞吐量:运行用户代码的时间占总运行时间的比例(总运行时间 = 程序的运行时间 + 内存回收的时间)
垃圾收集开销:吞吐量的补数,垃圾收集所用时间与总运行时间的比例。
暂停时间:执行垃圾收集时,程序的工作线程被暂停的时间。
收集频率:相对于应用程序的执行,收集操作发生的频率。
内存占用:Java 堆区所占的内存大小。
快速:一个对象从诞生到被回收所经历的时间。
新生代收集器:Serial、ParNew、Parallel Scavenge; ...
【Java JVM】 垃圾回收相关概念
【Java JVM】 垃圾回收相关概念Metadatatitle: 【Java JVM】 垃圾回收相关概念
date: 2023-06-29 11:29
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java
categories:
- Java
keywords:
- Java
description: 【Java JVM】 垃圾回收相关概念
概述System.gc()
会显式触发 Full GC
内存溢出(OOM)
Java 虚拟机的堆内存设置不够。
代码中创建了大量大对象,并且长时间不能被垃圾收集器收集(存在被引用)
内存泄漏(Memory Leak)
只有对象不会再被程序用到了,但是 GC 又不能回收他们的情况,才叫内存泄漏
Stop The World
GC 事件发生过程中,会产生应用程序的停顿。
垃圾回收的并行与并发
并发(Concurrent)
CPU 把一个时间段划分成几个时间片段(时间区间),然后在这几个时间区间之间来回切换 ...
【Java JVM】 垃圾回收概述及算法
【Java JVM】 垃圾回收概述及算法Metadatatitle: 【Java JVM】 垃圾回收概述及算法
date: 2023-06-29 11:15
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/JVM
categories:
- Java
keywords:
- Java/JVM
description: 【Java JVM】 垃圾回收概述及算法
概述
Java 堆是垃圾收集器的工作重点
从次数上讲:
频繁收集 Young 区
较少收集 Old 区
基本不收集 Perm 区(元空间)
垃圾回收相关算法
引用计数算法可达性分析算法
在 Java 语言中,GC Roots 包括以下几类元素:
虚拟机栈中引用的对象
本地方法栈内 JNI(通常说的本地方法)引用的对象
方法区中类静态属性引用的对象
所有被同步锁 synchronized 持有的对象
Java 虚拟机内部的引用。
基本数据类型对应的 Class 对象,一些常驻的异常 ...
【Java JVM】 StringTable
【Java JVM】 StringTableMetadatatitle: 【Java JVM】 StringTable
date: 2023-06-28 20:57
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/JVM
categories:
- Java
keywords:
- Java/JVM
description: 【Java JVM】 StringTable
概述String 再也不用 char[] 来存储了,改成了 byte [] 加上编码标记,节约了一些空间
String 的基本特性
不可变性
字符串拼接操作
常量与常量的拼接结果在常量池,原理是编译期优化
常量池中不会存在相同内容的变量
只要其中有一个是变量,结果就在堆中。变量拼接的原理是 StringBuilder
如果拼接的结果调用 intern()方法,则主动将常量池中还没有的字符串对象放入池中,并返回此对象地址
intern()
intern 是一个 nat ...
【Java JVM】 执行引擎
【Java JVM】 执行引擎Metadatatitle: 【Java JVM】 执行引擎
date: 2023-06-28 18:48
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/JVM
categories:
- Java
keywords:
- Java/JVM
description: 【Java JVM】 执行引擎
概述执行引擎属于 JVM 的下层,里面包括解释器、及时编译器、垃圾回收器
执行引擎的工作流程
执行引擎在执行的过程中究竟需要执行什么样的字节码指令完全依赖于 PC 寄存器。
每当执行完一项指令操作后,PC 寄存器就会更新下一条需要被执行的指令地址。
当然方法在执行的过程中,执行引擎有可能会通过存储在局部变量表中的对象引用准确定位到存储在 Java 堆区中的对象实例信息,以及通过对象头中的元数据指针定位到目标对象的类型信息。
执行引擎的工作流程
JIT 编译器
根据热点探测功能,将有价值的字节码编译为本地机器 ...
【Java JVM】 对象实例化
【Java JVM】 对象实例化Metadatatitle: 【Java JVM】 对象实例化
date: 2023-06-27 22:01
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/JVM
categories:
- Java
keywords:
- Java/JVM
description: 【Java JVM】 对象实例化
概述
对象内存布局
对象的访问定位
对象实例化面试题
美团:
对象在 JVM 中是怎么存储的?对象头信息里面有哪些东西?
蚂蚁金服:
Java 对象头有什么?
创建对象的方式
new:最常见的方式、Xxx 的静态方法,XxxBuilder/XxxFactory 的静态方法
Class 的 newInstance 方法:反射的方式,只能调用空参的构造器,权限必须是 public
Constructor 的 newInstance(XXX):反射的方式,可以调用空参、带参的构造器,权限没有要求
使用 ...
【Java JVM】 方法区
【Java JVM】 方法区Metadatatitle: 【Java JVM】 方法区
date: 2023-06-27 21:38
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/JVM
categories:
- Java
keywords:
- Java/JVM
description: 【Java JVM】 方法区
概述
方法区
各个线程共享的内存区域。
JVM 启动的时候被创建
可以选择固定大小或者可扩展
方法区的大小决定了系统可以保存多少个类
如果系统定义了太多的类,导致方法区溢出
关闭 JVM 就会释放这个区域的内存。
元空间与永久代最大的区别
元空间不在虚拟机设置的内存中,而是使用本地内存
内部结构
模数
版本号
运行时常量池
编译期生成的各种字面量与符号引用
具有动态性
类型信息
完整有效名称
直接父类的完整有效名
访问修饰符
直接接口的一个有序列表
域(Field)信息
域名称、域类型、域修饰符
方法 ...
【Java JVM】 堆
【Java JVM】 堆Metadatatitle: 【Java JVM】 堆
date: 2023-06-27 08:47
tags:
- 行动阶段/完成
- 主题场景/程序
- 笔记空间/KnowladgeSpace/ProgramSpace/BasicsSpace
- 细化主题/Java/JVM
categories:
- Java
keywords:
- Java/JVM
description: 【Java JVM】 堆
概述堆的特性
堆针对一个 JVM 进程来说是唯一的, 所有的线程共享 Java 堆
堆内存的大小是可以调节的。
物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。
所有的对象实例以及数组都应当在运行时分配在堆上。
是 GC(Garbage Collection,垃圾收集器)执行垃圾回收的重点区域。
堆内存细分
Young Generation Space 新生区 Young/New 又被划分为 Eden 区和 Survivor 区
Tenure generation space 养老区 Old/Tenure
Meta ...