第一部分、闲扯+概述 近来在研读《深入理解java虚拟机》一书,读完之后做个小结,算是记录一下自己的学习所得,在成长的路上,只能死磕。 要理解JVM,就要先从其内存区域划分开始,知道其由几部分构成,再了解各部分的功能,这样就能对其整体有一个了解。 话不多说,总体图先呈上: 可以看到,线程私有的内存区 ...
分类:
其他好文 时间:
2018-12-15 21:00:27
阅读次数:
169
一、内存的碎片化 如果用c语言直接 malloc,free 来向操作系统申请和释放内存时,在不断的申请和释放过程中,形成了一些很小的内存片断,无法再利用,这种空闲,但无法利用内存的现象称为内存的碎片化。 二、slab allocator 缓解内存碎片化 memcached 用 slab alloca ...
分类:
系统相关 时间:
2018-12-12 00:38:17
阅读次数:
254
1.判断对象是否已死的方法可达性分析可作为GCRoots的对象包括下面几种:虚拟机栈(栈帧中的本地变量表)中引用的对象。方法区中类静态属性引用的对象。方法区中常量引用的对象。本地方法栈中JNI(即一般说的Native方法)引用的对象。2.垃圾收集算法:标记-清除(MarkSweep)算法:分标记和清除两个阶段,缺点:一是两个阶段效率低,二是产生内存碎片。复制(Copying)算法:把内存平均分为两
分类:
编程语言 时间:
2018-11-19 21:39:48
阅读次数:
210
缓存淘汰策略: 一、什么是链表? 1.和数组一样,链表也是一种线性表。 2.从内存结构来看,链表的内存结构是不连续的内存空间,是将一组零散的内存块串联起来,从而进行数据存储的数据结构。 3.链表中的每一个内存块被称为节点Node。节点除了存储数据外,还需记录链上下一个节点的地址,即后继指针next。 ...
分类:
编程语言 时间:
2018-11-17 20:53:25
阅读次数:
169
链表(上) @(数据结构与算法) 链表的经典应用场景: LRU 缓存淘汰算法。 缓存是一种提高数据读取性能的计数,如常见的:CPU 缓存,数据库缓存,浏览器缓存等。 缓存的大小有限,当缓存被用满时,那些数据应该被清理出去,那些数据应该保留,这就需要缓存淘汰策略算法来决定。常见得策略有三种:先进先出策 ...
分类:
其他好文 时间:
2018-10-04 15:23:13
阅读次数:
147
一、根搜索算法: (1)定义:通过一系列名为"GC Roots"的对象作为起点,从这些起点开始向下搜索,搜索走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连的时候,则证明此对象不可用 (2)GC Roots对象包括这几种:虚拟机栈中引用的对象;方法区中的类静态属性引用的对象;方法 ...
分类:
编程语言 时间:
2018-09-13 14:05:02
阅读次数:
179
垃圾收集算法 1. 标记 - 清除 将存活的对象进行标记,然后清理掉未被标记的对象。 不足: 标记和清除过程效率都不高; 会产生大量不连续的内存碎片,导致无法给大对象分配内存。 2. 标记 - 整理 让所有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。 3. 复制 将内存划分为大小相等的两 ...
分类:
编程语言 时间:
2018-09-09 11:46:24
阅读次数:
162
内存池,简单的讲就是,内存不由系统管理,而由应用程序自己或另行委托第三者管理的内存空间。通俗点说就是,所谓内存池就是应用程序从系统那里批发来的内存空间。对于使用量较大且需要频繁申请和释放内存的应用程序来说,使用内存池会减少运行时间,而对于系统来讲,批发内存可以有效减少零售所带来的内存碎片问题,从而提 ...
分类:
其他好文 时间:
2018-09-02 02:05:44
阅读次数:
235
判断对象的存活 引用计数 快,方便,实现简单,缺点:对象相互引用时,很难判断对象是否改回收。 可达性分析 来判定对象是否存活的。这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象 ...
分类:
其他好文 时间:
2018-08-24 16:08:42
阅读次数:
195
重载new,delete运算符 new,delete在c++中也被归为运算符,所以可以重载它们。 new的行为: 先开辟内存空间 再调用类的构造函数 开辟内存空间的部分,可以被重载。 delete的行为: 先调用类的析构函数 再释放内存空间 释放内存空间的部分,可以被重载。 为什么要要重载它们? 有 ...
分类:
编程语言 时间:
2018-08-22 00:14:53
阅读次数:
135