1. 垃圾回收机制(GC)
1)Java内存分配
在JAVA程序中,无论代码还是数据,都需要存储在内存中,而java程序所需内存均由JVM进行管理分配,JVM会将申请的内存从逻辑上划分为三个区域:堆、栈、方法区。这三个区域分别用于存储不同的数据。
堆用来存放创建出来的对象,jvm只有一个堆区(heap)被所有线程共享,堆中不存放基本类型和对象引用,只存放对象本身,每个对象都包含一个与之对应的class的信息(class的目的是得到操作指令);
栈中只保存基本数据类型和对堆空间的对象的引用变量,每个栈中的数据(基本类型和对象引用变量)都是私有的,其他栈不能访问,栈分为3个部分:基本类型变量区、执行环境上下文、操作指令区(存放操作指令)。
方法区用于存放类的信息,Java程序运行时,首先会通过类装载器载入类文件的字节码信息,经过解析后将其装入方法区。类的各种信息(包括方法)都在方法区存储,方法只用一份。
2)垃圾回收
垃圾回收器(Garbage Collection,GC)是JVM自带的一个线程(自动运行着的程序),用于回收没有任何引用所指向的对象。
GC线程会从栈中的引用变量开始跟踪,从而判定哪些内存是正在使用的,若GC无法跟踪到某一块堆内存,那么GC就认为这块内存不再使用了,即为可回收的。但是,java程序员不用担心内存管理,因为垃圾收集器会自动进行管理。
GC的回收对程序员来说是透明的,并不一定一发现有无引用的对象就立即回收。一般情况下,当我们需要GC线程即刻回收无用对象时,可以调用System.gc()方法。此方法用于建议JVM马上调度GC线程回收资源,但不保证立即回收。
本文出自 “永远年轻” 博客,请务必保留此出处http://kingkongzhao.blog.51cto.com/6319491/1655668
原文地址:http://kingkongzhao.blog.51cto.com/6319491/1655668