JVM基础入门

内存模型

 

 

 

我理解的jvm:

个人理解的jvm流程:
.java反编译为.class文件 经类加载器到上图的内存模型

方法区:存静态 常量区(String在里面) 
本地栈区:调本地服务其它库的方法
计数器:线程计数器(了解)
栈区:据其名知其意 就是栈 栈区别于队列 先进后出 后进先出
         一个线程就会有一个栈
        存方法和基本数据类型  
        例子:一个线程中调a方法 a进栈 a方法中调了b方法 b再进栈 以此类推
                b方法跑完后 b就出栈 之后a跑完a再出栈
    正因为出栈 所以栈区一般情况下比较小 也不会出现内存泄露

堆区:存对象 数组 
  jdk1.8后堆没了永久区 多了个元空间 方法区在元空间里面 即常量也是在栈区中了 堆区不同栈区 只有一个 一般情况下内存泄漏都是堆区 默认堆分配的最小内存xms是物理机的1
/64 最大内存xmx是1/4 堆区分年轻区(伊甸区|幸存0区|幸存1区) 老年区 元空间

 

 

 其中的堆区是重点

堆GC过程:

每次new新对象 都是在年轻区的伊甸区中 伊甸区满了 jdk会触发了GC伊甸区
 将还存活对象移到幸存区 
默认GC触发15次后会Full GC整个年轻区 将还存活对象移到老年区 若还满了就会内存溢出OOM

 

 

调优工具及调优方式

 

posted @ 2021-02-02 23:17  小白小白小白小白  阅读(61)  评论(0编辑  收藏  举报