LR 杂记--JVM内存结构剖析

JVM桟:
通过-Xss来指定桟内存的大小,JVM桟是线程私有的,伴随线程的生命周期,桟内存中存放当前线程中局部基本类型(java中定义的八种基本类型: boolean、char、byte、short、int、long、float、double),非基本类型的对象在JVM栈上仅存放一个指向堆上的地址,因此Java中基本类型的 变量是值传递,而非基本类型的变量是引用传递。
当JVM栈的空间不足时,会抛出StackOverflowError的错误
JVM堆(Heap):
JVM用来存储对象实例以及数组值得区域,java中通过new创建的对象的内存都在此分配,Heap中的对象的内存需要等待GC回收,Heap在32位系统上最 大为2G,64位系统上没有限制,其大小通过-Xms(最小Heap内存)和-Xmx(最大Heap内存)控制,默认当空余堆内存小于40%时,JVM会增大Heap的大小到 -Xmx指定的大小,可通过-XX:MinHeapFreeRatio=来指定这个比例,当空余堆内存大于70%时,JVM会将Heap的大小往-Xms指定的大小调整, 可通过-XX:MaxHeapFreeRatio=来指定这个比例,但对于运行系统而言,为了避免频繁的Heap Size的大小,通常都会将-Xms和-Xmx的值设成一样,因此 这两个用于调整比例的参数通常是没用的。
当堆中需要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息。

方法区域(MethodArea):
方法区域存放了所加载的类的信息(名称,修饰符等),类中的静态变量,类中定义为final类型的常量,类中的Field信息,类中的方法信息,当通过 Class对象中的getName,isInterface等方法来获取信息时,这些数据都来源于方法域 方法域也是全局共享的,在虚拟机启动时在一定的条件下会被GC,当方法区域需要使用的内存超过其允许的大小时,会抛出OutOfMemory的错误信息
在Sun jdk中这块区域对应的为PermanetGeneration,称为持久代,默认为64M,通过-XX:PermSize及-XX:MaxPermSize来指定其大小
运行时常量池(RuntimeConstant Pool)
类似C中的符号表,存放的为类中的固定的常量信息、方法和Field的引用信息等,其空间从方法区域中分配。类或接口的常量池在该类的class文件
被java虚拟机成功装载时分配。
本地方法堆栈(NativeMethod Stacks)
JVM采用本地方法堆栈来支持native方法的执行,此区域用于存储每个native方法调用的状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晒酷网-Ray

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值