Java内存管理和垃圾回收
2017-07-12 16:11
225 查看
Java内存管理和垃圾回收
内存管理
Java代码编译和执行的真个过程包含了一下三个重要即机制
1、 Java源码编译机制2、 类加载机制
3、 类执行机制
Java源码编译机制
1、 分析和输入到符号表2、 注解处理
3、 语义分析和生成class文件
类加载机制
JVM的类加载是通过classLoader及其子类来完成的类执行机制
JVM是基于栈的体系结构来执行class字节码的,线程创建后都会产生程序计数器(PC)和栈(Stack)程序计数器存放吓一跳要执行的指令在方法内的偏移量,栈中存放一个个栈帧,每个栈帧对应着每个方法的每次调用,而栈帧又是由局部变量和操作数栈两部分组成,局部变量用于存放方法中的局部变量和参数,操作数栈用于存放方法执行过程中产生的中间结果。
JVM内存组成结构
JVM栈由:堆、栈、本地方法栈、方法区等部分组成。1、 堆:所有通过new创建的对象都在堆中分配内存,其中为新生代和旧生代
a) 新生代:新建的对昂都是用新生代分配内存。
b) 旧生代:用于存放新生代中多次垃圾回收依然存活的对象。
2、 栈:每个线程执行每个方法的时候都会在栈中申请一个栈帧,每个战神包括局部变量和操作数栈,用于存放此次方法调用过程中的临时变量、参数和中间结果。
3、 本地方法栈:用于支持native方法的执行,存储了每个native方法调用的状态。
4、 方法区:存放了要加载的类信息、静态变量、final类型的常量、属性和方法信息,JVM用持久代来存放方法区。
垃圾回收机制
JVM分别从新生代和旧生代采取不同的垃圾回收机制新生代的GC:童超存货的时间叫短,因此时记忆Copying算法来进行回收,就是先用Copying算法扫描存活对象,并赋值到一块新的完全未使用的空间对应的新生代。新生代采用空指针的防治来控制GC触发指针保持最后一个分配对象在新生代区间的位置。当有新的对象要分配内存是,用于检查孔家是否足够,不够就触发GC。
旧生代的GC:对象存活的时间较长,比较稳定,因此采用表级(Mark)算法来进行回收。标记算法就是扫描出存活的对象,然后再进行会后未被表级的对象,回收后利用空出的空间要么进行合并,要么标出来便于下次进行分配。总之就是减少内存碎片带来的效率损耗。
相关文章推荐
- JVM学习笔记(1、 基本结构;2、Java代码编译和执行的整个过程3、内存管理和垃圾回收 4、 内存调优 )
- java 内存管理与垃圾回收
- 探秘Java虚拟机——内存管理与垃圾回收
- 探秘Java虚拟机——内存管理与垃圾回收
- JVM学习笔记(1、 基本结构;2、Java代码编译和执行的整个过程3、内存管理和垃圾回收 4、 内存调优 )
- 探秘Java虚拟机——内存管理与垃圾回收
- Java之美[从菜鸟到高手演变]之JVM内存管理及垃圾回收
- Java内存管理和垃圾回收
- 探秘Java虚拟机——内存管理与垃圾回收
- Java内存管理(二、Java垃圾回收)
- Java性能剖析]Sun JVM内存管理和垃圾回收
- 探秘Java虚拟机——内存管理与垃圾回收(补充说明)
- Java内存管理之垃圾回收
- 探秘Java虚拟机——内存管理与垃圾回收
- [Java性能剖析]Sun JVM内存管理和垃圾回收
- 【JAVA优化编程】内存管理之——(1)垃圾回收
- Java内存管理(二、Java垃圾回收)
- 转载:JAVA的内存管理与垃圾回收
- 探秘Java虚拟机——内存管理与垃圾回收
- 探秘Java虚拟机——内存管理与垃圾回收