java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 程序设计语言和 Java 平台(即 JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
下面小编就为大家带来一篇基于 jvm java 内存区域的介绍。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
总的就是
java 的内存模型
内存模型又分堆内存(heap)和方法区 (有时也称为 non-heap) 和栈
堆又分新生代 (Young) 和老年代(old/Tenured)
新生代又分默认比例为 8:1:1 的 eden 空间、from survivor 空间、to survivor 空间
当进行垃圾回收时, eden、survivor from 存活得对象会复制到 servivor to 空间
接着 from 与 to 空间互换.(当 from 区的对象足够老时, 即标记的次数达到老年级别,便到老年代去)
内存的大小设置参数可以如下一张图说明
-XMS: 堆的最小空间
-XMX:堆的最大空间
-PermSize:方法区的最小空间
-MaxPermSize:方法区的最大空间
-Xss: 每个线程的堆栈空间
-newSize: 新生代最小空间
-maxNewSize: 新生代最大空间
老年代内存可以通过设置堆的大写和新生代的大小来控制
老年代内存 = 堆内存 - 新生代内存
栈
程序计数器
线程私有,控制着字节码所执行的行数. 调用本地方法 (native) 时为空
当前线程所执行的字节码的行号指示器,字节码解释器就是在工作时通过改变计数器的行号来获获取要执行的字节码指令. 调用本地方法 (native) 时计数器为空
虚拟机栈
线程私有,java 执行方法的内存模型
每个方法执行的时候都会创建一个栈帧,用于存放局部变量、操作数栈、动态链接、方法出口等信息
局部变量表:基本数据类型、对象引用、long 和 double 类型占两个局部变量空间
每调用一个方法,都会对参数进行压栈
本地方法栈
线程私有. 调用 native 方法时
堆:
堆内存
线程共享, 对象的实例以及数组都存储在这里
堆又分新生代、老年代
在分代收集算法中,新生代又分 eden 空间、from survitor 空间 和 to survitor 空间). 它们之间内存比例为 8:1:1
方法区
线程共享
存放类的信息、常量、静态变量、即时编译后的代码
方法区下又有运行时常量池: 存放编译期生成的字面量和符号引用
以上这篇基于 jvm java 内存区域的介绍就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持 PHPERZ。
来源: http://www.phperz.com/article/17/1228/356750.html