JVM内存结构
一. java内存组成介绍
1.堆内存: 用于分配所有类实例和数组的内存
2.非堆内存: 方法区、JVM内部处理或优化、类结构(常量池,字段,方法数据)、方法、构造方法
二. JVM内存区域模型
1.方法区(永久代、非堆)
1.1 用于存储虚拟机加载的类信息、常量、静态变量, 被各个线程共享
1.2 通过-XX:PermSize和-XX:MaxPermSize限制大小,默认最小/最大值为16/64MB
1.3 运行时常量池: 用于存放类加载后编译器生成的各种符号引用
2.虚拟机栈(为JVM执行的方法服务)
2.1 每个方法的生命周期, 对应一个栈帧在虚拟机栈中从入栈到出栈的过程(线程私有)
2.2 “栈帧”用于存储局部变量表(包括参数)、操作栈、方法出口等信息
2.3 局部变量表用于存放8种基本数据类型和对象引用, 其所需的内存空间在编译期即完成分配
3.本地方法栈(为Native方法服务, 与虚拟机栈类似)
4.堆
4.1 存放对象实例和数组, 被各个线程所共享
4.2 通过-Xms(最小值)和-Xmx(最大值)参数设置内存大小
4.3 堆被划分为新生代和老年代. 新生代存储新创建的对象和尚未进入老年代的对象, 老年代存储经过多次新生代GC任然存活的对象
5.程序计数器
* 当前线程所执行的字节码的行号指示器
三. 直接内存
* 直接内存既不是虚拟机内存的一部分, 也不是java虚拟机规范定义的内存区域(如jdk1.4新加入的NIO)
posted on 2018-05-27 21:38 qingshanli 阅读(…) 评论(…) 编辑 收藏