JVM合集【持续更新】

Java虚拟机(JVM): 是Java程序运行的环境,它负责解释执行 Java 字节码(Bytecode),并提供了内存管理、垃圾回收等功能。JVM 是 Java 程序在不同平台上实现跨平台的关键。JVM 可以独立于 JDK 存在,例如,你可以使用 JRE(Java Runtime Environment)来运行 Java 程序,而无需 JDK。

Java虚拟机的存在原因

  1. 跨平台性: Java 的跨平台性是其最重要的特性之一。Java 程序可以在不同的操作系统和硬件平台上运行,这得益于 Java 虚拟机的存在。Java 源代码编译成字节码(Bytecode)后,由不同平台上的 Java 虚拟机负责解释执行,因此实现了跨平台的能力。

  2. 安全性: Java 虚拟机通过字节码校验器(Bytecode Verifier)等机制来确保代码的安全性。字节码校验器会检查字节码文件,防止恶意代码通过各种漏洞进入系统。

  3. 垃圾回收: Java 虚拟机提供了垃圾回收(Garbage Collection)机制,自动管理程序的内存,避免了手动内存管理可能带来的内存泄漏和空指针异常等问题。

  4. 性能优化: Java 虚拟机的即时编译器(JIT Compiler)可以将字节码实时编译成本地机器码,从而提高程序的执行效率。

Java内存模型的设计

Java 内存模型(Java Memory Model,JMM)规定了 Java 程序中的线程如何与内存交互。它主要解决了多线程并发访问共享变量可能引发的可见性、有序性和原子性问题。

  1. 可见性: JMM 保证一个线程修改的共享变量对其他线程是可见的。在多核处理器和多级缓存的环境中,线程对共享变量的修改可能存在延迟或不可见的情况,JMM 通过内存屏障等机制来确保线程之间的数据可见性。

  2. 有序性: JMM 保证程序的执行顺序符合预期。在多线程环境中,线程的指令可能会乱序执行,导致程序出现异常的行为。JMM 使用内存屏障来确保指令的有序性。

  3. 原子性: JMM 保证基本数据类型的读取和赋值操作是原子性的。对于复合操作,JMM 使用锁和 volatile 变量等机制来确保原子性。

Java 内存模型的设计旨在解决多线程并发访问共享数据可能导致的各种问题,保证了 Java 程序的正确性和稳定性。

JVM加载类的流程

JVM加载类的流程通常包括以下几个步骤:

  1. 加载(Loading):加载是指查找并加载类的二进制数据(class文件),并将其转换为 JVM 内部的数据结构(Class对象)。类的加载通常由类加载器(ClassLoader)来完成。在加载阶段,类加载器会根据类的全限定名(Fully Qualified Name)来定位类文件,然后读取类文件的字节码数据,并创建对应的 Class 对象。

  2. 链接(Linking):链接阶段分为三个子阶段:验证(Verification)、准备(Preparation)、解析(Resolution)。

    • 验证:验证阶段用于确保被加载的类符合 JVM 规范,例如检查类文件格式、语义是否合法等。
    • 准备:准备阶段为类的静态变量分配内存空间,并设置默认初始值(零值)。
    • 解析:解析阶段将类中的符号引用转换为直接引用,即将类、方法、字段等符号引用解析为内存地址。
  3. 初始化(Initialization):初始化阶段是类加载过程中的最后一步,负责对类进行初始化操作,包括执行类的静态变量赋值和静态代码块等初始化代码。在初始化阶段,JVM 会按照定义顺序依次执行类的静态变量赋值和静态代码块,并保证初始化的线程安全性。

需要注意的是,类加载过程是懒加载的,即只有当程序首次使用到某个类时,JVM 才会触发该类的加载过程。此外,类加载过程是线程安全的,JVM 会确保同一个类只被加载一次,避免重复加载和初始化。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/4495.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【QEMU系统分析之启动篇(十一)】

