垃圾回收机制
概念:是一种动态内存管理技术,自动释放不被程序引用的对象,按照特定的垃圾回收算法实现资源自动回收功能。
垃圾回收器如何运行:当垃圾回收器检测某个对象已不被程序引用时,它将该对象加入到回收列表中,但不是立刻销毁对象,具体何时销毁对象是不可预料。垃圾回收器不能强制执行,但可以通过System.gc()方法,向JVM虚拟机请求执行垃圾回收器,JVM虚拟机会尽其所能满足该请求。
垃圾回收器执行时机:CPU空闲或内存不足时,自动执行垃圾回收器回收资源
垃圾回收器回收对象条件:
1.空引用:该对象已不被程序引用
2.变量被重置:当某个对象只被一个变量引用,而该变量有被重置成其它对象
3.隔离引用:在一个程序中存在2个对象相互引用,当这两个对象都不被程序引用,这也符合垃圾回收条件
内存分配方式
概念:存储内存数据的方式只有2种,即是堆和栈
栈:每个线程都有一个栈,栈读写和存储数据的速度紧比CPU慢,但存储的数据大小和生命周期在编译期必须被固定,主要用来存储基本类型数据和对象引用(不是对象本身)
堆:JVM虚拟机共享一个堆,它存储和读写数据比栈慢,但其存储数据大小能动态和生命周期能改变,主要用来存储对象本身
java内存泄漏条件
1. 该对象可连通(即是有被程序引用)
2. 该对象是无用的,但由于能被连通,导致CG不能将该块内存回收利用