一. 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 阅读() 评论() 编辑 收藏

版权声明:本文为qingshanli原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/qingshanli/p/9097518.html