java知识点十三:JVM内存结构

原文链接: http://www.cnblogs.com/python-road/p/10475135.html

JVM内存结构

一.内存结构图

java知识点十三:JVM内存结构_第1张图片

一i个java源程序文件,会被编译为字节码文件(扩展名为class),每个java程序都需要运行在自己的JVM,然后告知JVM程序的运行入口,在被JVM通过字节码解释器加载运行。

程序计数器:保存着当前线程执行的虚拟机字节码指令的内存地址,可以看作是当前线程所执行的字节码的行号指示器。使得保证线程切换回来后,还能恢复到原先状态。(本地native丰富则计数器为空)

虚拟机栈(JVM栈):每创建一个线程时就会对应创建一个Java栈,所以Java栈也是"线程私有"的内存区域,这个栈中又会对应包含多个栈帧,每调用一个方法时就会往栈中创建并压入一个栈帧,栈帧是用来存储方法数据和部分过程结果(局部变量表、操作数栈、动态链接、方法出口等信息的数据结构,每一个方法从调用到最终返回结果的过程,就对应一个栈帧从入栈到出栈的过程。我们平时说的堆栈堆栈,栈就是指代的这个JVM栈。

本地方法栈:与虚拟机栈类似,为本地方法服务。

方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。方法区中还存在着常量池,常量池包含着一些常量和符号引用(加载类的连接阶段中的解析过程会将符号引用转换为直接引用)。

堆:堆(heap)是存储java实例或者对象的地方,是GC的主要区域,同样是线程共享的内存区域。(进一步可以细分为新生代和老年代

二.控制参数

-Xms:设置堆的最小空间大小。(初始化大小)

-Xmx:设置堆的最大空间大小。

-XX:NewSize:设置新生代最小空间大小。

-XX:MaxNewSize:设置新生代最大空间大小。

-XX:PermSize:设置永久代最小空间大小。

-XX:MaxPermSize:设置永久代最大空间大小。

-Xss:设置每个线程的堆栈大小。

完整参数信息:https://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html

参数的设置方式:http://blog.csdn.net/huanhuan_tiantian/article/details/8212885

转载于:https://www.cnblogs.com/python-road/p/10475135.html

你可能感兴趣的:(java知识点十三:JVM内存结构)