zoukankan      html  css  js  c++  java
  • java-内存管理

    一、jvm内存结构

    程序计数器(Program Counter Register)、JVM虚拟机栈(JVM Stacks)、本地方法栈(Native Method Stacks)、堆(Heap)、方法区(Method Area)

    (1)PCR
    尾随线程生命周期,记录当前运行到的.class字节码行数,用于多线程操作
    (2)JVM Stacks
    尾随线程生命周期,在方法运行中存储数据
    Java虚拟栈帧.bmp 
    (3)Native Method Stacks
    处理native方法,如object中的hashCodes()等
    (4)Heap
    存储全部实例对象和数组对象,内置GC
    (5)Method Area

    堆的组成部分,但不强制GC。存储的对象为执行时常量池、静态变量、JVM载入的类信息等


    二、垃圾回收
    堆和方法区须要进行垃圾回收,其它三个随线程生命周期创建销毁
    垃圾判定算法
    (1)引用计算器:对循环引用的对象无法回收

    (2)根搜索:效率较低


    垃圾清除算法
    (1)标记、清除算法
      过程:内存紧张时,停止程序,遍历GC Root将可达的对象标记出可存活的对象,清除全部未使用的对象
      缺点:效率较低;清理出来的空暇内存不连续
    (2)复制算法
      过程:将内存分成活动区间和空暇区间两块,新分配的内存在活动区间,内存紧张时进行GC,将活动区间中
                存活的对象,按顺序放入空暇区间
      缺点:浪费一半内存;对象存活率高时比較费复制操作
    (3)标记、整理算法
      过程:类似(1)标记全部存活对象,又一次移动按内存顺序排列对象,将末端内存清除
      缺点:效率不高
    (4)分代搜索算法
      过程:针对不同对象进行不同的回收算法。
      夭折对象(局部变量、暂时变量):复制算法(80%内存分配对象+10%活动区间+10%空暇区间)
      老不死对象(缓存对象、数据库连接对象、单例对象):标记、整理算法
      不灭对象(String池对象、class类信息):标记、整理算法
  • 相关阅读:
    归并排序
    希尔排序
    字符串操作
    引用
    直接插入排序
    变量赋值
    C#中关于公共类的使用
    关于SQL中Between语句查询日期的问题
    用户控件 与 重写控件 的区别
    什么是命名空间,为什么要使用命名空间?
  • 原文地址:https://www.cnblogs.com/yxwkf/p/3790083.html
Copyright © 2011-2022 走看看