1. 垃圾回收机制(GC)java
1)Java内存分配
在JAVA程序中,不管代码仍是数据,都须要存储在内存中,而java程序所需内存均由JVM进行管理分配,JVM会将申请的内存从逻辑上划分为三个区域:堆、栈、方法区。这三个区域分别用于存储不一样的数据。程序员
堆用来存放建立出来的对象,jvm只有一个堆区(heap)被全部线程共享,堆中不存放基本类型和对象引用,只存放对象自己,每一个对象都包含一个与之对应的class的信息(class的目的是获得操做指令);jvm
栈中只保存基本数据类型和对堆空间的对象的引用变量,每一个栈中的数据(基本类型和对象引用变量)都是私有的,其余栈不能访问,栈分为3个部分:基本类型变量区、执行环境上下文、操做指令区(存放操做指令)。 ide
方法区用于存放类的信息,Java程序运行时,首先会经过类装载器载入类文件的字节码信息,通过解析后将其装入方法区。类的各类信息(包括方法)都在方法区存储,方法只用一份。spa
2)垃圾回收线程
垃圾回收器(Garbage Collection,GC)是JVM自带的一个线程(自动运行着的程序),用于回收没有任何引用所指向的对象。对象
GC线程会从栈中的引用变量开始跟踪,从而断定哪些内存是正在使用的,若GC没法跟踪到某一块堆内存,那么GC就认为这块内存再也不使用了,即为可回收的。可是,java程序员不用担忧内存管理,由于垃圾收集器会自动进行管理。内存
GC的回收对程序员来讲是透明的,并不必定一发现有无引用的对象就当即回收。通常状况下,当咱们须要GC线程即刻回收无用对象时,能够调用System.gc()方法。此方法用于建议JVM立刻调度GC线程回收资源,但不保证当即回收。资源