193 1 分钟

# 直接内存 不是虚拟机运行时数据区的一部分,也不是《Java 虚拟机规范》定义的内存区域 直接内存是在 Java 堆外的,直接向系统申请的内存区间 来源于 NIO, 通过在堆中的 DirectByteBuffer 操作 native 内存 通常,访问直接内存的速度会优于 Java 堆,即读写性能更高 因此处于性能考虑,读写频繁的场合可能会考虑使用直接内存 Java 的 NIO 库允许 Java 程序使用直接内存,用于数据缓冲区
1.5k 1 分钟

# 方法区 方法区与 Java 堆一样,是各个线程共享的内存区域 方法区在 JVM 启动的时候被创建,并且它的实际的物理内存空间和 Java 堆一样可以是不连续的 方法区 的大小,跟堆空间一样,可以选择固定或者可扩展 方法区的大小决定了系统可以储存多少个类,如果系统定义了太多的类,导致方法区溢出,虚拟机同样会抛出内存溢出错误 : OOM: MetaSpace 关闭 JVM 就会释放这个区域的内存 元数据区大小可以使用参数 - XX: MetaSpaceSize 和 - XX: MaxMetaSpaceSize # 方法区的内部结构 《深入理解 Java...
3.5k 3 分钟

# 堆 一个 JVM 实例只存在一个堆内存,堆也是 Java 内存管理的核心区域 Java 堆区在 JVM 启动的时候即被创建,其空间大小也就确定了。是 JVM 管理的最大一块内存空间 堆内存的大小是可调节的 《Java 虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的 所有的线程共享 Java 堆,在这里还可以划分线程私有的缓冲区 (Thread Local Allocation Buffer, TLAB) # 内存细分 Java 7 及之前堆内存逻辑分为三部分:新生区 + 养老区 + 永久区 Young Generation Space 新生区...
722 1 分钟

# 本地方法栈 简单地说,一个 Native Method 就是一个 Java 调用非 Java 代码的接口。一个 Native Method 是这样一个 Java 方法:该方法的实现由非 Java 语言实现,比如 C. 这个特征并非 Java 所有,很多其他的编程语言都有这一机制,比如在 C 中,你可以使用 extern "C" 告知 C 编译器去调用一个 C 的函数 Java 虚拟机栈用于管理 Java 方法的调用,而本地方法栈用于管理本地方法的调用 本地方法栈,也是线程私有的 允许被试线程固定或者是可动态扩展的内存大小...
382 1 分钟

# 程序计数器 (Program count register) PC 寄存器用来存储指向下一条指令的地址,也就是即将要执行的指令代码。由执行引擎读取下一条指令 它是一块很小的内存空间,几乎可以忽略不记,也是运行速度最快的存储区域 在 JVM 规范中,每个线程都有它自己的程序计数器,是线程私有的,生命周期与线程的生命周期保持一致 任何时间一个线程都只有一个方法在执行,也就是所谓的当前方法,程序计数器会储存当前线程正在执行的 Java 方法的 JVM 指令地址,或者,如果是在执行 native 方法,则是未指定值...
911 1 分钟

# 双亲委派机制 java 虚拟机对 class 文件采用的是按需加载的方式,也就是说当需要使用该类时才会将它的 class 文件加载到内存生成 class 对象。而且加载某个 class 文件时,java 虚拟机采用的是双亲委派机制,即把请求交由父类处理,它是一种任务委派模式. # 沙箱安全机制 自定义 String 类,但是在加载自定义 String 类的时候会率先使用引导类加载器加载,而引导类加载器在加载的过程中会先加载 jdk 自带的文件 (rt.jar 包中 java\lang\String.class), 报错信息说没有 main 方法,就是因为加载的是...
1k 1 分钟

# 导航 # 声明式导航 & 编程式导航 在浏览器中,点击链接实现导航的方式,叫做声明式导航. 在普通网页中点击标签,vue 项目中点击都属于声明式导航 在浏览器中,调用 API 方法实现导航的方式,叫做编程式导航 普通网页调用 location.href 跳转到新页面的方式,属于编程式导航 # vue-router 中的编程式导航 API vue-router 中提供了许多编程式导航的 API, 其中最常用的导航 API 分别是 : this.$router.push (‘hash 地址’) 1234goLokiByPush() {...
2.5k 2 分钟

# 路由 路由就是对应关系 SPA 与前端路由 : SPA 指的是一个 web 网站只有唯一的一个 HTML 页面,所有组件的展示与切换都在这唯一的页面内完成,此时,不同组件之间的切换需要通过前端路由来实现 前端路由 : Hash 地址与组件之间的对应关系 # 前端路由的工作方式 用户点击了页面上的路由链接 导致了 URL 地址栏中的 Hash 值发生了变化 前端路由监听到了 Hash 地址的变化 前端路由把当前 Hash 地址对应的组件渲染到浏览器中 # vue-router 的基本使用 安装 vue-router 包 1npm i vue-router@xxx...
233 1 分钟

# axios 挂载在 vue 原型上 如果不挂载在 vue 原型上,每个组件都会导入一次 axios 12345//在main.js中import axios from 'axios'Vue.prototype.$http = axios # 配置请求根路径 12// 在main.js中axios.defaults.baseURL = 'http://localhost:8080/api' 但是,把 axios 挂载到 Vue 原型上,有一个缺点:不利于 API 接口的复用