2.1 JVM运行流程:

  1. public class JVMObject {
  2. public final static String MAN_TYPE = "man"; // 常量
  3. public static String WOMAN_TYPE = "woman"; // 静态变量
  4. public static void main(String[] args)throws Exception {
  5. Teacher T1 = new Teacher();
  6. for (int i=0;i<15;i++){//进行15次垃圾回收
  7. System.gc();
  8. }
  9. Teacher T2 = new Teacher();
  10. Thread.sleep(Integer.MAX_VALUE);//线程休眠
  11. }
  12. }
  13. class Teacher {}

-Xms30m -Xmx30m -XX:MaxMetaspaceSize=30m
流程:image.png
image.png

2.2JHSDB:

将jdk目录下的sawindbg.dll复制到jre对应目录下
C:\Program Files\Java\jdk1.8.0_161\lib>java -cp .\sa-jdi.jar sun.jvm.hotspot.HSDB
image.png

栈帧之间:上一个栈帧的操作数栈(interpreter expression stack)和下一个栈帧的局部变量区(interpreter locals area)会共享

2.3常量池(方法区Metaspace):

静态常量池
运行时常量池
字符串常量池
String a =new String(“king”).intern();
//去字符串常量池找到是否有等于该字符串的对象,如果有,直接返回对象的引用。不会创建String对象
image.png
image.png

2.4常见溢出(out of memory):

内存溢出
栈溢出(-Xss=1m
堆溢出(-Xms30m -Xmx30m -XX:+PrintGCDetails)
方法区溢出(-XX:MetespaceSize=10M -XX:MaxMetaspaceSize=10M)
本机直接内存溢出(-XX:MaxDirectMemorySize=100m)