专栏名称: ImportNew
伯乐在线旗下账号,专注Java技术分享,包括Java基础技术、进阶技能、架构设计和Java技术领域动态等。
目录
相关文章推荐
芋道源码  ·  SQLite这么小众的数据库,到底是什么人在用? ·  22 小时前  
芋道源码  ·  别乱分层,PO、VO、DAO、BO、DTO、 ... ·  昨天  
芋道源码  ·  抱歉,最近我劝各位真的别轻易离职...... ·  昨天  
芋道源码  ·  一款轻便、安全、免费的远程桌面工具 ·  2 天前  
51好读  ›  专栏  ›  ImportNew

JVM(2): JVM 内存结构

ImportNew  · 公众号  · Java  · 2017-03-11 21:15

正文

请到「今天看啥」查看全文



先看一张图,这张图能很清晰的说明JVM内存结构布局。


Java的内存结构



JVM内存结构主要有三大块:堆内存、方法区和栈。堆内存是JVM中最大的一块由年轻代和老年代组成,而年轻代内存又被分成三部分,Eden空间、From Survivor空间、To Survivor空间,默认情况下年轻代按照8:1:1的比例来分配;


方法区存储类信息、常量、静态变量等数据,是线程共享的区域,为与Java堆区分,方法区还有一个别名Non-Heap(非堆);栈又分为java虚拟机栈和本地方法栈主要用于方法的执行。


在通过一张图来了解如何通过参数来控制各区域的内存大小


控制参数


-Xms设置堆的最小空间大小。


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


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


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


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


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


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


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


老年代空间大小=堆空间大小-年轻代大空间大小


从更高的一个维度再次来看JVM和系统调用之间的关系



方法区和对是所有线程共享的内存区域;而java栈、本地方法栈和程序员计数器是运行是线程私有的内存区域。


下面我们详细介绍每个区域的作用







请到「今天看啥」查看全文