跟踪加载的类 。
-XX:-TraceClassLoadingPreorder
跟踪所有已加载的类(未加载) 。(1.4.2中介绍) 。
-XX:-TraceClassResolution
跟踪常量池的决议 。(1.4.2中介绍) 。
-XX:-TraceClassUnloading
跟踪卸货的类 。
-XX:-TraceLoaderConstraints
加载器约束的跟踪记录 。(介绍6) 。
-XX:+PerfDataSaveToFile
在退出时保存jvmstat二进制数据 。
-XX:ParallelGCThreads=n
在年轻和旧的并行垃圾收集器中设置垃圾收集线程的数量 。默认值随JVM运行的平台而异 。
-XX:+UseCompressedOops
允许使用压缩指针(对象引用表示为32位的偏移量,而不是64位指针)以优化64位性能,Java堆大小小于32gb 。
-XX:+AlwaysPreTouch
在JVM初始化期间预触摸Java堆 。因此,堆的每一页都是在初始化过程中,而不是在应用程序执行期间递增的 。
-XX:AllocatePrefetchDistance=n
设置对象分配的预取距离 。在这个距离(以字节为单位),在最后一个分配对象的地址之外,以新对象的值写入内存 。每个Java线程都有自己的分配点 。默认值随JVM运行的平台而异 。
-XX:InlineSmallCode=n
仅当生成的本机代码大小小于这个时,内联一个以前编译的方法 。默认值随JVM运行的平台而异 。
-XX:MaxInlineSize=35
一个方法的最大字节码大小 。
-XX:FreqInlineSize=n
最大字节码大小的经常执行的方法被内联 。默认值随JVM运行的平台而异 。
-XX:LoopUnrollLimit=n
使用服务器编译器中间表示节点的展开循环体的计数小于该值 。服务器编译器使用的限制是这个值的函数,而不是实际值 。默认值随JVM运行的平台而异 。
-XX:InitialTenuringThreshold=7
设置在并行的年轻收集器中用于自适应GC分级的初始阈值 。招贴阈值是指一个物体在被提升到旧的或终身的一代之前,在年轻的集合中存活的次数 。
-XX:MaxTenuringThreshold=n
设置在自适应GC分级中使用的最大阈值 。当前最大的值是15 。并行收集器的默认值为15,CMS的默认值为4 。
-Xloggc:<filename>
日志GC详细输出到指定的文件 。详细输出由正常的详细GC标志控制 。
-XX:-UseGCLogFileRotation
启用GC日志旋转,需要-Xloggc 。
-XX:NumberOfGClogFiles=1
设置旋转日志时要使用的文件数量,必须是>= 1 。旋转的日志文件将使用以下命名方案,<filename> 。0,<文件名> 。1,…,<文件名> .n-1 。
-XX:GCLogFileSize=8K
日志文件的大小将会被旋转,必须是>= 8K 。
JDK6、7、8的JVM区别
1.6

文章插图

文章插图
?
1.7

文章插图

文章插图
?
1.8

文章插图

文章插图
?
可以看到1.6到1.7可以说变化并不大,但到了1.8时,大家可以发现非常大了,出现了元空间的区域,并这个区域是在本地内存中的,且这个区域是存储类的元数据信息的,类的常量、方法等 。
看起来元空间似乎和之前的方法区/永久代没有什么区别,元空间是使用本地内存的,受制于本地内存大小,在没有通过(MaxMetaspaceSize)VM参数设置时,会根据程序的运行时间动态调控大小 。
那么也就不会再出现OOM的情况了,但元空间只是为了解决OOM的问题吗?
为什么要有元空间?
永久代主要是用于存储类的信息,但很难确定类的大小,所以在指定的时候就有点困难,容易造成OOM,另外一个原因就是Hotspot和JRockit的合并,JRockit是没有永久代的 。
为什么Hotspot要和JRockit合并?
必然合并肯定是要实现互补的,JRockit的任务控制、垃圾收集算法、监控等能力都是比较优秀的,而Hotspot在性能优势也就使得其比较复杂,所以结合双方等各个优点进行合并,形成更强大的JVM 。
另外Hotspot和JRockit都是Oracle旗下的 。
元空间带来的影响?
有部分的数据移到堆,所以在1.8的时候会发现堆的空间会增加的比以往快,由于是使用本地内存,如果吞吐量大的时候,会带来大量的交换区交换 。
推荐阅读
- javascript中的事件
- 哇塞!GitHub 上这些 Java repo 太强了吧,看完都变大佬
- 一名高级的Javaer,应该了解的 MYSQL 高级知识点
- 我也没想到,Java开发 API接口可以不用写 Controller了
- Java中的封装、继承和多态,你真的都懂了吗
- 什么是 Java 的无服务器化?
- Javascript实现两变量值的互换
- java按顺序执行线程
- linux系统上查看载体为实体机还是虚拟机
- 线程安全问题无大小:Java中的线程安全之操作共享数据分类
