zoukankan      html  css  js  c++  java
  • 《深入理解Java虚拟机》笔记2

    都知道Java对内存是自动垃圾回收的,什么样的内存是可以回收的?

    这个问题是值得思考的。

    对象已死的判定方法有两种:

    (1)引用计数器法

    给对象添加一个引用计数器,有一个地方用到此对象,计数器加一。

    引用失效,计数器减一。这个判断方法实现应该简单,但是Java不用。

    因为对象间的循环引用不好解决。

    但是作者说微软的com技术,python等用的是这种算法。

    com完全不懂,但是python难道不会遇到循环引用的问题吗?

    等有时间研究下python的内存管理。

    (2)根搜索算法

    从gc roots开始搜索,可达的对象是存活的,不可达的对象进行回收。

    这个也很容易理解。当执行到某个方法某个命令时,如果需要垃圾回收,

    则把当前的方法栈当做分析开始点。当然一些全局性的对象需要考虑。

    如果是函数式编程应该只考虑当前栈,我感觉。

    可作为gc roots的对错有下面几种:

    ①虚拟机栈中引用的对象

    在方法中创建的局部引用关联对象

    ②本地方法栈jni的引用对象

    方法换成了native,道理同①。

    ③方法区中类静态属性引用的对象

    所谓方法区在上篇中写过了,其实就是存放常态信息的

    下面代码中的a如果有引用的对象,就是这种情况

    ④方法区中常量引用的对象

    下面代码中b应该是这种情况

    class   AClass{
        static AClass  a;
        final static AClass   b=  new   AClass();
    
         //当前执行方法method…
    }
  • 相关阅读:
    在 Borland C++ 及 Visual C++ 环境中使用 STLport (作者:孟岩)
    设置JavaFX-CSS改变TreeView节点图标
    Using MS DataGrid control with ADO
    两个加载fxml文件的方法
    JavaFX中ObservableValue类型
    在 Eclipse 下利用 gradle 构建系统
    JavaFX初探
    深度剖析如何保证缓存与数据库的一致性
    ACID的实现原理
    一颗高度为3的B+树能存多少行数据?
  • 原文地址:https://www.cnblogs.com/zwm512327/p/3525717.html
Copyright © 2011-2022 走看看