JVM-内存模型
来源:互联网 发布:按键精灵抓取网页数据 编辑:程序博客网 时间:2024/05/29 17:37
JVM内存模型
方法区
也称永久代,存放JVM加载的类的信息、静态变量和常量,是线程的共享区域。方法区的大小默认是16MB到64MB,可以通过-XX:PermSize和-XX:MaxPermSize来修改。
运行时常量池是方法区的一部分,用于存储由编译器生成的各种字符常量,当类被加载时,类中的字符常量会被放入方法区的常量池中。
虚拟机栈
描述了Java方法的内存模型,当一个方法被调用时,就会创建一个“栈帧”来保存临时变量表、操作栈和方法出口等信息。方法从被调用到执行完成对应了栈帧的入栈如出栈。生命周期和线程相同,是线程私有的。
临时变量表存放了编译器能够识别的所有基本数据类型和对象引用,其中64位的long和double会占用两个位置。临时变量表所占用的空间是在编译器确定的,所以在运行时栈帧并不会改变其所占用的空间大小。
本地方法栈
和虚拟机栈功能相似,区别在于虚拟机栈是为JVM调用Java方法服务的,而本地方法栈是为调用Native方法服务的。
堆
堆的Java管理的内存中最大的一块内存区域,堆也是线程共享的内存区域,在JVM启动时创建。其大小可以通过-Xms和-Xmx来设置,其中-Xms指定JVM启动时的最小堆内存,其默认为物理内存的1/64,但小于1G,-Xmx指定JVM能够分配的最大堆内存,其默认为物理内存的1/4,但不超过1G。当余堆内存小于40%时,JVM会重新分配对内存为-Xmx指定的大小,当余堆内存大于70%时,JVM会重新分配堆内存为-Xms指定的大小。为了避免频繁的堆内存重新分配,通常会将-Xms和-Xmx设置成相同的值。
现代收集器大多采用分代算法,所以,堆被分为新生代和老年代,新生代存储新创建的对象和还没有进入老年代的对象,老年代存储经过多次新生代GC仍然存活的对象。
新生代由一块Eden Space和两块大小相同的Survivor Space组成,可以通过-Xmn来指定新生代的空间大小。
有时,一个新创建的对象也有可能直接进入老年代,比如大对象和大数组。老年代的空间大小为-Xmx - -Xmn。
程序计数器
程序计数器是最小的一块内存区域,它用来记录当前线程执行的字节码指令的行号。字节码解释器工作时就是改变这个计数器来标记下一条需要被执行的字节码指令。
- [jvm]JVM内存模型
- 【理解JVM】JVM内存模型
- JVM初探 -JVM内存模型
- JVM初窥:JVM内存模型
- 理解 JVM:JVM 内存模型
- JVM内存模型
- JVM内存模型基础知识
- 图解JVM内存模型
- JVM内存模型
- 一 JVM内存模型
- JVM的内存模型
- 图解JVM内存模型
- JVM内存模型
- 图解JVM内存模型
- 【转】jvm 内存模型
- JVM 内存模型
- JVM内存模型
- JVM内存模型
- 怎样配置让apache访问日志记录真实客户端IP,而不是nginx代理服务器IP
- opencv稠密矩阵基本概念
- Matlab与机器学习-- 数据的归一化
- 如何设置eclipse左边显示包结构及包的显示方式
- 如何教计算机认识手写数字(上)
- JVM-内存模型
- STK Component 矢量几何工具系列--坐标轴(Axes)转换基础
- Java 泛型
- oj第十二周训练——汉诺塔
- Cocos2dx3.0 回调函数写法
- 98. Validate Binary Search Tree
- 今天就要开始学习linux建站了,好好加油!
- 开发中常用英文单词
- 北京赛车游戏杀号技巧