JVM虚拟机学习-垃圾回收


垃圾收集机制

引用计数算法:

有对对象的引用就给计数器加上1,如果没有对对象的引用就减去1,

  • 可达性分析算法
    通过一系列称作"GC Root"的对象作为起始点.从这些节点开始向下搜索.搜索过的路径称为引用链,当一个对象么有任何引用链就认为是不可用的.
    在Java中可以作为"GC Root"的对象包含:
    1.虚拟机栈中引用的对象.
    2.方法区中类静态属性引用的对象.
    3.方法区中常量引用的对象.
    4.本地方法中JNI引用的对象.

    • 引用类型
      强引用.软引用.弱引用.虚引用.
      #垃圾收集算法
      ##标记清除算法(Mark-Swep)
      首先标记所有需要收集的对象,在标记完成之后再进行统一的收集.
      1.效率不高.2.收集之后会有大量的内存碎片.
      ##复制算法(copying)
      将内存分为两块,每次只使用其中的一块.当这一块使用完了,就将还存活的对象整体移到另一块中.
      1.浪费内存.通常只有一半被使用.
      新生代通常使用类似的机制进行回收.由于新生代中的大部分对象都是朝生夕死,因此并不需要严格的划分为相等的两块.而是将一块较大的内存划分为一块Eden和两块Survivor空间. 而且默认Eden 和Survivor 两者的比例为8:1.每次只有10%被浪费.
      ##标记-整理算法(Mark-compact)
      根据老年代特点,提出标记-整理算法.标记整理算法和标记清除算法不同的是不是直接对可回收对象进行清理,而是让存活对象向一边移动.然后整体清理掉边界以外内存.
      ##分代收集算法
      一般把Java堆分成新生代和老年代.
      新生代使用复制算法.
      老年代使用标记清除和标记整理算法.

heap和stack区别

  1. 申请方式:
    stack:由系统自由分配。例如:声明一个局部变量int b;系统自动开辟空间
    heap:需要程序员自己申请,并指明大小,new Object();
  2. 申请后响应
    stack:只要栈的剩余空间大于申请空间,系统为程序提供空间,否则报内存溢出。
    heap:首先系统有一个记录操作系统内存空闲的链表,系统会首先在链表中寻找一个内存大于要保存数据的空间,删除链表对该空间的指向,同时将数据保存在该空间,通常大小不是正好合适的,会将该块内存中剩下的部分重新保存在链表中。
  3. 申请大小的限制
    stack:栈在系统中大小是有限制的 。默认栈的大小是 1M.可以进行修改。
    heap:堆的大小申请比较自由,主要取决于内存所剩空间的大小。堆通常是不连续的由链表来储存空闲地址的。
  4. 申请效率
    stack: 栈的申请速度非常快。
    heap:由于堆是由 new 分配内存,所以在效率和速度上会慢一些。
  5. 存储内容
    stack:在函数调用时,第一个进栈的是主函数的下一条指令的地址,然后是各个参数。本次函数调用结束后,局部变量先出栈,然后是参数,最后栈顶指针指向最开始存的地址,也就是主函数中下一条指令。
    heap:一般在堆的头部用一个字节存放堆的大小,堆中的具体内容由程序员安排。
  6. 数据结构区别
    stack:栈实际上就是满足先进后出的性质的数据结构。
    heap:堆实际上指满足优先队列的一种数据结构。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 经导师精心指导并认可、获 98 分的毕业设计项目!【项目资源】:微信小程序。【项目说明】:聚焦计算机相关专业毕设及实战操练,可作课程设计与期末大作业,含全部源码,能直用于毕设,经严格调试,运行有保障!【项目服务】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值