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…
    }
  • 相关阅读:
    什么是“方法”
    break与continue
    循环结构2
    循环结构1
    Switch多选择结构
    if选择结构
    Scanner方法
    Doc参数信息
    运算符号
    变量与常量
  • 原文地址:https://www.cnblogs.com/zwm512327/p/3525717.html
Copyright © 2011-2022 走看看