JVM

1. 程序计数器
一块较小的线程私有空间, 可以当作当前线程所执行字节码的行号显示器, 通过改变计数器的值选择执行的字节码.
2. 虚拟机栈
一块线程私有的内存空间, 每起一个线程就会起一个线程栈, 而在一个线程中可以调用多个方法, ,每起一个方法就会起一个栈帧, 所以一个线程栈中有多个栈帧. 每一个方法从调用到执行完成的过程, 就代表一个栈帧在虚拟机栈中入栈到出栈的过程. 每一个栈帧存放着局部变量, 操作函数等信息. 当线程请求的栈的深度大于当前虚拟机栈的深度时, 就会触发StackOverFlowError.
3. 本地方法栈
Java访问C语言等其他语言所用到的栈, 原理上与虚拟机栈类似
4. 堆
最大JVM内存, 线程共享, 只能存储对象.
5. 方法区
线程共享的内存区. 用于存储已经被加载的类信息, 常量,静态变量等
6. 运行时常量
方法区的一部分, 类文件中有一项信息时常量池, 用来存储编译器生成的字面量和符号引用.
7. 直接内存
不是Java虚拟机中定义的内存区域

GC

1. 确定垃圾
a. 引用基数算法
给对象中添加一个引用计数器, 每当由一个地方引用它的时候, 计数器就+1; 当引用失效时, 计数器就-1, 计数器为0的对象不被使用.
但是这个算法无法解决对象之间的相互引用关系
b. 正向可达算法
得到堆内存中一定不是垃圾的根的对象,GCRoots, 顺着GCRoots引用往下找, 能顺藤摸瓜找到的就是好瓜,否则就是垃圾
2. 垃圾回收算法
a. 标记清除: 两个阶段: 1. 标记阶段, 通过正向可达算法 2.清除阶段
缺点: 内存不连续, 碎片化
b. 复制算法:一般在新生代中使用
将原有内存空间啊分为两块, 每次使用一块, 垃圾回收时将正在使用的内存块中存活对象复制到未使用的那一块内存中, 之后清除正在使用的内存快中所有空间
c. 标记-压缩算法: 一般用在老年代
通过正向可达算法, 将所有存活的对象压缩到内存空间的一端, 之后清理边界外的所有空间
d. 分代算法 : JVM使用
将内存分为新生代和老生代
新生代由于存活对象不多, 使用复制算法
老生代存活率高, 使用标记-压缩算法

JVM内存空间组成+GC回收机制相关推荐

  1. JVM内存及GC回收

    JVM体系结构概述 1).简述 JVM--操作系统--硬件体系 PS:安卓(jvm+linux内核) Classfile--类装载子系统(入口)--运行时数据区--执行引擎(出口)--本地方法接口-- ...

  2. Android工程师进阶第一课 夯实Java基础 JVM内存模型和GC回收机制

    开篇词:跳出舒适区,走在Android行业的前端 你好,我是姜新星,一个深耕 Andorid 领域的老工程师. 记得 2010 年毕业典礼上,某位老师说"你们是最幸福的一届毕业生,正好赶上中 ...

  3. java gc回收机制种类_JAVA的垃圾回收机制(GC)

    1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供的一种用于在空闲时间不定时回收无任何对象引用的对象占据的内存空间的一种机制. 2.什么时候 ...

  4. 【拥抱大厂系列】百度面试官问过的 “JVM内存分配与回收策略原理”,我用这篇文章搞定了

    点个赞,看一看,好习惯!本文 GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了3个月总结的一线大厂Java面试总结,本人已拿腾 ...

  5. 深入理解Java虚拟机(第三弹)- JVM 内存分配与回收策略原理,从此告别 JVM 内存分配文盲

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:打卡活动第二期来啦,100% 能获得奖品个人原创+1博客:点击前往,查看更多 虚拟机系列文章 深入理解 Java ...

  6. JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法)

    转载自   JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法) 引言 何为终极算法? 其实就是现在的JVM采用的算法,并非真正的终极.说不定若干年以后,还会有新的终极算法, ...

  7. JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法)

    转载自  JVM内存管理------GC算法精解(五分钟让你彻底明白标记/清除算法) 相信不少猿友看到标题就认为LZ是标题党了,不过既然您已经被LZ忽悠进来了,那就好好的享受一顿算法大餐吧.不过LZ丑 ...

  8. JVM内存管理------GC算法精解(复制算法与标记/整理算法)

    转载自  JVM内存管理------GC算法精解(复制算法与标记/整理算法) 本次LZ和各位分享GC最后两种算法,复制算法以及标记/整理算法.上一章在讲解标记/清除算法时已经提到过,这两种算法都是在此 ...

  9. 【phar反序列化与GC回收机制的利用】

    认识phar phar是什么?简单来说就是把php压缩而成的打包文件,无需解压,可以通过phar://协议直接读取内容 ,大多数PHP文件操作允许使用各种URL协议去访问文件路径:如data://,z ...

  10. Java基础-Java中的内存分配与回收机制

    Java基础-Java中的内存分配与回收机制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一. 二. 转载于:https://www.cnblogs.com/yinzhengji ...

最新文章

  1. OpenXava 4.6.1 发布,Web 快速开发套件
  2. framebuffer的入门介绍-实现程序分析【转】
  3. linux环境下运行open error,错误:运行OpenCL代码时clGetPlatformIDs -1001(Linux)
  4. zcmu1540(二分)
  5. PinyinUtil
  6. JS----javascript中使用reverse()方法反转数组
  7. 虚拟硬盘VHD的程式化挂载方式
  8. VS_VERSION_INFO信息的读取
  9. 绘制完成的cad图纸文件应使用哪一款看图软件进行查看?
  10. eclipse配置java开发环境_Java中Eclipse开发环境配置
  11. 经济数学线性代数第三版课后习题答案
  12. hd4400 显卡opencore 下的 8个苹果问题解决方法
  13. FFmpeg图片合成视频,实现放大平移
  14. 破解压缩包密码的正确思路原理
  15. 全球城市排行榜:香港不再是“最贵”,丹麦首都“最宜居”,伦敦洛杉矶当选“未来城市”...
  16. IP欺骗攻击原理及如何修改IP
  17. javascript getDate()方法
  18. 学海无涯!java连接mysql
  19. matlab ccd采集,CCD数据采集.doc
  20. OCI测试程序 : 执行SQL语句和内置的测试任务

热门文章

  1. String 源码浅析————终结篇
  2. http://blog.csdn.net/lnb333666/article/details/8546497
  3. 电驴 链接不到服务器
  4. 办公室计算机打印机共享,如何将办公室的所有电脑共享一个打印机???
  5. 【机器学习|数学基础】Mathematics for Machine Learning系列之矩阵理论(18):方阵的幂级数
  6. python数列求和_Python 数字求和
  7. C++ 万年历 查找年、月、日、星期数以及节日等信息
  8. 批量取消腾讯微博关注
  9. 安装监控的地方没有WiFi,没有无线网络,如何实现远程监控?
  10. 一名交互设计师必备的知识架构