JVM的快速入门

    科技2025-04-11  14

    文章目录

    JVM的位置JVM的体系结构类加载器及双亲委派机制沙箱安全机制native、方法区栈堆使用JProfiler工具分析OOM原因GC算法JMM

    JVM的位置

    JVM的体系结构

    程序计数器即PC寄存器

    类加载器及双亲委派机制

    作用:加载class文件。级别: 1、虚拟机自带的加载器2、启动类(根)加载器(rt-jar)3、扩展类加载器(jre目录下–lib–ext)4、应用程序加载器(AppClassLoader) 双亲委派机制 1、类加载器收到类加载的请求2、先将这个请求向上委托给父类加载器去完成,一直向上委托,直到根加载器3、启动类加载器检查是否能够加载当前类,能加载就结束,使用当前加载器,否则,抛出异常,通知子加载器进行加载4、重复步骤3 注意:往上调用会遇到null,代表java调用不到,底层是用C/C++来写的;native关键字:修饰方法即为本地方法,代码构成为C/C++(例如线程相关方法,java处理不了线程,用C/C++进行方法编写,用native关键字修饰。)java为什么叫C++ --:对C++语言中指针、内存管理进行升级优化而来。

    沙箱安全机制

    安全管理、权限控制

    native、方法区

    凡是带了native关键字的,说明java的作用范围达不到了,会去调用底层C语言的库。会进入本地方法栈,登记native方法。真正执行的时候,通过本地方法接口(JNI)执行。 产生原因:java诞生之初C/C++横行,想要立足,必须要有调用C/C++的程序。作用:扩展Java的使用,融合不同的编程语言为java使用。以及操作硬件。例如java程序驱动打印机,管理系统,native在企业开发中较为少见。 方法区存放:static(静态变量)、final(常量)、Class(类信息)、常量池

    本质是:数据结构;程序=算法+数据结构;(非框架+业务逻辑)栈:先进后出,后进先出;队列:先进先出(FIFO),喝多了吐就是栈,吃多了拉就是队列。栈内存主管程序的运行,生命周期和线程同步。线程结束,栈内存也即释放,对于栈来说,不存在垃圾回收的问题,一旦线程结束,栈也就结束了。栈内存放:8大基本类型+对象引用+实例的方法。

    Heap:一个JVM只有一个堆内存,堆内存的大小是可以调节的。 元空间:逻辑上存在,物理上不存在。

    使用JProfiler工具分析OOM原因

    GC算法

    引用计数法复制算法 好处:没有内存碎片坏处:浪费部分内存空间,to区永远为空;最佳使用场景:对象存活度较低的区域。 标记清除算法标记压缩算法总结: 内存效率:复制算法>标记清除算法>标记压缩算法内存整齐度:复制算法= 标记压缩算法 > 标记清除算法内存利用率:标记压缩算法>标记清除算法>复制算法 GC分代收集算法: 年轻代(存活率低):复制算法老年代(区域大,存活率高):标记清除+标记压缩混合实现

    JMM

    JAVA Memory Model(JAVA内存模型)作用:jvm对应于物理机,jmm对应于缓存一致性协议,用于定义数据读写的规则。
    Processed: 0.013, SQL: 8