jdk8中类的元数据和运行时常量池等原先方法区的内容大多都放在metaspace(元空间)中、而字符串常量池和静态成员变量留在heap(堆)中,并取消了永久区。
jdk7及之前,类的元数据信息和常量池都是在永久代(方法区)中,但到了jdk7,静态(成员)变量和字符串常量池从方法区中剥离到了heap(堆)中。
用编辑器设置vm options,可模拟不同的JVM环境对应用运行环境进行优化
最初方法区包含的信息:
类信息。。
字段。。
方法。。
静态变量和全局变量
运行时常量池(里面包含字符串常量池)
Class引用
ClassLoader的引用
方法表
常量池中存放的就是用final修饰的类的成员变量,包括特殊的如static修饰的静态常量,final String定义的字符串常量。当然,方法内的final修饰的属性–属于局部变量,归属于虚拟机栈的局部变量表。
配置参数如下:
-Xmx1024m 是指设置可申请的最大堆空间为1024M,
并且,在未设置 -XX:MaxDirectMemorySize时,则默认直接内存也是这个值。
-XX:MaxDirectMemorySize //直接空间最大可申请数
-Xms768m 即设置可申请的最小堆空间为768M
-Xss128k 即每个线程堆栈的大小为128k
-Xmn256M 即设置年轻代(eden区+s0+s1)为256M
-XX:SurvivorRatio=8 即s0+s1区占比为(10-8)=2 ,即两者各占10%
-XX:NewRatio=4 即设置老年代:年轻代=4:1,即年轻代占1/(4+1)=10%
-XX:MaxTenuringThreshold=0 设置垃圾最大年龄,0即直接进入老年代,不在s0/s1复制;
-XX:MetaspaceSize -XX:MaxMetaspaceSize //元空间初始化和最大的可申请空间
-XX:MetaspaceSize=64m -XX:MaxMetaspaceSize=128m
-XX:+UseParallelGC 设置用并行回收器
-XX:+ParallelGCThreads=20 并且开20个并行线程
-XX:+UseConcMarkSweepGC -XX:+UseParNewGC 设置(年老代) 和年轻代为并发收集
辅助信息
-XX:+PrintGCDetails 打印GC时的详细信息
-XX:+PrintHeapAtGC 打印GC前后的详细 堆栈信息
-XX:+PrintGCTimeStamps
-XX:+PrintGCApplicationConcurrentTime 打印每次垃圾回收前,程序未中断执行的时间
收集器设置
-XX:+UseSerialGC 设置串行收集器
-XX:+UseParallelGC 设置并行收集器
-XX:+UseParalledlOldGC 设置并行年老代收集器
-XX:+UseConcMarkSweepGC 设置并发收集器
-XX:+HeapDumpOnOutOfMemoryError 当JVM发生OOM时,自动生成DUMP文件
1.7及更低版本的配置
非堆区(永久代)参数配置
(1)-XX:PermSize:非堆区初始化内存分配大小。
(2)-XX:MaxPermSize:非堆区分配的内存的最大上限
详细表格参照这个内容:
https://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html