欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > JVM和类加载机制-01[JVM底层架构和JVM调优]

JVM和类加载机制-01[JVM底层架构和JVM调优]

2024/11/30 10:39:23 来源:https://blog.csdn.net/weixin_43216437/article/details/140434122  浏览:    关键词:JVM和类加载机制-01[JVM底层架构和JVM调优]

JVM底层

  • Java虚拟机内存模型
    • JVM组成部分
      • 五大内存区域各自的作用
        • 虚拟机栈(线程栈)
          • 栈帧内存区域
        • 本地方法栈
        • 程序计数器
          • 为什么jvm要设计程序计数器?
        • 方法区
  • JVM优化-堆详解
    • JVM底层垃圾回收机制
    • jvm调优工具
      • jvisualvm.exe
      • Arthas工具使用

Java虚拟机内存模型

  • JVM跨平台原因
    就是在JVM层面对各个操作系统的指令做了不同处理
    在这里插入图片描述

JVM组成部分

在这里插入图片描述

五大内存区域各自的作用

虚拟机栈(线程栈)

每次运行的时候,都会给线程栈分配一部分内存,有多少个线程就分配多少个。来存放各自线程运行时的变量,说白了就是工作内存,工作内存哪里来的就是虚拟机栈中分配来的
在这里插入图片描述

栈帧内存区域

一个方法对应一个栈帧内存区域,
在这里插入图片描述
在这里插入图片描述

本地方法栈

方法执行到了本地方法,本地方法执行也需要内存空间,就从本地方法栈中分配一部分给本地方法。本地方法就是naitve修饰的方法(底层是C++)
在这里插入图片描述

程序计数器

某行程序在方法区中的内存地址
在这里插入图片描述

为什么jvm要设计程序计数器?

在这里插入图片描述
比如上面的程序,如果是多线程情况下,A线程执行到第4行的时候,被其他线程抢占资源,其他线程执行,其他线程完毕,A线程再回头执行,如果没有程序计数器,它就不知道它之前执行到第几行,就得重新执行,有了程序计数器,A线程一看,我之前执行到第4行,现在就从第4行开始再执行。

如果栈中存放的是变量是对象也就是引用类型的变量,那栈中存放的就是指向对象的指针,对象就存放在堆中,所有线程共享
在这里插入图片描述

方法区

存放常量+静态变量+类信息

方法区中存放的静态变量是引用类型的,那么方法区中存的即使静态引用变量的指针,对象还是存放到堆中。

在这里插入图片描述

JVM优化-堆详解

老年代占比2/3,年轻代占1/3。年轻代:8:1:1,年轻代又分为伊甸园区、s0、s1
在这里插入图片描述

JVM底层垃圾回收机制

在这里插入图片描述
新创建的对象都在新生代的伊甸园区,当伊甸园区满了后,字节码执行引擎就会开启垃圾收集线程,开始进行垃圾回收
常见的垃圾回收算法:

  • 引用计数法(已经淘汰了)
    在这里插入图片描述
  • 根可达性分析算法
    在这里插入图片描述垃圾收集线程根据根可达算法,找到垃圾后把非垃圾转移到survivor(幸存者)区域,而垃圾就被直接干掉了
    survivor区域的对象会在s0和s1之间反复挪动,一个minor gc挪动一次,当挪动15次也就是minor gc15次后,也叫分代年龄15次,还没有被干掉,就移动到老年代。
    在这里插入图片描述

jvm调优工具

jvisualvm.exe

调出jdk自带jvisualvm.exe工具进行查看
在这里插入图片描述

  • 测试代码
public class HeapTest {byte [] a=new byte[1024*100]; //100KBpublic static void main(String[] args) throws InterruptedException {ArrayList<HeapTest> heapTests=new ArrayList<>();while (true){heapTests.add(new HeapTest());TimeUnit.SECONDS.sleep(2);}}
}

执行本地方法就可以监视到
在这里插入图片描述

Arthas工具使用

在这里插入图片描述

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com