JDK
建议下载JDK8或者JDK11
又或者
https://www.oracle.com/cn/java/technologies/javase/javase-jdk8-downloads.html (需要注册)
又或者
https://bell-sw.com/pages/downloads/
下载好之后安装就不多说了。
远程调试: java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=8003 -Djava.net.preferIPv4Stack=true -jar ./app.jar
Java启动参数分类
类别1: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容;
类别2: 其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足,且不保证向后兼容;
类别3: 其三是非Stable参数(-XX),此类参数各个jvm实现会有所不同,将来可能会随时取消,需要慎重使用;
执行命令脚本:
-Xms4096M -Xmx4096M -Xmn3072M -Xss1M -XX:MetaspaceSize=256M -XX:MaxMetaspaceSize=256M
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFaction=92
-XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0
-XX:+CMSParallelInitialMarkEnabled -XX:+CMSScavengeBeforeRemark
-XX:+DisableExplicitGC -XX:+PrintGCDetails -Xloggc:gc-%t.log
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/app/oom
- -Xms:设置初始 Java 堆大小,通常为操作系统可用内存的1/64大小
- -Xmx:设置最大 Java 堆大小,通常为操作系统可用内存的1/4大小
- -Xmn:配置新生代的内存大小,对 -XX:newSize、-XX:MaxnewSize两个参数的同时配置
- -Xss:设置 Java 线程堆栈大小
- -XX:MetaspaceSize:元空间大小
- -XX:MaxMetaspaceSize:最大的元空间大小
- -XX:+UseParNewGC:Parallel是并行的意思,ParNew收集器是Serial收集器的多线程版本,使用这个参数后会在新生代进行并行回收,老年代仍旧使用串行回收。新生代S区任然使用复制算法。操作系统是多核CPU上效果明显,单核CPU建议使用串行回收器。打印GC详情时ParNew标识着使用了ParNewGC回收器。默认关闭。
- -XX:+UseConcMarkSweepGC:Concurrent Mark Sweep 并发标记清除,即使用CMS收集器。它是和应用程序线程一起执行,相对于Stop The World来说虚拟机停顿时间较少。停顿减少,吞吐量会降低。它使用的是 标记清除算法,运作过程为四个步骤,分别是 初始标记—并发标识—重新标记—并发清除。它是老年代的收集算法,新生代使用ParNew收集算法。默认关闭。(CMS收集器的缺点是对服务器CPU资源较为敏感,在并发标记时会降低吞吐量。它使用的标记清除算法也会产生大量空间碎片,空间碎片的存在会加大Full GC的频率,虽然老年代还有足够的内存,但是因为内存空间连续,不得不进行Full GC。)
- -XX:CMSInitiatingOccupancyFaction:比如设定值为92%,就是老年代空间使用超过92%了,此时就会自行触发Full GC。
- -XX:+UseCMSCompactAtFullCollection:默认打开;意思是FUll GC之后再次进行Stop the world,停止线程工作,然后进行碎片整理,把活着的对象放在一起,空出来大片的连续内存空间,避免内存碎片;
- -XX:CMSFullGCsBeforeCompaction:为0每次FULLGC之后对内存碎片进行整理;
- -XX:+CMSParallelInitialMarkEnabled:表示在初始标记的多线程执行,减少STW(Stop The World);
- -XX:+CMSScavengeBeforeRemark:这个参数会在CMS的重新标记阶段之前,先尽量执行一次Young GC。
- -XX:+DisableExplicitGC:禁止显式执行GC,不允许你来通过代码触发GC。
- -XX:+PrintGCDetails:用于打印输出详细的GC收集日志的信息。
- -Xloggc:gc.log:
- -XX:+HeapDumpOnOutOfMemoryError:在OOM的时候自动dump内存快照出来
- -XX:HeapDumpPath:把内存快照存放的位置
使用HotSpot VM的话使用以下几个参数即可
-XX:MaxGCPauseMillis 最大GC停顿时间(毫秒)
-XX:GCTimeRatio CPU用在GC上的时间比例,cpu最大用的时间比例为:1/(1+GCTimeRatio)
上述两个可以让虚拟机自动配置其他参数
-Xms:设置初始 Java 堆大小,通常为操作系统可用内存的1/64大小
-Xmx:设置最大 Java 堆大小,通常为操作系统可用内存的1/4大小
-XX:+HeapDumpOnOutOfMemoryError:在OOM的时候自动dump内存快照出来
-XX:HeapDumpPath:把内存快照存放的位置