1. 运行时数据区
1)堆:线程共享,存放新建的对象。
2)方法区:线程共享,存放类信息、常量、静态变量等。
3)虚拟机栈:线程独立,又叫线程栈。用来存放线程内部的局部变量,先进后出FILO。栈由栈帧组成,栈帧又分为:局部变量表,操做数栈,动态连接,方法出口。线程方法里产生的较小的局部对象也可能存放在虚拟机栈中。局部变量表:存放局部变量。
栈帧:java为每个方法,在栈内存里分配一块栈帧,用来隔离每一个方法里的局部变量。
操做数栈:线程运行时,用于处理数据的临时内存空间。
动态连接:
方法出口:记录方法执行完成时返回当上级方法的执行位置。
4)本地方法栈:java调用本地方法(native 修饰的方法)时,分配的内存空间。
5)程序计数器:当前线程所执行的字节码行号指示器,记录代码执行到哪一行java
2. 参数设置
堆:
-Xms 最小值。
-Xmx 最大值。
方法区:
-XX:MetaSpaceSize 默认 21M,当内存快满的时候会进行gc,根据gc后剩余的空间大小判 断是否须要扩容。生产中通常设置成256M。
-XX:MaxMetaSpaceSize 默认 -1,不限制最大值。
栈:
-Xss 默认1M