zoukankan      html  css  js  c++  java
  • jvm垃圾回收器(《深入理解java虚拟机》)

    ---恢复内容开始---

    程序计数器、虚拟机栈、本地方法栈,这三个区域随着线程生,随着线程死。重复入栈出栈,还有基本确定 编译后 各区域所需要的内存大小是确定的。所以这部分回收不需要过多考虑。

    主要回收对象为堆、方法区。java动态原则,大多数对象都是运行期间才会被加载的,所以堆上的容量是动态(分配和回收)变化的。

    1.堆上回收内存(回收已死对象)

    怎么判断已死?

    每个类都有一个finalize()方法,,jvm判断一个对象是否死亡,先根搜索算法筛一遍,标记出不可达对象,,并放在一个队列中,由一个线程去逐个执行finalize()方法。若某个对象重写了finalize()方法,并且在此方法中成功讲自己连接出去了,,那就抹去标记,暂留狗命。若没有重写或没有成功推出自己,则只有等死。

    finalize()方法,在一次次回收中,,只会被系统调用一次。(?)

    finalize()一般被用在对象快死了,,释放被其占用的资源。但是 try finally  好像也可以。

    2.方法区回收

    这部分是有回收的,废弃的常量和 无用的类。

    3.垃圾回算法

    3.1标记回收

    先标记再回收:可能产大量碎片,,没有可以被分配的连续内存,效率也底。

    3.2复制算法

    两块一样大的内存,,一块用的差不多的了,,将上面活着的对象复制到另一块上,,原来的清空。

     

    3.3标记-整理算法

    让存活的对象自己想某个区域”靠近“,,然后回收这个区域端边接意外的内存。

    3.4分代收集算法

    4.垃圾收集器

    http://www.cnblogs.com/zuoxiaolong/p/jvm8.html

    5.内存分配与回收策略

    https://www.cnblogs.com/xiaoxi/p/6557473.html

  • 相关阅读:
    Android Eclipse真机调试 过滤器filter没有显示
    Maven in 5 Minutes(Windows)
    接触JETM
    使用mobile.changePage()时出现的问题(转)
    jQuery Mobile页面跳转后未加载外部JS(转)
    iDempiere VS ADempiere
    为Drupal7.22添加富编辑器 on Ubuntu 12.04
    说说iDempiere = OSGi + ADempiere的OSGi
    购买阿里云云服务器( 最小配置)
    安装Drupal7.12升级至7.22
  • 原文地址:https://www.cnblogs.com/haerwang/p/10030718.html
Copyright © 2011-2022 走看看