目 录CONTENT

文章目录

jvm理解

aprilz
2023-01-30 / 0 评论 / 0 点赞 / 835 阅读 / 750 字

1 jdk1.8存储内容

1堆 字符串常量池,静态变量,引用对象的真实对象
    新生区
    老年区
 
 
 2方法区-元空间 运行时常量池,静态常量池,类,方法
 方法区逻辑上属于堆,但是它有一个别名为Non-Heap(非堆),目的就是为了将其与Java堆区分开。
 
 3栈   8大基本类型,对象引用,实例的方法    
 
 Test test = new Test();
test为对象引用,存在栈中,对象(new Test())存在堆中。

2 分析

1栈 : 数据结构 ----队列
 
  程序 = 数据结构 + 算法  持续学习
  
  栈 先进后出(例如 弹夹), 队列 先进先出(fifo  first input first out)
  
  栈内存,主管程序的运行,生命周期和线程同步;
  线程结束,占内存也就是释放,对于栈来说,不存在垃圾回收问题。
  
  栈运行原理 :栈帧
  栈满了 : StackOverflowError
  
 2堆  一个jvm只有一个堆,大小可以调节
    新生区 (伊甸园区和幸存区[from] ,幸存区[to])  满了触发 轻GC(MinorGC)  — from和to会切换引用
    老年区    满了触发 重GC(FullGC)
    多次循环调用—最后没有可用空间导致     (OOM)OutOfMemoryError 堆内存不够
    JVM 99%调优是堆调优
   
    默认情况下:分配的总内存是电脑内存的1/4,而初始化的内存是1/64
    用 Runtime().getRuntime().maxMemory();//总内存
       Runtime().getRuntime().totalMemory();//初始化内存  
       -XX:+PrintGCDetails  //运行查看GC详情
       -Xms1m   //堆内存初始值内存1m
       -Xmx8m   //最大分配内存8m
       
       -XX:+HeadDumpOnOutOfMemoryError  //生成dump文件(java 内存快照),可用jprofiler工具打开分析
    使用-XX:HeapDumpPath配置的时候,需要保证目录的文件夹都是存在,因为它在到处dump文件的时候,不会帮你去创建不存在的目录。

使用相对路径:    
     
    nohup java -Xms512M -Xmx512M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./  -jar order-0.0.1-SNAPSHOT.jar  >/dev/null 2>&1 &
     
    使用绝对路径:     
    nohup java -Xms512M -Xmx512M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/local/log/  -jar order-0.0.1-SNAPSHOT.jar  >/dev/null 2>&1 &
    
    
GC四大算法
  1引用计数法(JVM一般不采取这种算法) 2标记-清除算法(Mark-Sweep)(老年代使用) 3复制算法(copying) (年轻代使用) 4标记整理算法(Mark-Compact) (老年代使用)
  
  升级版  标记-清除-压缩 (Mark-Sweep(标记清除算法 )+Mark-Compact(标记整理算法 )混合实现)(老年代使用)

GC使用的 分代收集算法—分代收集法是目前大部分 JVM 所采用的方法

jvm

jps -l 获取java运行实例
 pid  + 实例名
 
 jinfo pid    获取运行实例的jvm参数
 
 jstack jconsole jprofiler查看死锁排查等
 
 jprofiler性能分析

0

评论区