JVM与GC之间有怎样的关联呢?本文通过宜信普惠的介绍,希望对您有所帮助。
JVM实现了Java语言最重要的特征:即平台无关性。原理:编译后的 Java 程序指令并不直接在硬件系统的 CPU 上执行,而是由 JVM 执行。JVM屏蔽了与具体平台相关的信息,使Java语言编译程序只需要生成在JVM上运行的目标字节码(.class),就可以在多种平台上不加修改地运行。
说起垃圾回收的场所,宜信普惠在了解了JVM(Java Virtual Machine Model)内存模型之后,发现堆是Java虚拟机进行垃圾回收的主要场所,其必要场所是方法区。
GC即垃圾收集机制,指JVM用于释放那些不再使用的对象所占用的内存。java语言并不要求JVM有GC,也没有规定GC如何工作。不过常用的JVM都有GC,而且大多数GC都使用类似的算法管理内存和执行收集操作。
在宜信普惠的视角,GC的存在主要弄明白以下三个问题:确定哪些内存回收 (对象是否可以被回收的两种经典算法: 引用计数法和可达性分析算法);什么时候回收,回收的区域(堆的新生代、老年代、永久代的垃圾回收时机,MinorGC 和 FullGC);怎么回收 (三种经典垃圾回收算法(标记清除算法、复制算法、标记整理算法)及分代收集算法、分区收集算法和七种垃圾收集器)。
在Java中可以作为GC Roots对象包括以下几种:虚拟机栈(栈帧中的局部变量表,Local Variable Table)中引用的对象;方法区中类静态属性引用的对象;方法区中常量引用的对象;本地方法栈中JNI(即一般说的Native方法)引用的对象。
现在对于JVM中的GC算法两大类:一类负责收集年轻代,一类负责收集老年代。假如没有显式指定垃圾回收算法,一般会采用系统平台默认算法,当然也可以自己指定。
关于GC系统的实现,宜信普惠建议可以从以下几个方面着手:GC判断策略(例如引用计数,对象可达);GC收集算法(标记清除法,标记清除整理法,标记复制清除法,分带法);GC收集器(例如Serial,Parallel,CMS,G1)。
领取专属 10元无门槛券
私享最新 技术干货