zoukankan      html  css  js  c++  java
  • JAVA内存管理

      java与c++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙。墙外面的人想进去,墙里面的人想出去。

    1.java内存分布

      程序计数器

      栈(局部变量、操作数、动态链接、方法出口)

    每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。局部变量所需的内存空间在编译时完成分配,当进入一个方法时,这个方法需要在帧中分配多大的局部变量空间是完全确定的。在方法运行期间不会改变局部变量表的大小。

    堆(存放对象实例及数组,也叫作GC堆)

    方法区

      存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码数据。

    2.堆分配方式

      指针碰撞(Bump the Pointer)适用于使用Compact策略的垃圾回收

      空闲列表(Free List)

    3.对象内存分配同步策略

      同步内存分配

      TLAB(本地线程分配缓冲,每个线程都有自己的缓冲区,只有在缓冲区用完重新分配的时候才同步)

    4.对象空间

      对象头(对象自身的运行时数据:hashcode、gc分代年龄、锁状态...类元数据)

      实例数据

      对齐填充

    5.对象的访问定位

      使用句柄

      直接指针

    6.垃圾收集策略

      标记-清除策略

      复制算法

      标记-整理算法

    7.垃圾收集器

    • Serial”是一个单线程、stop-the-world、使用复制算法的收集器。
    • “ParNew” 是一个多线程、stop-the-world、使用复制算法的收集器。和”Parallel Scavenge”不同,它可以和”CMS”收集器一起使用。比如说,”ParNew”做了同步需要,以便它能在CMS的并发阶段继续运行。
    • “Parallel Scavenge” 是一个多线程、stop-the-world、复制算法的收集器。
    • “Serial Old”是一个单线程 、stop-the-world、使用标记-清除-压缩的收集器。
    • “CMS”(Concurrent Mark Sweep)是一个并发、短暂停的收集器。
    • “Parallel Old”是多线程、使用压缩算法的收集器。

    http://ifeve.com/our_collectors/

  • 相关阅读:
    新建maven 父子模块项目
    for循环删除list中多个元素出现的误区
    mysql不支持emoji表情的问题的解决方法
    innodb的读写参数优化
    redis list命令
    redis之常用Set和ZSet命令
    java中list里面存放map,根据map中的某一个字段进行排序
    spring-redis 存储数据
    批量mvn 打包 bat文件命令
    yum 安装docker后 无法启动
  • 原文地址:https://www.cnblogs.com/juaner767/p/5778767.html
Copyright © 2011-2022 走看看