执行引擎-前端编译器
前端编译器
Read more
栈空间-本地方法栈
本地方法栈:::primary 参考博客:java调用本地方法–jni简介 ::: 什么是本地方法? 定义:[采用非 Java 代码实现的“接口”]{.red} 本地方法并不需要采用 Java 实现,[类似于]{.blue} 接口和抽象类中的方法 但是本地方法依然会采用其他语言具体实现,所以也只是类似于接口和抽象类 // 本地方法是没有方法体的,也就没有具体的实现,类似于接口和抽象类 ...
Read more
堆空间-概述
堆空间概述 什么是堆空间? 定义:虚拟机中 [最大的存储空间]{.red} 作用:[存放所有被创建的对象和数组的空间]{.red} +++danger 对象一定被分配在堆空间中吗? 逃逸分析 +++ 特点: [堆空间可以处于物理上并不连续的内存空间中]{.red} 物理上不连续:操作系统采用了虚拟内存技术,所以分配给虚拟机的内存显然是不连续的 逻辑上连续:虚拟机的使用者并 ...
Read more
反射机制
反射机制:::warning 反射机制是非常难解释清楚的,主要原因有如下几个 反射机制概念本身就很抽象,难以理解其概念 反射机制在初学时使用的机会很少,因为初学者甚至都没有类加载的概念 反射机制涉及到虚拟机中类加载的概念,在各个框架中也有很广泛的应用,没有这些的基本了解真的很难理解 我会尽可能将反射最基础的内容和虚拟机联系起来 ::: :::primary 参考博客:Java基础篇:反射机 ...
Read more
字符串常量池
字符串常量池
Read more
方法区
方法区概述 定义:虚拟机中独立于堆空间的较大存储空间 作用:[存放所有和 类相关的信息 ]{.red} 实现方式: 永久代(PermSpace):[方法区使用的虚拟机的内存]{.red} 元空间(MetaSpace):[方法区直接使用操作系统提供的物理内存]{.red} +++danger 为什么要采用元空间实现方法区而不是永久代呢? ① 官方文档中的解释非常模糊:因为被收购的 J ...
Read more
堆空间-直接内存
Read more
进程加载
进程加载前提:基于硬件的语言编写的程序(Java 编写的程序是在虚拟机上运行的 -> 存在一定的出入) 编译 定义: 编译程序将 ==源代码==(高级语言)编译成处理器可识别的 ==目标代码== 编译程序将 ==目标代码== 分割成许多目标代码段,目标代码段被封装形成 ==目标模块== 编译程序为每个目标模块分配 ==逻辑地址空间== 然后 ==存放在磁盘== 中 细节: Java 源代 ...
Read more
内存分配
内存分配 前提:操作系统也存放在内存中:通常存放在低内存,也可以存放在高内存 细节: 决定操作系统存放位置的因素是 ==中断向量== 的位置 操作系统可以利用 ==暂时的操作系统代码== 在进程执行过程中动态 ==改变操作系统的大小== 暂时的操作系统代码:操作系统中 ==并不常用的服务== 可以暂时并不保存在内存中,空闲出来的内存用于其他目的 内存保护 定义:进程 禁止 访问不属于 ...
Read more
虚拟内存
虚拟内存 引入: 程序加载进入内存中有两种方式:(1) 程序 ==完整== 地加载进入内存 (2) 仅加载 ==部分== 程序,剩余部分在需要时再进行加载 解释 1:此前提到的 ==分页技术== 都是在内存中为程序的每页都分配相应的帧:相当于将程序完整地加载进入内存中 解释 2:此前提到的 ==动态加载== 就是加载部分程序,需要时再加载;即将提到的 ==虚拟内存== 基本原理也是如此 ...
Read more