• JVM内存分配


    内存规整

    堆中的内存空间是否是规整的(连续的),由JVM垃圾收集器所采用的垃圾回收算法决定,如果垃圾回收算法是带有压缩算法的,则为连续的、规整的,如果垃圾回收算法是标记-清除算法(例如CMS收集器),则内存是不连续的、不规整的。
    内存空间规整与否,决定这内存的分配方式。

    内存分配方式

    指针碰撞

    内存空间是规整的,连续的内存中,一边是已分配的内存空间,一边是尚未分配的内存空间,两部分空间的中间有一个指针,通过移动指针的方式,来完成新对象实例的内存分配,这种分配方式叫指针碰撞法。

    空闲列表

    内存是不规整的,只能找一块足够大的空间,分配给对象实例,这种分配方式叫空闲列表法。

    并发指针碰撞问题

    同一块内存区域执行指针碰撞,会有并发问题,解决办法是:
    1、为分配内存空间的动作进行同步加锁处理。
    2、使用本地线程分配缓冲(TLAB,即Thread Local Allowcation Buffer)。

    TLAB

    为每个线程在堆中预先分配一小块内存TLAB,线程在各自的TLAB上为自己的实例对象分配内存空间。
    当TLAB使用完时,加同步锁,然后分配新的TLAB。

  • 相关阅读:
    MVC模式的学生信息增删改查
    常用排序算法
    2803 爱丽丝·玛格特罗依德
    3118 高精度练习之除法
    中秋练习题
    poj2011
    P1558 色板游戏
    P1830 轰炸III
    P1656 炸铁路
    1067 机器翻译
  • 原文地址:https://www.cnblogs.com/guodongdidi/p/10073389.html
Copyright © 2020-2023  润新知