一、定义:虚拟机就是一台虚拟的机器。它是一款软件,用来执行一系列的虚拟计算指令,一般虚拟机可分为系统虚拟机和程序虚拟机。JAVA虚拟机术语程序虚拟机。
二、虚拟机参数:
1.-XX:+PrintGC :每次触发GC的时候打印相关日志; -XX:+PrintGCDetails:更详细的GC日志; -Xms:堆初始值; -Xmx:堆最大可用值。 总:在实际工作中,我们可以直接将初始的堆大小与最大堆大小相等,这样的好处是可以减少程序运行时垃圾回收次数,从而提高效率。
2.-Xmn :新生代大小,一般设为整个堆得1/3到1/4左右; -XX:SurvivorRatio:设置新生代中eden区和from/to空间的比例关系为n/1。 总:不同的堆分布情况,对系统执行产生一定的影响,在实际工作中,应该根据系统的特点做出合理的配置,基本策略:尽可能将对象预留在新生代,减少老年代的GC次数。除了可以设置新生代的绝对大小(-Xmn),可以使用(-XX:NewRatio)设置新生代和老年代的比例:-XX:NewRatio=老年代/新生代
3.堆内存溢出:在JAVA程序运行过程中,如果堆空间不足,则会抛出内存溢出的错误(Out Of Memory)OOM,一旦这类问题发生在生产环境,可能会严重影响业务中断,JAVA虚拟提供了java.long.OutOfMemoryError,解决方案。 如果我们在web项目中遇到了堆内存溢出,修改tomcat堆内存配置。
4.栈内存溢出:JAVA虚拟机提供参数-Xss来指定线程最大占空间,整个参数也直接决定了函数可调用的最大深度。
5.内存溢出与内存泄露区别:内存泄露是指无用对象持续占有内存或无用对象的内存得不到及时释放,从而造成的内存空间的浪费称为内存泄漏。 内存溢出指超出了配置内存大小。