查看上述的jvm参数:
-Xms2048M:指最大堆内存
-Xmn1024M:指最小堆内存,一般会将最大和最小设置为相同的值
-XX:MetaspaceSize是指最大元空间,如果不设置的话默认为21M,如果此时加载的class比较多的话,那么会导致full gc,所以一定要设置该参数
有这么一段程序:
public class Test1 { public static void main(String[] args) { int a =20 ; int b =30; int c= (a+b)*50; System.out.println(c); } }
经过:javap -c Test1.class 得到反编译字节码信息
public static void main(java.lang.String[]);
Code:
0: bipush 20
2: istore_1
3: bipush 30
5: istore_2
6: iload_1
7: iload_2
8: iadd
9: bipush 50
11: imul
12: istore_3
13: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
16: iload_3
17: invokevirtual #3 // Method java/io/PrintStream.println:(I)V
20: return
}
查看jvm手册:
bipush 将一个8位带符号整数压入栈
istore_1 将int类型值存入局部变量1
iload_1 从局部变量1中装载int类型值
iadd 执行int类型的加法
imul 执行int类型的乘法
istore_3 将int类型值存入局部变量3
getstatic 从类中获取静态字段
iload_3 从局部变量3中装载int类型值
调度对象的实便方法:invokevirtual
从jvm手册我们可以得出: 现将20放入栈中,然后把20从栈中放入局部变量1中,然后把30放入栈中,然后把30从栈中放入局部变量2中,两个数相加然后压入栈中,然后做乘法把结果放入局部变量3中,然后返回结果