JVM的学习

本文详细介绍了Java虚拟机(JVM)的功能、组成,包括执行线程、内存管理、双亲委派模型以及垃圾回收算法(如标记-清除、复制、标记-整理和分代算法)。还讨论了minorGC和fullGC的区别,以及不同垃圾回收器的特点。
摘要由CSDN通过智能技术生成


我画了一个原型图 大家可以参考参考
在这里插入图片描述

jvm是什么

JVM(Java虚拟机)是Java编程语言的运行环境,它的主要功能是将Java字节码文件(.class文件)解释或编译成可以在特定硬件和操作系统上执行的机器码。JVM允许Java程序在不同的平台上独立地运行,提供了跨平台、安全性和可移植性。
JVM负责管理内存、执行线程、进行垃圾回收等任务。

jvm的组成

所以说JVM主要负责执行字节码文件,执行线程,管理内存,垃圾回收等任务。
那一个java程序运行的是有进程 线程的概念的,先说线程,线程需要切换,线程需要存储变量,这些都是线程私有的。主要是程序计数器和虚拟机栈。还有字节码文件是用当方法区存储的。最大的空间就是堆存储区域,主要是存储变量和数组文件。还有一个最后的native方法。
前面说线程安全的时候有说过
程序计数器 存储的是线程执行的上下文 ,就是存储每次线程执行的状态,这样的话下一次程序
虚拟机栈 存储的是线程的局部变量,每个线程在运行时都会有一个对应的栈,用于存储方法的调用和局部变量。如 局部方法中的int i = 10; 中的 i 变量。
native方法区 存储的是native方法,调用c++的方法
堆 最大的存储区域,主要存储的是变量和数组
方法区存放的是运行时常量和类的元信息,比如字节码等

java代码执行的过程

·

双亲委派模型

如果一个类要加载,先从父类开始找实现,就是从BootstrapClassloader-》extClassLoader->AppClassloader 这样三个去找。

堆的组成

堆是java程序中占用最大的一部分,我们常把堆的组成分为老年代和新生代。新生代又分为eden,from,to三个区。这三个区默认的比例是8:1:1,

垃圾回收算法

主要有标记-清除算法,复制算法,标记-整理算法
标记-清除算法 从GC root标记一个对象,如果被引用的话就mark。然后执行回收操作。
优点:对于比较少垃圾对象的话适用
缺点是:GC时需要中断应用程序,然后遍历两边内存,一遍是mark,一遍是清除。然后是内存碎片比较多。
标记-整理 也叫做 标记-压缩算法
标记完对象以后,回收操作会进行内存整理。内存整理的话效率会更慢,内存碎片会少。
复制算法
就是将内存分为两部分,每次只使用一部分,标记完内存后移到另外一个区域。这个算法的优点是快,不需要中断应用程序,缺点是只能使用一部分,对于垃圾对象多的适用。
分代算法:
在jvm中,年轻代适合使用复制算法,老年代适合使用标记清除或标记压缩算法。因为年轻代的垃圾对象比较多,老年代更多的是稳定存在的对象。
CMS回收器 对于老年代的并发回收。
G1 回收器 jdk9的默认回收器

垃圾回收算法

如何认定一个对象可以回收

可达数分析法 从GC root开始计算引用 如果没有引用了就算垃圾对象。
和 引用计数法。

minor GC与full GC

垃圾回收器的不同

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值