JAVA知识_9

来源:互联网 发布:怎么用淘宝客买东西 编辑:程序博客网 时间:2024/06/06 14:48

一、- GC垃圾回收器这里写图片描述
- 回收算法
- 引用计数算法
- 资源一旦被引用就进行记录 //例:String name = “张三”; count=0 +1 +1 -1 -1
- 根搜索算法(Roots)
- 理解为正在练倒立的一棵大树
- 相比较引用计数算法,这种根搜索算法能够最大限度规避掉内存泄漏
- 补充
- 垃圾回收器,简称GC,主要的工作位置在堆里面,所以堆我们也称之为GC堆
- GC自己本身有固定的回收周期,根据需要程序员可以手动调用垃圾回收器
- 相比较C和Cpp(c++),java在内存管理方面很智能,一般情况下不需要手动进行回收
- 栈
- 本地方法栈
- 主要用于native方法的描述
- 虚拟机栈
- 主要行为:进栈出栈
- 谁在进出呢?//栈帧
- 栈帧的主要构成元素
- 局部变量表
- byte short int long float double char boolean reference(所有的引用类型的运行时类型)
- 所有类型在栈中只有一个槽位
- 但是long和double比较特殊,它们占用两个槽位
- 方法执行成功的信息
- 方法执行失败的信息

  • 方法区

    • 类加载的时候,方法和全局变量以及final和static修饰的内容全部在方法区里面
    • 主要用于存放实体内容,最典型的就是对象和数组
    • 引用数据类型基本都是在堆当中
    • 基本数据类型部分在堆中
  • 纠正:

    • 基本数据类型 byte short int long float double char boolean 它们是在栈中的
    • 局部变量和成员变量?初始化的问题~
      • 基本数据类型的局部变量是存放在虚拟机栈中的,虚拟机栈本身不是线程共享的
      • 基本数据类型的全局变量存放在方法区当中,方法区本身是共享的一个内存空间,所以方法能够共享这个变量
  • 多态的存在价值

    • 解耦
    • 提高代码的扩展性
    • 编译器会在编译的阶段进行标记,在解释器工作阶段进行解析
      • 在java代码的运行阶段,载入?
        • 是通过ClassLoader(类加载器)进行加载,完成class中间文件从磁盘加载到内存的这个事情
        • ClassLoader有一个特殊机制,叫做双亲绑定
        • Fuqin fq = new Erzi();//父类引用指向子类对象
          • fuqin和erzi本身存在继承关系,那么我在加载的过程当中 如果遇到fuqin类型的声明,其对应的存储位置可以存放它所有派生出来的子类

HashMap

原创粉丝点击