1.什么是JAVA虚拟机(JVM)?

虚拟机是一种抽象化的计算机,可以通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机有自己完善的硬体架构,如堆栈、处理器、寄存器等,还具有许多相应的指令系统。Java虚拟机屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。

2.JVM的概念与作用:

  • 跨平台和内存管理
  • System.out.println();向系统控制台输出内容
  • JVM负责向windows和Linux 调用底层函数才能实现输出。
  • 与平台的无关性
  • Java虚拟机是Java语言底层实现的基础。

3.JVM跨平台流程图

注意:像JAVA跨平台主要靠JVM来实现的,JVM 与JAVA应用程序是1:1。

2.虚拟机垃圾回收机制与代码优化

1.什么是垃圾回收机制?

  • 垃圾回收器可以比喻为“伟大的环卫工人”
  • 垃圾收集GC(Garbage Collection)是Java语言的核心技术之一, 在Java中,程序员不需要去关心内存动态分配和垃圾回收的问题,这一切都交给了JVM来处理。

2.在JAVA代码中如何发现垃圾?

  • 对于Java对象来说,如果这个对象没有被其他对象所引用该对象就是无用的,或者说 没有被方法区和栈帧引用和本地方法栈使用的都是垃圾,其占用的内存也就要被销毁。

  • Java中标记垃圾的算法主要有两种, 引用计数法和根搜索算法:

1.使用引用计数法

  • 引用计数法就是给对象中添加一个引用计数器,每当有一个地方需要引用它,计数器就加 1。当引用失效,计数器就减 1。任何时候计数器为 0 的对象就是不可能再被使用的,可以当做垃圾收集。这种方法实现起来很简单而且优缺点都很明显。
  • 优点 :执行效率高,程序执行受影响较小
  • 缺点:无法检测出循环引用的情况,导致内存泄露

2.使用根搜索计算法:

  • 这个算法就是通过一系列称为 “GC Roots” 的对象作为起点,从这些节点开始向下搜索,节点所走过的路径称为引用链,当一个对象到 GC Roots 没有任何引用链相连的话,则证明此对象是不可用的。

3.如何将垃圾回收?
在Java中存在着四种垃圾回收算法,标记清除算法、复制算法、标记整理算法以及分代回收算法。

  • 标记清除法: 标记出所有需要被回收的对象,清除回收被标记的对象所占用的空间。它的缺点在于:存在内存碎片,内存利用率不高。

  • 分段复制法: 将内存分为大小相同的两块,每次使用其中的一块。当第一块的内存使用完后,就将还存活的对象复制到另一块去,然后再把使用的空间一次清理掉。这样就使每次的内存回收都是对内存区间的一半进行回收。它的缺点在于:大量的对象移动,会导致JVM卡顿。

  • 标记整理算法:该算法标记阶段和标记清除一样,但是在完成标记之后,它不是直接清理可回收对象,而是将存活对象都向一端移动,然后清理掉端边界以外的内存。这个是为了解决复制算法的缺陷,碎片少,充分利用内存空间。

  • 分代收集算法: 根据具体的情况选择具体的垃圾回收算法。一般将 java 堆分为新生代和老年代,这样我们就可以根据各个年代的特点选择合适的垃圾收集算法。当前虚拟机的垃圾收集都采用分代收集算法。是因为它的效率更高。

3.什么是类加载器?

  • Java类加载器是Java运行时环境的一部分,负责动态加载Java类到Java虚拟机的内存空间中。类通常是按需加载,即第一次使用该类时才加载。由于有了类加载器,Java运行时系统不需要知道文件与文件系统

1.类加载器的分工:

2.类加载器是用来做什么的?

  • 类加载器是在虚拟机中完成的,负责动态加载Java类到Java虚拟机的内存空间中,在经过 Java 编译器编译之后就被转换成 Java 字节代码(.class 文件)。
  • 类加载器负责读取 Java 字节代码,并转换成java.lang.Class类的一个实例。

3.类加载器有四个方面:

  • 启动类加载器,没有父类。
  • 拓展类加载器由Java语言实现,父类加载器为null。
  • 系统类加载器,由Java语言实现。
  • 自定义类加载器,父类加载器肯定为AppClassLoader。

