带你走进 JVM Memory Model

带你走进 JVM Memory Model


  • JVM内存结构主要由:堆内存(Heap),方法区(Method Area),栈(Stack)三部分组成
    JVM_memory_model
    从上图我们可以知道:

    1.堆内存占据了JVM的大部分内存,同时它又可以细分为年轻代(Young Generation)和老年代(Old Generation)两块,其中新生代又可进一步细分为伊甸区(Eden Space),幸存者区域(Survivor Space),默认情况下年轻代按照 8:1:1比例分配。

    2.方法区存储类信息,常量,静态变量等数据,与堆内存同属线程共享区,为与Java堆区分,方法区还有一个别名Non-Heap(非堆)。

    3.栈区分为虚拟机栈(java stack)和本地栈(native method stack)用于方法的执行,为线程私有

    补充:Java堆是垃圾收集器管理的主要区域,因此很多时候也被称做“GC堆”。如果从内存回收的角度看,由于现在收集器基本都是采用的分代收集算法,所以Java堆中还可以细分为:新生代和老年代;再细致一点的有Eden空间、From Survivor空间、To Survivor空间等。


  • 下面我们通过一张图来了解如何使用参数控制各区域内存大小
    JVM_memory_divide
    控制参数:

    • -Xmx设置最大堆空间
    • -Xms设置最小堆空间
    • -XX:MaxNewSize设置最大新生代空间
    • -XX:NewSize设置最小新生代空间
    • -XX:MaxPermSize设置最大永久代空间
    • -XX:PermSize设置最小永久代空间
    • -Xss设置每个线程的堆栈大小

    没有直接设置老年代的参数,但是可以设置堆空间大小和新生代空间大小两个参数来间接控制。
    老年代空间大小=堆空间大小-年轻代大空间大小


  • 现在从更高的一个维度再次来看JVM和系统调用之间的关系
    JVM_SYS_invoke
    方法区和堆是所有线程共享的内存区域;而java栈、本地方法栈和程序员计数器是运行是线程私有的内存区域。

  • Conclusion
Areaavailablecontain
Heapshared among all threads(global)stores all created objects and arrays
Method Areashared among all threads(global)stores class structures like field,method data,code for methods and constructors,etc
Stackprivate stack(local)hold reference to objects in heap and store variables and primitive types
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值