码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • JVM学习总结(一)


    目录

    1、什么是JVM?

    ?2、JVM能干什么?

    ?(转图)

    3、JVM的解释执行和编译执行区别?

    4、JVM的内存模型(又称运行时数据区,重点)

    ? ? ? 线程共享区:方法区、堆

    ? ? ? 线程独占区:栈、本地方法栈、程序计数器

    5、JVM四大对象引用类型(重点)

    6、内存溢出和内存泄漏的区别

    7、JVM类加载机制的过程。(重点)

    ? ? 加载

    ? ??验证

    ? ? ?准备

    解析

    初始化

    8、JVM类加载器有哪些?(重点,双亲委派机制)

    ? ??



    1、什么是JVM?

    答:JVM全称是Java Virtual Machine,Java虚拟机。

    它是放在Jre运行环境里,将.class后缀的字节码文件解释编译成机器二进制文件的一个东西。

    2、JVM能干什么?

    答:日常用JAVA语言写的代码文件是.Java的源文件,经过IDEA或Eclipse等编辑器编译后,编译成.class字节码文件。

    JVM再将.class字节码文件解释编译成机器二进制文件,这样即可在各种平台上运行(一次编译,到处运行)。

    (转图)

    3、JVM的解释执行和编译执行区别?

    答:解释执行是JVM一行行代码进行编译,最后翻译成机器码。

    编译执行是JVM对整个方法进行编译,最后翻译成机器码。

    主流JVM都是混合模式编译的,即两种方法混合用。

    4、JVM的内存模型(又称运行时数据区,重点)

    答:JVM内存模型根据线程是否共享来分:线程共享区、线程独占区

    线程共享区:方法区、堆

    1、 方法区:存储类的结构信息、常量、静态常量、即时数据等等。

    2、 堆:分配的内存最大,存储对象的实例,比如创建对象、New、数据。

    线程独占区:栈、本地方法栈、程序计数器

    3、 栈:栈又称栈内存,栈的生命周期是随线程创建而创建,线程销毁而销毁,所以不会考虑垃圾回收问题。

    栈(JVM Stack),里面包含一组栈帧(Stack Frame),栈帧也是一个内存结构。

    栈帧存储了,局部变量表、操作栈、动态链接、方法返回地址等。

    方法调用执行过程 = 栈帧压栈、出栈的过程。

    (转图)

    4、 本地方法栈:JVM调用Nativa即本地方法服务。

    5、 程序计数器:线程执行行号指示器、计数器。

    5、JVM四大对象引用类型(重点)

    答:

    1. 强引用,默认情况下对象都是强引用,GC不会进行垃圾回收。
    2. 软引用:缓存环境的应用,GC在内存不够时对其回收。
    3. 弱引用:GC进行垃圾回收时就会将其回收,不管内存够不够。
    4. 虚引用:GC随时都会回收。

    6、内存溢出和内存泄漏的区别

    答:

    1. 内存溢出,原来分配的空间大小是int类型,硬塞一个double类型。
    2. 内存泄漏,原来分配的空间,没有经过close等操作释放。

    7、JVM类加载机制的过程。(重点)

    答: 一共有五步,加载,连接过程(验证,准备,解析),初始化。

    加载

    JAVA代码经过IEDA等外部编译器编译后,翻译成.class字节码文件。JVM会将字节码文件加载到内存中,即放到运行时数据区的方法区内,对应了内存结构方法区存放类信息这个知识点,在方法区会生成一个java.lang.class对象,作为数据访问入口。

    验证

    主要是JVM验证这个JAVA类的是否复合规范。其中包括,文件格式验证、元数据验证、字节码验证、符号验证。

    准备

    主要是为static修饰的变量分配内存、设置初始化数值,比如布尔为false,int为0。不包含final修饰的static,不会为实例变量分配初始值。

    解析

    主要是把JVM常量池的符号引用转换为直接引用。

    初始化

    主要是为static修饰的静态变量,分配自定义的值,比如public static int a=1

    8、JVM类加载器有哪些?(重点,双亲委派机制)

    答:

    1. 启动类(引导类)加载器、
    2. 拓展类加载器、
    3. 系统类加载器、
    4. 自定义加载器。

    双亲委派机制:无论哪个加载器加载一个类,最终都会将该类抛给父类加载器去加载,如果父类加载器加载失败,再返回给子类加载器。

  • 相关阅读:
    SpringBoot青海省旅游系统
    7. Java本项目知识基础---上篇
    LeetCode-1774. 最接近目标价格的甜点成本【数组,背包问题,优化暴力,回溯】
    java课程线上线下教学平台 ssm638
    循环神经网络 - 语言模型和数据集
    Kafka系列之二Docker集群安装运行
    vue3 watch的各种使用情景
    Spring Boot入门教程
    STL链表容器:自制list(链表)容器
    [附源码]JAVA毕业设计工程车辆动力电池管理系统(系统+LW)
  • 原文地址:https://blog.csdn.net/m0_67400972/article/details/126744508
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号