JVM总结

2020-03-21  本文已影响0人  知而乐者

JVM内存模型

image.png

栈内存模型

栈模型.png

局部变量表

操作数栈

动态链接

方法返回地址

附加信息

其他

通过逃逸分析如果确认没有逃逸就可以直接将对象分配到栈中,对象的生命周期就和栈一样避免垃圾回收。java1.7后默认开启

public static StringBuffer craeteStringBuffer(String s1, String s2) {
    StringBuffer sb = new StringBuffer();
    sb.append(s1);
    sb.append(s2);
    return sb;
}
 
public static String createStringBuffer(String s1, String s2) {
    StringBuffer sb = new StringBuffer();
    sb.append(s1);
    sb.append(s2);
    return sb.toString();
}

栈总结演示

public int calculate(){  
    int a = 100;  
    int b = 200;  
    int c = 300;  
    return (a + b) * c;  
}  

javap之后看到,Stack=2, Locals=4代表需要2个操作数栈和4个slot局部变量表:

public int calculate();  
  Code:  
   Stack=2, Locals=4, Args_size=1  
   0:   bipush  100  
   2:   istore_1  
   3:   sipush  200  
   6:   istore_2  
   7:   sipush  300  
   10:  istore_3  
   11:  iload_1  
   12:  iload_2  
   13:  iadd  
   14:  iload_3  
   15:  imul  
   16:  ireturn  
}  

执行过程,中栈的使用:


image.png
image.png
image.png image.png
image.png
image.png

堆内存模型

image.png

新生代

老年代

方法区内存

程序内存分配演示

image.png


image.png

HotSpot默认使用直接指针

垃圾回收

见:https://www.jianshu.com/p/30c36d2b914f

JVM命令查看

见:https://www.jianshu.com/p/f461d3582790

上一篇 下一篇

猜你喜欢

热点阅读