JVM(Java虚拟机)功能特点、垃圾回收机制

news/2024/11/15 7:08:33/

简介

        JVM(Java虚拟机)是一种虚拟的计算机执行环境,用于执行Java字节码。Java虚拟机不仅仅用于执行Java语言编写的程序,还可以执行其他编译成Java字节码的语言(如Kotlin、Scala等)编写的程序。JVM的主要目标是实现跨平台兼容性,即“一次编写,到处运行”。

功能特点

JVM主要具有以下功能和特点:

1.平台无关性

Java源代码被编译成字节码,而不是直接编译成特定平台的机器代码。JVM负责将字节码转换为特定平台的机器代码并执行。

2.内存管理

JVM负责自动管理程序的内存,包括对象的创建和垃圾回收。这使得Java程序员无需关心内存的分配和释放,从而减少内存泄漏和野指针等问题。

3.加载和链接

JVM在运行时负责加载和链接类文件。类加载器(Class Loader)负责将字节码加载到内存中,并进行验证、准备和解析等过程,最后将类的静态结构转换为运行时数据结构。链接过程包括验证字节码的正确性、为静态变量分配内存并设置初始值等。

4.执行引擎

JVM的执行引擎负责将字节码解释执行或通过即时编译器(JIT)将字节码编译成机器代码再执行。即时编译器可以优化热点代码(经常执行的代码),提高程序的性能。

5.安全性

JVM提供了沙箱(Sandbox)安全模型,限制程序对本地资源的访问,从而保护系统安全。此外,JVM还对字节码进行验证,确保其符合规范并不会损害系统安全。

垃圾回收机制

Java中的垃圾回收(Garbage Collection,GC)机制是JVM(Java虚拟机)的一个重要组成部分,负责自动管理程序的内存。

什么是垃圾

  • 垃圾是指在运行程序中没有任何引用指向的对象,这个对象就是需要被回收的垃圾。
  • 如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出

GC主要目的

  1. 避免内存泄漏:内存泄漏是指程序在运行过程中动态分配的内存空间没有被及时释放,导致可用内存空间逐渐减少。垃圾回收可以自动检测不再使用的对象,并释放它们占用的内存,从而避免内存泄漏。
  2. 确保内存的连续性:在程序执行过程中,内存中的对象可能会被移动。垃圾回收可以确保对象在内存中的相对位置不变,从而保持内存的连续性,有利于程序的执行。
  3. 提高程序的执行效率:通过垃圾回收,程序可以避免因内存不足而导致的频繁的内存分配和释放操作,从而提高程序的执行效率。

java的垃圾回收机制

  1. 标记(Mark):垃圾回收器首先标记所有需要回收的对象。标记可以分为两种方式:
    1. 标记-清除(Mark-Sweep):首先标记所有需要回收的对象,然后清除这些被标记的对象。这种策略的缺点是会产生内存碎片。
    2. 标记-整理(Mark-Compact):在标记-清除的基础上,增加了整理的过程。整理将存活的对象移动到内存的一端,以消除内存碎片。这种策略的缺点是需要移动对象,可能导致额外的开销。
  2. 清除(Sweep):在标记-清除策略中,清除过程会直接删除被标记的对象。而在标记-整理策略中,清除过程通常是指将存活的对象移动到内存的一端。
  3. 整理(Compact):在标记-整理策略中,整理过程会将存活的对象移动到内存的一端,以消除内存碎片。这种过程可能会导致对象的相对位置发生变化。
  4. 复制(Copy):Java的垃圾回收机制通常会将堆内存划分为两个相等的区域,分别用于存储对象的实例和数组。当对象被创建时,它们会被分配到其中一个区域。垃圾回收器可以在进行垃圾回收时,将存活的对象复制到另一个区域,并清空当前区域。这种策略可以有效地避免内存碎片,但需要额外的内存空间。
  5. 筛选(Filter):在某些垃圾回收策略中,可能会进行筛选的过程。筛选可以将对象分为不同的类别,以便更高效地进行垃圾回收。

http://www.ppmy.cn/news/1443717.html

相关文章

前端开发中浏览器兼容问题总结

前端开发中浏览器兼容问题总结 PC端兼容问题及解决方案移动端兼容问题及解决方案 PC端兼容问题及解决方案 居中问题 div里的内容,IE默认为居中,而FF默认为左对齐,可以尝试增加代码margin: 0 auto;高度问题 两上下排列或嵌套的div&#xff0c…

Gone框架介绍1 - 在go语言上实现依赖注入,Gone是如何实现的?

文章目录 Goner的定义在Gone中是如何完成依赖注入的? 我在两年前实现了一个Golang的依赖注入框架,并且集成了gin、xorm、redis、cron、消息中间件等功能,自己觉得还挺好用的;之前一直没有时间写文档推广,现在"毕业…

网络安全学习路线推荐

基础阶段: 网络安全行业与法规 Linux操作系统 计算机网络基础(ARP TCP HTTP等是重点) HTML MySQL基础 PHP Python 重点学习阶段: 理解原理能够复现掌握挖掘方式掌握工具使用掌握修复方式 渗透: 漏洞原理 各种漏洞的…

Docker本地部署overleaf后,挖掘用户加密逻辑

overleaf的用户信息,保存在mongo数据库的users集合中。 用户密码则存在hashedPassword字段中 从开源的代码services\web\app\src\Features\Authentication\AuthenticationManager.js第303行可以找到密码加密逻辑。 本地可以通过下面的代码生成overleaf用户密码信息…

Airmail 5 for Mac:高效电子邮件管理软件

Airmail 5 for Mac作为一款功能强大的电子邮件客户端软件,为Mac用户带来了全新的邮件管理体验。其高效、直观的操作界面,使得用户可以轻松管理各类邮件,提升工作效率。 Airmail 5 for Mac v5.7.4中文激活版 首先,Airmail 5支持多个…

BERT模型入门系列: Attention机制入门

Attention模型在NLP领域用的风生水起,但是一直对attention模型的基本原理不理解,看了很多别人的文章,似乎是看懂了,但实际上在真正理解起来的时候,就是没办法说出个所以然来,所以用自己的理解方式来写一篇。…

react怎么做图片报错处理

在React中,图片加载失败时,可以通过onError事件处理器来捕获错误并进行处理。以下是一个简单的例子: jsx复制代码 import React from react; class ImageComponent extends React.Component { handleImageError (event) > { event.targe…

vim中如何查找一个/

在 Vim 中,如果你想要查找一个正斜杠 /,你需要使用反斜杠 \ 作为转义字符,因为正斜杠在 Vim 的搜索模式中是一个特殊字符,用于分隔搜索模式和替换命令。 以下是如何在 Vim 中查找正斜杠 / 的步骤: 打开 Vim 并加载你的…