JVM 类加载机制
类的生命周期 通常类的声明周期包括以下 7 个阶段: 加载(Loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始化(Initialization) 使用(Using) 卸载(Unloading) ...
类的生命周期 通常类的声明周期包括以下 7 个阶段: 加载(Loading) 验证(Verification) 准备(Preparation) 解析(Resolution) 初始化(Initialization) 使用(Using) 卸载(Unloading) ...
以上是 HotSpot 虚拟机中的 7 个垃圾收集器,连线表示垃圾收集器可以配合使用。 Serial 收集器 Serial 收集器是单线程的收集器,不仅意味着只会使用一个线程进行垃圾收集工作,更重要的是它在进行垃圾收集时,必须暂停所有其他工作线程,往往造成过长的等待时间。 它的优...
JVM中,垃圾收集算法主要分为复制、标记清除、标记整理、分代收集几种: 标记-清除算法 将需要回收的对象进行标记,然后清除 不足: 标记和清除过程效率都不高 会产生大量碎片 之后的算法都是基于该算法进行改进。 复制算法 将内存划分为大小相等的两块,每次只使用其中一块...
在 JVM 内存模型[1] 中, 程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收。垃圾回收主要是针对 Java 堆和方法区进行。 引用计数 给对象添加一个引用计数器,当对象增加一个引用时计数器加 ...
JVM 内存模型介绍
存储分配与回收 动态存储分配 内存分配函数 为了动态分配存储空间,需要调用三种分配函数中的一种,这些函数都是声明在 <stdlib.h> 头中。 malloc 函数:分配内存块,但是不对内存块进行初始化; calloc 函数:分配内存块,并且对内存块清零; real...
编写大型程序 源文件 根据惯例,源文件的扩展名为 .c,每个源文件包含程序的部分内容,主要是函数和变量的定义。其中一个源文件必须包含一个名为 main 的函数,此函数作为程序的起始点。 头文件 通常, #include 指令告诉预处理器打开指定的文件,并且把此文件内容插入到当前文件中。因此,...
指针 指针可以说是 C 语言中最让人迷惑也是最迷人的特性了。 指针变量 现代计算机将内存分为字节(byte),每个字节存储8位(bit)信息。每个字节都有其唯一的地址,程序中的每个变量占有一个或多个字节的内存,把第一个字节的地址称为变量地址。 指针变量被用来存储地址信息,例如:用指针变量 p...
作为第一门接触的语言,C 语言在工作以后相对接触的就比较少。随着工作研究的不断深入,接触到的底层知识逐渐增多, 最近花时间重温了一下《C程序设计语言: 现代方法》这本书,对 C 语言相关知识做一个复习,在此也做一些整理。 Hello World 创建 hello.c 文件 #include ...
基础语法 斜体和粗体 使用 * 和 ** 表示斜体和粗体。 示例: 这是 斜体,这是 粗体。 分级标题 使用 # 表示一级标题,使用 ## 表示二级标题,使用 ### 表示三级标题, 示例: # 这是一个一级标题 ## 这是一个二级标题 ### 这是一个三级标题 外链接 使...