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