java分存分配


-Xmx 最大堆内存。最大堆内存是指新生代和老年代的大小之和的最大值 

-Xms 最小堆内存。也就是JVM启动时,所占据的操作系统内存大小。


java程序在运行时,首先会被分配-Xms指定的内存大小。并尽可能尝试在这个空间段内运行程序。当-Xms指定的内存大小无法满足应用程序时。JAM才会向操作系统申请更多的内存,直到内存达到-Xmx珠最大内在为止。  若超出-Xmx的值。抛出OutOfMemoryError异常。


-Xmn 用于设置新生代大小。设置一个较大的新生代会减小老年代的大小。  这个参数对系统性能以及GC行为有很大的影响。新生代一般为整个堆空间的 1/4 到 1/3 左右。

-XX:NewSize 用于设置新生代的初始大小, -XX:MAXNewSize 设置新生代最大值。  只设置-Xmn的效果等同于设置了相同的 -XX:NewSize 和 -XX:MAXNewSize。

若设置不同的-XX:NewSize和-XX:MAXNewSize可能会导致内存震荡,从而产生不必要的系统开销。


-XX:MaxPermSize 可以设置持久代的最大值,-XX:PermSize 可以调协持久代的初始大小。 持久代的大小直接决定了系统可以支持多少个类定义和多少常量 。

一般来说MaxPermSize调置为64M 已经可以满足绝大部分应用程序正常工作。如果依然出现永久区溢出。可以调为128.  还不能满足,则应该考虑优化系统的设计。


-Xss 参数设置线程栈。在线程中进行局部变量分配,函数调用时,都需要在栈中开辟空间。



字节码运行的两种方式


解释运行:解释运行以解释方式运行字节码,解释执行的意思是“读一句执行一句”

编译运行(JIT):将字苊码编译成机器码,直接执行机器码,运行时编译,编译后性能有数量级的提升(保守估计差10倍以上)