文章部分来源图灵学院,部分来源网络博文,因为链接具体找不到,这里深感抱歉,如果介意,请留言
知乎:https://zhuanlan.zhihu.com/p/400076360
局部变量表:用于存放方法的局部变量和变量所等于的值。
操作数栈:用于临时存放变量操作出的值。
如:int a = 1 + 2; 程序会将a放入局部变量表。然后在操作数栈中计算出值,在将值放入局部变量表中,得到a = 3.
动态链接:方法中带有的符号引用所指向的具体直接引用。
方法出口:方法的返回值。
JVM内存参数配置
Spring Boot程序的JVM参数设置格式(Tomcat启动直接加载bin目录下catalina.sh文件里):
java ‐Xms2048M ‐Xmx2048M ‐Xmn1024M ‐Xss512K ‐XX:MetaspaceSize=256M ‐XX:MaxMetaspaceSize=256M ‐jar microservice‐eurek a‐server.jar
堆配置:
‐Xms:设置初始化java堆的大小
‐Xmx:设置最大java堆的大小
‐Xmn:设置新生代堆的大小
栈设置:
‐Xss:设置每个线程栈的大小。
注意:当程序进行无限制递归是,会存在栈溢出。-Xss设置的越小,能递归层次就越少。(StackOverflowError),因为JVM每一次递归调用,都会开启一个新的栈空间。
方法区:
‐XX:MetaspaceSize:指定方法区出发Full GC的初始阈值(方法区无固定初始大小),以字节为单位,默认是21M,达到该值就会触发Full GC进行类型卸载,同时收集器会对该值进行调整:如果释放了大量空间,就适当降低该值;如果释放了很少的空间,那么在不超过-XX:MaxMetaspaceSize(如果设置了的话)的情况下,适当提高该值。这个跟早期jdk版本的-XX:PermSize参数意思不一样,-XX:PermSize代表永久代的初始容量。
‐XX:MaxMetaspaceSize:设置方法区最大值,默认是-1,即不限制,或者说只受本地内存大小限制。
由于调整元空间的大小需要Full GC,这是非常昂贵的操作,如果应用在启动的时候发生了大量Full GC,通常都是由于永久代(元空间)发生了大小调整,基于这种情况,一般建议在JVM参数中将MetaspaceSize和MaxMetaspaceSize设置成一样的值,并设置的比初始化值要大,对于8G物理内存的机器来说,一般会将这两个值都设置成256M。