一. JVM内存模型:
Jvm内存模型是学好Java很重要的一部分,该部分学习能让我们在系统运维的时候,或者优化服务器的时候能够有方法,懂原理。
二. Jvm关键参数:
1. 堆大小设置参数:
-Xms -Xmx 这个参数是设置堆最大值与最小值。
在线上常常将这两个值设置成一样大,免去JVM调整堆大小影响性能,一般该值设置为服务器可用内存的的最大值80%。
-Xmn 这个参数是设置年轻代大小,SUN官方推荐该值配置为整个堆得3/8。
-XX:PermSize 这个参数是设置非堆内存的初始值, 默认是物理内存的1/64。
-XX:MaxPermSize 这个参数是设置最大的非堆内存,默认是物理内存的1/4。
如果程序中有比较大的文件导出时,一定要把这两个值设置上,否则可能会报内存溢出异常。
如果这个区有内存溢出的情况,大量使用反射有可能会引起该异常。
有一个比较好的解决方法:增加或增大:-XX:MaxPermSize=XXXM
增强版解决方法:-XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled
-server 服务器模式,默认是-client模式,请务必作为第一个参数。
-XX:SurvivorRatio 这个参数是设置Eden和Survivor区的大小比例。
-Xss 这个参数是设置每个线程的栈大小,一般设置不易超过1M大小,否则容易报异常内存溢出。
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/home/xmail/errorLog 这个参数是设置JVM崩溃的时候会打印出heap dump。
-XX:+AggressiveOpts 这个参数是设置JDK版本升级时,你的JVM都会使用最新加入的优化技术。
-Djava.awt.headless=true 这个参数是解决图表不兼容问题,一般放在最后设置。