JVM和垃圾回收机制的一些整理



1.虚拟机

    什么是虚拟机:对某种计算机体系结构的模拟。虚拟机分为系统虚拟机(模拟整个操作系统)和进程虚拟机(模拟机器指令的运行环境)。进程虚拟机中又有一种高级语言虚拟机,它只模拟某种高级语言的运行环境。JVM就属于高级语言虚拟机。


2.JVM的内部结构

   

        ClassLoader:    根据类名将class文件装载到runtime data area的method area中

        RuntimeDataArea:    程序运行期间,存储不同数据类型的内存区域

        Excution Engine:    执行class文件中的指令

        Native Interface:    与其它编程语言交互的接口


     RuntimeDataArea运行时数据区


    程序计数器:记录当前线程正在执行的虚拟机字节码的指令地址(记录偏移量)。

    方法区(MethodArea):NONE HEAP内存,被全局共享,随着jvm的启动而生成,随着jvm的关闭而销毁。被装载的class信息放在这个区域,存放类的结构数据。JDK自带的Hotspot虚拟机中,运行时常量池在方法区中:存放一些编译期间就确认的常量(运行期间生成的对象也可以放入常量池,比如String的intern方法)。JDK1.6之前,方法区默认放在永久代(分代回收),所以常量池也放在永久代。JDK1.7后,常量池被移到了Heap中。

    HEAP区:全局共享,实例对象在堆中分配内存。

    VM STACK:执行方法时,会创建一个栈帧,一个栈帧包含了一个变量表,和一个操作数栈。一个函数被调用到返回的过程,就是一个栈帧从压栈到出栈的过程。


   

3.内存回收

java的内存管理由JVM负责

1.对象在内存中的状态



可达状态:对象创建后,有一个或以上的引用变量引用它。

可恢复状态:当一个实例对象没有任何引用变量引它的时候,它将进入可恢复状态,在系统进行垃圾回收之前,会先调用finalize()方法进行资源清理,这个时候如果重新为该对象设置一个引用,它将重新变成可达状态,否则进入不可达状态。

不可达状态:没有任何引用变量引用该对象,并且在finalize()方法中也没有对该对象重新设置引用,那么改对象变为不可达状态,垃圾回收才会回收。

2.垃圾回收算法


这里只介绍两种算法

1.tracing collector:
 引用根集的概念,垃圾回收就时,GC从根集开始扫描,识别出可达和不可达的对象,并标识出来,清除不可达的对象。

2.generation collector:
分代算法,将heap分成几个部分,一般是分成young,old,permanent三个部分,分别对应三个代。young代中是频繁需要GC的对象,young代中生存时间长的对象被移到old代,permanent代中的对象不会被回收,一般用来装载class。


3.几种引用类型

1 强引用(strong reference):用类的类型声明的变量比如:Object obj=new Object();obj就是一个强引用,被强引用引用的对象,失去所有引用的时候才会被回收。

2.弱引用(weak reference):如果一个对象只有弱引用,只要GC发生回收动作,被弱引用指向的对象就会被回收

3.软引用(soft reference):SoftReference<Object> sR=new SoftReference<Object> (new Object()),当内存不足的时候,GC会回收软引用指向的对象。软引用的这种特性使得它在缓存技术中应用很多。

4.虚引用(phantomReference): 如果一个对象只有虚引用相当于没有引用,虚引用必须和引用队列(ReferenceQueen)联合使用,当一个对象被回收时,如果发现它还有虚引用,就会把这个虚引用加到引用队列,记录引用的对象将要被销毁,那么就可以在被回收前采取必要的行动。虚引用的特性允许你知道一个对象在什么时候被销毁。
                        ReferenceQueen rQ=new ReferenceQueen();
                        PhantomReference pR=new PhantomReference(object,rQ);
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值