美文网首页
jvm内存一条线路

jvm内存一条线路

作者: 高山之水 | 来源:发表于2018-03-14 01:31 被阅读0次

    入手从collection开始

    集合常用 arrayList 底层数据结构 object[]  
    数组特点 
        内存连续 数据挨个存放  那么删除中间一个时候 后面的数据会挨个往前挪移  
        因为地址可知 查询节点数据 较快 通过下标获取
    应对业务场景 插入后查询修改数据   如果执行删除操作会造成资源浪费 需要时间重新规划数组结构
    
    linkedList 底层数据结构链表
    链表特点 
      内存不连续 
      代码 node  first、 last; object;存放前后节点hash值【待查询】 然后跟节点对象
      该链表实现 Deque 接口,为 add、poll 提供先进先出队列操作,以及其他堆栈和双端队列操作。
    应对业务场景
       插入后 可能会删除某项数据 以作数据调整 
    
    hashMap
    内存结构是hash散列 【我理解为 散着放的列表】
      内存特点
        hash值分桶存储【其实就一一小块内存】 当hash值冲突 会在该桶内维护一个链表 
        
    警告:暂时不晓得这个桶有多大 所以尽量避免hash冲突 万一桶满了是不是要重新规划内存  造成资源浪费?
    
    linkedHashMap
     内存特点 与hashMap一致
    不同点 linkedHashMap 额外维护了一个双重链表来记录数据插入的顺序性
    那么相比较hashMap 多了一个链表要维护 性能要有所下降 【业务需要 没办法】
    
    treeMap
    内存结构 红黑二叉树
    内存特点:位置 对于二叉树还没搞明白 只晓得父红子黑【还不知道对不对】
    

    说到数据内存 就要讲讲内存结构

    jvm内存分为五大块【程序计数器、虚拟机栈、本地方法栈、方法区、堆】
    
    从线程是否共享分起: 线程共享:堆、方法区/非线程共享:程序计数器、虚拟机栈、本地方法栈
    
    简单说下存储信息
    1、程序计数器 用于存放下一条指令所在单元的地址的地方 【c与java的交界点用以存放执行指针】
    2、虚拟机栈  【为java方法提供服务】
    3、本地方法栈【为jvm提供使用native方法服务】
    4、方法区 【存储类常量、静态变量等信息】
    5、堆 【存放对象实例、对象成员变量】
    
    对于一个obj:
    类引用--stack中
    类成员变量--Heap中【回收主要地方】
    类静态变量、常量--Method Area中
    类方法--以帧栈形式保存到栈中
    
    

    那么内存存储规划完 就得看看 内存的回收机制

    随便一查 就能查到 四种算法:标记清除、标记整理、复制、分代收集
    
    那么实现这些算法的回收器:仔细查查有六种 :
    Serial收集器【串行】、parNew收集器【并行】、Parallel Scavenge收集器 【并行】
    Serial Old收集器 【串行】、Parallel Old 收集器 【并行】、cms收集器
    
    

    差不多 回收完成

    然后就是 jvm的执行优化

    优化方向 对回收进行控制【减小回收频率】 设定堆栈大小、新生代老年代大小等等、很多很多
    
    

    那么总结完成之后这一条内存线路就算差不多了 算一条知识线路

    貌似还没有 创建....[尴尬笑]

    欢迎到我的网站寻找更多的知识

    相关文章

      网友评论

          本文标题:jvm内存一条线路

          本文链接:https://www.haomeiwen.com/subject/hydxqftx.html