12 2021 档案
摘要:1.JVM运行时数据区(JVM Runtime Data Area) 1.1 Program Counter (程序计数器) Each Java Virtual Machine thread has its own pc (program counter) register 每个java虚拟机线程都
阅读全文
摘要:1. MarkWord详解 以上是Java对象处于5种不同状态时,Mark Word的表现形式,上面每一行代表对象处于某种状态时的样子。其中各部分的含义如下: lock:2位的锁状态标记位,由于希望用尽可能少的二进制位表示尽可能多的信息,所以设置了lock标记。该标记的值不同,整个Mark Word
阅读全文
摘要:1.volatile的特性 1.多线程之间可见性 2.禁止指令重排序 volatile修饰的内存,不可以重排序,对volatile修饰变量的读写访问,都不可以换顺序 2. volatile和锁的内存语义 从内存语义的角度来说,volatile的写-读与锁的释放-获取有相同的内存效果:volatile
阅读全文
摘要:1. 重排序 在执行程序时为了提高性能,编译器和处理器常常会对指令做重排序。重排序分三种类型 1.编译器优化的重排序。编译器在不改变单线程程序语义的前提下,可以重新安排语句的执行顺序。 2.指令级并行的重排序。现代处理器采用了指令级并行技术(Instruction-Level Parallelism
阅读全文
摘要:1. 什么是JMM 内存模型可以理解为在特定的操作协议下,对特定的内存或者高速缓存进行读写访问的过程抽象描述,不同架构下的物理机拥有不一样的内存模型,Java虚拟机是一个实现了跨平台的虚拟系统,因此它也有自己的内存模型,即Java内存模型(Java Memory Model, JMM)。因此它不是对
阅读全文
摘要:1.类加载流程以及双亲委派机制 1.1 loading 1.1.1 双亲委派机制(设计原因是出于安全考虑) 类加载器范围: Bootstrap加载路径:sun.boot.class.path ExtClassLoader加载路径:java.ext.dirs AppClassLoader加载路径:ja
阅读全文
摘要:1.Class文件结构 2.class文件详解 public class T {} 对应的二进制class文件 在idea jclasslib插件下解析出来的二进制文件 对应的二进制文件解释 常量池解释: 比如:cafe babe 0000 0034 0010 0a00 0300 0d 其中0a转换
阅读全文
摘要:1. java从编码到执行 2. jvm跟java无关,只跟class文件相关 3. javac的过程 4. JDK JRE JVM 5. jvm是一种规范 相关资料 https://docs.oracle.com/en/java/javase/13/ https://docs.oracle.com
阅读全文
摘要:1. 什么是LRU算法 LRU是Least Recently Used的缩写,即最近最久未使用,常用于页面置换算法,是为虚拟页式存储管理服务的。 LRU算法的提出,是基于这样一个事实:在前面几条指令中使用频繁的页面很可能在后面的几条指令中频繁使用。反过来说,已经很久没有使用的页面很可能在未来较长的一
阅读全文
摘要:内存管理的发展历程 DOS时代 - 同一时间只能有一个进程在运行(也有一些特殊算法可以支持多进程) windows9x - 多个进程装入内存 1:内存不够用 2:互相打扰 为了解决这两个问题,诞生了现在的内存管理系统:虚拟地址 分页装入 软硬件结合寻址 分页(内存不够用),内存中分成固定大小的页框(
阅读全文
摘要:1. 进程和线程有什么区别? 进程是OS分配资源的基本单位 线程是执行调度的基本单位。 分配资源最重要的是:独立的内存空间,线程调度执行(线程共享进程的内存空间,没有自己独立的内存空间) 2. 什么是纤程 用户态的线程,线程中的线程,切换和调度不需要经过OS 纤程的优势: 占有资源很少,线程占1M
阅读全文
摘要:1. 基本概念 PC → Program Counter 程序计数器 (记录当前指令地址) Registers → 暂时存储CPU计算需要用到的数据 ALU → Arithmetic & Logic Unit 运算单元 CU → Control Unit 控制单元 MMU → Memory Mana
阅读全文
摘要:1. 什么是UMA UMA——Uniform Memory Access 一致性内存访问 CPU朝着高频方向发展遇到了天花板,转而向着多核心方向发展,由于在一致性内存访问(UMA——Uniform Memory Access)架构中,所有CPU对内存的访问都要通过总线完成,而总线发展缓慢,导致多核C
阅读全文
摘要:1. 操作系统需要两种CPU状态 内核态(Kernel Mode):运行操作系统程序,操作硬件 用户态(User Mode):运行用户程序 2. 指令划分 特权指令:只能由操作系统使用、用户程序不能使用的指令。 举例:启动I/O 内存清零 修改程序状态字 设置时钟 允许/禁止终端 停机 非特权指令:
阅读全文
摘要:1. 概念 大端模式(Big-endian):高位字节排放在内存的低地址端,低位字节排放在内存的高地址端,即正序排列,高尾端; 小端模式(Little-endian):低位字节排放在内存的低地址端,高位字节排放在内存的高地址端,即逆序排列,低尾端; 例(无论是小端模式还是大端模式。每个字节内部都是按
阅读全文
摘要:1. 计算机存储体系简介 存储器是分层次的,离CPU越近的存储器,速度越快,每字节的成本越高,同时容量也因此越小。寄存器速度最快,离CPU最近,成本最高,所以个数容量有限,其次是高速缓存(缓存也是分级,有L1,L2等缓存),再次是主存(普通内存),再次是本地磁盘。 寄存器的速度最快,可以在一个时钟周
阅读全文
摘要:1. Linux更喜欢分页 1.分段可以把逻辑地址分成不同的线性地址,而分页则可以把相同的线性地址映射到不同的页框中。Linux为了能够使所有进程“看到”相同的线性地址而选择非常有限地使用分段机制,这样简化了内存管理的难度。 2.Linux设计的目标是能够移植到多种流行的平台,而使用RISC的处理器
阅读全文
摘要:1. 内存地址 在编程中我们(编译器)为各种数据分配的内存均为逻辑地址,逻辑地址通过操作系统转换为物理地址。在使用Intel 80x86处理器时,应当分清以下三种“地址”: 逻辑地址(logical address) 线性地址(linear address) 物理地址(physical addres
阅读全文
摘要:1. 背景 现代处理器的发展历史上,CPU的性能和内存性能差距逐渐拉大,为了解决这一问题,CPU设置了多级缓存结构,其中较为典型的有L1,L2,L3高速缓存。 其中L1高速缓存具有和寄存器差不多的速度。L1,L2,L3缓存都位于芯片内部,这些缓存我们统称为Cache,下述就不再区分了。由于Cache
阅读全文