什么是JAVA虚拟机(JVM)?相关推荐

  1. Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论

    Java虚拟机JVM学习06 自定义类加载器 父委托机制和命名空间的再讨论 创建用户自定义的类加载器 要创建用户自定义的类加载器,只需要扩展java.lang.ClassLoader类,然后覆盖它的f ...

  2. Java虚拟机JVM学习05 类加载器的父委托机制

    Java虚拟机JVM学习05 类加载器的父委托机制 类加载器 类加载器用来把类加载到Java虚拟机中. 类加载器的类型 有两种类型的类加载器: 1.JVM自带的加载器: 根类加载器(Bootstrap ...

  3. 《深入理解Java虚拟机 - Jvm高级特性与最佳实践(第三版)》阅读笔记

    <深入理解Java虚拟机>阅读笔记 本repository为<深入理解Java虚拟机 - Jvm高级特性与最佳实践(第三版)>阅读笔记,因为第一章主要讲的是Java的发展历史, ...

  4. 深入理解Java虚拟机——JVM类加载机制(类加载过程和类加载器)

    一.什么是类加载机制? 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制. 二.类加载的时机 类 ...

  5. Java虚拟机JVM简单理解

    Java虚拟机JVM的作用: Java源文件(.java)通过编译器编译成.class文件,.class文件通过JVM中的解释器解释成特定机器上的机器代码,从而实现Java语言的跨平台. JVM的体系 ...

  6. [java] 虚拟机(JVM)底层结构详解[转]

    [java] 虚拟机(JVM)底层结构详解[转] 本文来自:曹胜欢博客专栏.转载请注明出处:http://blog.csdn.net/csh624366188 在以前的博客里面,我们介绍了在java领 ...

  7. Java虚拟机JVM的内部体系结构

    JVM(Java虚拟机)是一个抽象机器. 它是一个提供可以执行Java字节码的运行时环境的规范.JVM可用于许多硬件和软件平台(即JVM是平台相关的). 什么是JVM? JVM(Java虚拟机)是: ...

  8. [转载] java虚拟机 jvm 出入java栈 栈空间内存分配

    参考链接: Java虚拟机(JVM)堆栈区域 java栈空间是一块线程私有的内存空间,java堆和程序数据密切相关,那么java栈就是和线程执行密切相关.线程最基本的执行行为就是函数的调用.每次函数调 ...

  9. java虚拟机MyEclipse_Eclipse和MyEclipse运行环境java虚拟机jvm设置,自己设置jre

    Eclipse运行环境java虚拟机jvm设置,自己设置jre 浅谈Eclipse寻找JVM(JRE)的顺序机制 Eclipse也是一个普通的Java程序,因此必须有一个JRE做为运行环境. 如果你的 ...

  10. 深入理解java虚拟机 - jvm高级特性与最佳实践(第三版)_JVM虚拟机面试指南:年薪30W以上高薪岗位需求的JVM,你必须要懂!...

    JVM的重要性 很多人对于为什么要学JVM这个问题,他们的答案都是:因为面试.无论什么级别的Java从业者,JVM都是进阶时必须迈过的坎.不管是工作还是面试中,JVM都是必考题.如果不懂JVM的话,薪 ...

最新文章

  1. 安卓一个方法多处调用_一个隐藏在方法集和方法调用中且易被忽略的小细节
  2. 未来不是计算机发展的方向,未来人类的方向,或许不是人工智能,而是智能人类...
  3. 专访:混合云的发展趋势
  4. springCloud(微服务的概念)1-1
  5. aws linux使用ssh登陆_【Linux】 使用ssh连接远程服务器
  6. HDU 1074 Doing Homework 状态压缩 + 搜索
  7. 使用maven打包bootdo并运行
  8. visio用例图箭头怎么画_解析用Visio画UML用例图简明步骤
  9. Excel函数公式大全—INDEX函数
  10. 龙芯2F 逸珑迷你笔记本
  11. html打开ppt自动播放,如何让ppt文档打开自动播放_让ppt文档打开自动播放的方法-系统城...
  12. kdj超卖_kdj超卖是什么意思?kdj超买超卖区别是什么
  13. matlab复数曲线拟合,lsqcurvefit拟合结果为复数
  14. 2017 主流手机分辨率与尺寸
  15. 【log4j2】下载、安装、使用
  16. 计算机为什么要采用精简指令集,为什么说手机cpu运行的是精简指令集,而电脑cpu是复杂指令集?...
  17. 习题 于歆杰 电路_清华大学 电路原理 于歆杰 60讲视频教程
  18. Photoshop cs5 基础教程 形状图层的布尔运算
  19. 谷歌翻译转换html,HTML – 谷歌翻译网站
  20. ubuntu 下实现 quagga镜像

热门文章

  1. [STM32学习笔记1]Keil5中添加库包,搭建开发环境
  2. 深度学习入门:基于Python的理论与实现③
  3. android雪花飘落动画,用Jetpack Compose制作出可爱的天气动画
  4. Mysql数据库check约束语句_怎么用sql命令语句写check约束
  5. 谷歌浏览器主页快捷方式不见
  6. 【环境配置】Visual Studio Code 如何编写运行 C、C++ 程序?
  7. KMP代码《C++版》
  8. java.util.LinkedHashMap cannot be cast to com.xxx
  9. Android 11.0 12.0设置默认息屏时间
  10. Java switch()括号内参数的类型要求