博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA内存管理
阅读量:5825 次
发布时间:2019-06-18

本文共 945 字,大约阅读时间需要 3 分钟。

  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”是多线程、使用压缩算法的收集器。

转载于:https://www.cnblogs.com/juaner767/p/5778767.html

你可能感兴趣的文章
d3 v4实现饼状图,折线标注
查看>>
微软的云策略
查看>>
Valid Parentheses
查看>>
AIX 配置vncserver
查看>>
windows下Python 3.x图形图像处理库PIL的安装
查看>>
【IL】IL生成exe的方法
查看>>
没有JS的前端:体积更小、速度更快!
查看>>
数据指标/表现度量系统(Performance Measurement System)综述
查看>>
GitHub宣布推出Electron 1.0和Devtron,并将提供无限制的私有代码库
查看>>
论模式在领域驱动设计中的重要性
查看>>
有关GitHub仓库分支的几个问题
查看>>
EAServer 6.1 .NET Client Support
查看>>
锐捷交换机密码恢复(1)
查看>>
Method Swizzling对Method的要求
查看>>
佛祖保佑,永不宕机
查看>>
四、配置开机自动启动Nginx + PHP【LNMP安装 】
查看>>
Linux 目录结构及内容详解
查看>>
OCP读书笔记(24) - 题库(ExamD)
查看>>
.net excel利用NPOI导入oracle
查看>>
$_SERVER['SCRIPT_FLENAME']与__FILE__
查看>>