系列文章目录 第十一章 QEMU系统仿真的加速器初始化分析 文章目录 系列文章目录第十一章 QEMU系统仿真的加速器初始化分析 前言一、QEMU是什么?二、QEMU系统仿真的启动分析1.系统仿真的初始化代码2.主循环数据初始化configure_accelerators()phase_advance(PHASE_A…

科技感十足特效源码

源码介绍 科技感十足特效源码,源码由HTMLCSSJS组成,记事本打开源码文件可以进行内容文字之类的修改,双击html文件可以本地运行效果,也可以上传到服务器里面 源码截图 源码下载 科技感十足特效源码

Linux:冯诺依曼体系结构、操作系统、初识进程

文章目录 1.冯诺依曼体系结构总线与数据传输通路为什么有内存这个部分计算机存储结构 2.操作系统(Operator System)2.1 概念2.2 设计OS的目的2.3 理解“管理”先描述再组织 2.4 用户使用系统调用和库函数(lib)概念 总结 3.初识进程3.1 基本事实与引入3.2…

外贸常用邮件模板-客户投诉要如何处理?

外贸业务人员在与国外客户长期合作的过程当中,很难完全避免所有业务环节都万无一失,在整个订单的开发执行和成交售后过程当中,一旦出现某些问题导致客户投诉,将会在很大程度上影响我们和客户之间的关系以及未来的长期合作。 因此…

如何编写一个高性能的Web服务器

编写一个高性能的Web服务器需要考虑多个方面,包括架构设计、并发处理、资源优化、安全性等。以下是一些关键步骤和策略,帮助你编写一个高性能的Web服务器: 选择合适的编程语言和技术栈: 选择一个适合Web开发的编程语言&#xff0c…

ZYNQ之嵌入式开发05——串口中断、定时器中断、QSPI和SD卡读写测试实验

文章目录 UART串口中断实验定时器中断实验PS-XADC实验QSPI Flash读写测试SD卡读写文本文档 UART串口中断实验 UART控制器是一个全双工异步收发器,支持可编程的波特率和IO信号格式,具有独立的TX和RX数据路径,每个路径有一个64字节的FIFO&…

设计模式学习笔记 - 开源实战五(中):如何利用职责链与代理模式实现Mybatis Plugin

概述 上篇文章对 Mybatis 框架做了简单的背景介绍,并通过对比各种 ORM 框架,学习了代码的易用性、性能、灵活性之间的关系。一般来讲,框架提供的高级功能越多,那性能损耗就越大;框架使用起来越简单,那灵活…

59岁郑浩南罕见与索爆女儿合体,曾自曝婚变暗示妻子出轨人财两空

59岁的郑浩南,拍过不少脍炙人口的电影,尤其是在《古惑仔》中饰演奸角司徒浩南,近作有《黑社会》的「加钱哥」,虽然将近「登六」,却保养得宣,操出一身健硕肌肉。 跟前妻鲍爱玲离婚后,郑浩南独自在…

即插即用Mamba模块全新突破!无缝集成,无痛涨点

Mamba入局图像复原了!基于Mamba的图像复原基准模型MambaIR性能超越SwinIR,达成新SOTA! MambaIR是一种引入通道注意力和局部增强的即插即用Mamba模块。这类高效、创新的模块在写论文时可以帮助我们简化模型的构建过程,通过将这些模…

Android 11 bindService 流程分析

我们可以使用bindService来跨进程通信,其使用方法如下 Intent intent new Intent("xxx"); intent.setPackage("xxx"); boolean result bindService(intent,new ServiceConn(),BIND_AUTO_CREATE);private class ServiceConn implements Servi…

使用lua时一个愚蠢的错误

之前看luaL_openlibs(),感觉直接调打开库的函数好像也没差别,所以将 LUALIB_API void luaL_openlibs (lua_State *L) {const luaL_Reg *lib lualibs;for (; lib->func; lib) {lua_pushcfunction(L, lib->func);lua_pushstring(L, lib->name);…

学习100个Unity Shader (15) ---透明+双面渲染

文章目录 效果shader理解参考 效果 shader Shader "Example/AlphaBlendBothSided" {Properties{_Color ("Main Tint", Color) (1, 1, 1, 1)_MainTex ("Texture", 2D) "white" {}_AlphaScale ("Alpha Scale", Range(0, 1)…

leetcode多个测试用例之间相互影响导致提交失败

背景 在做一道easy题,二叉树的中序遍历,我提交的代码如下 from typing import (Optional,List )# Definition for a binary tree node. class TreeNode:def __init__(self, val0, leftNone, rightNone):self.val valself.left leftself.right right…

无脑入单向无头链表的实现| ArrayList和LinkedList的区别

1. ArrayList的缺陷 上节课已经熟悉了ArrayList的使用,并且进行了简单模拟实现。通过源码知道,ArrayList底层使用数组来存储元素。 由于其底层是一段连续空间,当 在 ArrayList 任意位置插入或者删除元素时,就需要将后序元素整体往…

掼蛋入门口诀

1、有王打单张,无王打一夯 2、想使坏,三不带 3、情况不明,对子先行 4、两个小单张,不打不健康 5、顺子打到头,对手没想头 6、双贡出单张,头游响当当 7、逢五出两张,逢六出三张 8、炸五不炸四&am…

pytest测试基础

assert 验证关键字 需要pahton版本大于3.6,因为有个工具pip3;因为做了映射,所以下面命令pip3即pip pip install -U pytest -U参数可选,是如果已安装可更新。 如果上述demo变化 通过验证代码,测试环境没问题。…

详细谈电脑ip、域名、内网、外网、localhost、127.0.0.1、网关等通讯基础知识(易懂)

1. ip地址与域名的定义以及其关系 ip地址的定义: IP地址(Internet Protocol Address)是指互联网协议地址,又译为网际协议地址。 IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一…

ChatGPT记忆功能终于上线了, OpenAI 官方:用得越久越聪明!

原文 ChatGPT记忆功能终于上线了, OpenAI 官方:用得越久越聪明! Aitrainee | 公众号:AI进修生 🌟 记得今年2月份OpenAI发布过ChatGPT上线记忆功能的消息,我记得当时还弹出过这个窗口给我,但是仅仅体验了几…

Git--分布式版本控制系统

目录 一、理解分布式版本控制系统二、远程仓库三、克隆远程仓库四、向远程仓库推送五、拉取远程仓库六、配置Git七、给命令配置别名八、创建标签九、操作标签 一、理解分布式版本控制系统 我们⽬前所说的所有内容(⼯作区,暂存区,版本库等等&a…

在智慧城市的建设中智能电表发挥什么作用

在智慧城市的建设中,智能电表扮演着至关重要的角色。智慧城市是一个利用信息技术手段提升城市运行效率和质量的新型城市模式,旨在通过信息和通信技术的应用,提高城市管理、公共服务、环境保护等方面的质量和效率,促进城市的可持续…