从代码执行的角度理解JVM -- 各个部件及其之间的协作

聊聊JVM(五)从JVM角度理解线程 这篇说说如何从JVM的角度来理解线程,可以对Java的线程模型有一个更加深入的理解,对GC的一些细节也会理解地更加深刻。本文基于HotSpot的OpenJDK7实现。 我们知道JVM主要是用C++实现的,JVM定义的Thread的类继承结构如下: Class hierarchy  - Thread    - NamedThread      - VMThread      - 阅读详情

参考1(这个相对完整,可以直接进去看详细),本文主要基于这篇文章进行个人的理解。

目录

前言:

1、一段代码如何通过JVM在一台计算机上执行


前言

首先需要知道JVM是一个虚拟机。而虚拟机呢,可以安装操作系统,然后通过操作系统的指令和底层硬件打交道。

JVM是Java Virtual Machine(Java虚拟机)的缩写。既然是虚拟机,则需要建立在操作系统之上。JVM有很多种,目前被运用最广泛的为HOTSPOT,本文以HOTSPOT虚拟机来讲,所以接下来的JVM均为HOTSPOT。

 

以下是JVM的框架和一般的运行流程(字丑,略过):


1、一段代码如何通过JVM在一台计算机上执行

一段程序涉及的无非这几个部分:

  • 主函数;
  • 成员变量:静态、其他;
  • 成员函数:静态、其他;
  • 可能还涉及其他类的对象及其方法。

针对这几部分,JVM都在相应的步骤进行处理。以下为一段java程序在JVM中的运行顺序:

  • 1. 分配执行入口。加载主方法的class文件Main.class进入方法区,为static main()分配执行入口(即内存空间)。
  • 2. 主方法入栈。发现static main()是主方法,则主方法加载入栈。
  • 3. 处理类文件、静态变量、静态方法。加载一般类文件A.class进入方法区,给有static修饰的静态变量分配内存空间,给static修饰的静态方法分配执行入口(即地址)。
  • 4. 处理对象。在堆中实例化对象A,并初始化A的属性信息(如果A是子类此时不会初始化父类对象),A的第一个对象实例化完成后,给A的所有成员方法分配执行入口。
  • 5. 处理对象的方法。将实例化对象引用的成员方法加载入栈运行,完毕后出栈。
  • 6. 主方法static main()出栈。程序执行完毕。

 

注意:

  • 静态成员属性、方法:在实例化对象之前就分配了内存空间(该类class文件加载进入方法区后进行);
  • 一般成员方法和属性:在实例化第一个对象时分配内存空间。

 

以下是参考网上的资料画出的程序运行的大致流程图(字丑,纯粹为了自己理解,画了一下):

 

 

如果有不正确的地方,恳请交流指正。

Java-从JVM的角度重新理解面向对象(OOP) Java-从JVM的角度重新理解面向对象(OOP) 背景 在初次学习面向对象的时候,我时时为那些抽象的概念所迷茫,如今从Jvm虚拟机运行原理重新理解面向对象,属实打开了一扇新世界的大门,理解了Java面向对象的内存机制,一切面向对象的概念在我眼中犹如透明 目录Java-从JVM的角度重新理解面向对象(OOP)背景什么是JVMJVM的常见内存结构从JVM角度看面向对象多场景程序运行常量与变量判定方法... 阅读详情

相关推荐

聊聊JVM(六)理解JVM的safepoint

safepoint是JVM里面很重要的一个概念,在很多场景下都会看到它,尤其是在GC的时候。这篇讲讲safepoint。本人不是做JVM实现研究的,很多地方只能点到为止,希望能够讲清楚这个概念,具体的细节可以自己去找资料深入研究。 safepoint 安全点顾名思义是指一些特定的位置,当线程运行到这些位置时,线程的一些状态可以被确定(the thread's representation

ITer_ZC的专栏 2万+

JVM基本结构和工作流程

JVM基本结构: 类加载器:类加载器主要负责从文件系统或网络中加载Class文件,加载的类信息存放与方法区中。有三种默认使用的类加载器:Bootstrap类加载器、Extension类加载器和System类加载器(或者叫作Application类加载器)。 方法区:方法区也叫永久区,它是被线程共享的。方法区存储类加载器加载的类信息、常量、静态变量方法区的大小决定可以存储多少个类。(在jav...

zhoushimiao1990的博客 1799

Camera AF和FF

Camera按对焦功能可以分为FF(Fixed Focus)和AF(Auto Focus),即固定对焦和自动对焦。固定对焦顾名思义就是焦距是固定的,而自动对焦可以通过移动镜头位置来改变焦距从而实现自动对焦。以前摄像的功能机大多是固定对焦,现在的手机都带有自动对焦功能。 FF模组包括镜头(Lens),传感器(Sensor),红外滤色器(IR Filter),电路板(PCB),镜头支撑(Lens Holder),连接器(Connector)。 Fig 1. FF Module AF模组包括FF模组,音圈马达(V

Coppa的博客 1万+

大厂JVM面试真题

一、头条一面:JVM 从 GC 角度看,堆的分区情况?二、美团一面:说下JVM的垃圾回收算法?三、滴滴一面:你知道哪几种垃圾回收器,各自的优缺点?四、字节二面:JVM 各区域间是如何协同工...

IT技术精选文摘 288

COMSOL多物理场仿真:瓷绝缘子电热耦合建模与优化策略

本文详细介绍了使用COMSOL Multiphysics进行瓷绝缘子电热耦合仿真的完整流程与优化策略。文章阐述了电热耦合效应的工程意义,并逐步讲解了从几何建模、材料定义、物理场设置到边界条件与网格划分的关键步骤。重点分析了如何通过焦耳热耦合实现电场与温度场的双向交互,以及如何利用仿真结果进行参数化优化和瞬态故障模拟,为提升电力设备可靠性提供有效的数字化设计工具。

n8m7b6v5c4的博客 883

从零搭建一个AF架构项目:基于TIA Portal V19和S7-PLCSIM的仿真调试全流程

本文详细介绍了如何在TIA Portal V19环境中从零搭建西门子Automation Framework(AF架构)项目,包括环境准备、硬件组态、核心组件创建、项目架构分层实现以及仿真调试全流程。通过模块化编程和标准化接口设计,AF架构显著提升工业自动化项目的开发效率和维护便利性,特别适合S7-1500系列PLC的应用开发。

weixin_29313547的博客 673

1、JVM是如何工作的?

整体上理解JVM是如何工作的,如何执行我们写好的java代码的。

weixin_35794878的博客 975

Ubuntu单系统安装全攻略:从删除Windows到UEFI引导设置(避坑指南)

本文提供Ubuntu单系统安装的完整指南,涵盖从安全删除Windows系统到UEFI引导设置的详细步骤。通过专业工具准备、分区方案设计、引导加载器配置等关键环节,帮助用户避免常见安装问题,实现纯净高效的Ubuntu单系统环境。特别强调UEFI引导的深度配置与安装后的性能优化,适合希望彻底转向Linux的用户。

weixin_29210727的博客 409

JVM各组件的功能

ClassLoader(类加载器) 什么是类加载器? 加载和初始化.class文件 类加载器有几种? 3种分别是:启动类加载器(BootStrap) 扩展类加载器(Extension) 应用程序加载器(AppClassLoader) 什么是...

mys_35088的博客 794

LAMMPS实操系列(四): 高熵合金FCC-CoCrCuFeNi的退火模拟

我们对FCC-CoCrCuFeNi的退火模拟思路主要是,首先将材料以均匀的速率用100 ps从300 K升温至1000 K,然后在1000 K的温度下平衡100 ps,随后以均匀的速率用100 ps从1000 K降温至300 K,随后通过共轭梯度下降法做静力学结构优化得到退火后的结构。由于FCC-CoCrCuFeNi高熵合金被认为是潜在的工程结构材料[1],接下来我们将对退火前后的结构进行压缩模拟,对比退火前后FCC-CoCrCuFeNi高熵合金的力学性能变化,敬请各位读者关注我们的更新。

Ceshigo_CD的博客 4837

【学术情报智库】目录学的数字化蜕变:从古籍整理到AI知识图谱的跨越

我们既是浩瀚知识的守望者,也是数字智识的开拓者。目录学数字化不是技术替代传统,而是融合创新,让学术的系统性与多样性在新媒介下焕发新的生命。以AI为桥,既要智能链接,也要人文关照——这是对自我文明的深情回应,也是新知时代的庄严约定。

高校图书馆高级系统架构师/研究馆员,推动高校AI从概念演示到可评审、可交付、可运维:路线图与立项评审、PoC交付、评测回归与上线运维(Baseline/Eval/Ops)。 1420

简单理解下JVM的组成部件

jvm的组成部件分为四大组成部件,分别为class loader 类加载器、running time data 运行时数据区、execution engine执行引擎、native interface 本地接口。 以java代码运行关系为例,说明四大组成部件的作用:首先java代码在经过编译器下被编译为字节码文件(class文件),但字节码文件并不能直接在底层操作系统中运行,需要通过jvm进行二次翻译成底层可用的系统指令,其翻译的步骤为字节码文件被class loader 类加载器加载进入 running

qq_45754346的博客 539

一篇把 Transport 做到可复制的实战指南:从 CTS 底层表到 LSMW、Variant、Layout、TABU、Query、SAPscript 全对象搬运

本文深入解析SAP系统中的Transport机制,将其视为可审计、可追溯的变更流水线。文章从CTS/Transport Organizer通用方法论和具体对象搬运手法两个层面展开,详细介绍了LSMW项目、程序Variant、屏幕/ALV Layout、表数据、ABAP Query、SAPscript和SO10标准文本等对象的传输策略。通过真实案例说明,代码对象往往能被正确传输,但"运行体验"和"业务配置"却常被遗漏,导致QAS测试正常而PRD环境异常。文章提供了一套可

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 171

从JVM角度深入理解String

String是Java中的一个类,是一个引用类型,用于表示字符串。它是不可变的(immutable),即一旦创建,其值就不能被修改。任何对String对象的修改操作都会创建一个新的String对象,而不是在原有字符串上进行修改。

欢迎每一位朋友不吝赐教,无论是宝贵的建议还是中肯的批评,都将是我前进路上不可或缺的灯塔 1663

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

从jdk源码角度理解jvm类加载机制

关于jvm类加载机制,个人感觉还是挺有深度的,可能一般写代码关注业务居多,对jvm的一些机制关注太少,只知其表,而不然其因,实在肤浅。这样写代码估计也写不出优雅的代码来。 网络上关于jvn类加载机制的文章实在是太多,但是从jdk源码角度来理解的确实比较少,之前也看到一篇优秀的博客:深入浅出ClassLoader,非常有深度地讲解了类加载机制。这里关注的是从jdk源码角度来理解。 一.委派机

探索java技术、web技术 2512

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

从进程的角度来看JVM的内存分布

上图中机器持有4G的物理内存,JVM进程则对应4G的虚拟内存空间(物理内存与虚拟内存大小并不需要保持一致); PS:为什么以4G(32位)为例,因为64位的设计因为地址空间足够反而简单一些。可以看到在虚拟地址空间中,0G~3G的虚拟地址空间为用户空间,3G~4G的虚拟地址空间为内核空间;因为CPU是通过虚拟地址进行内存访问,而内核空间需要访问所有的物理地址,所以需要在1G的内核空间映射4G的物理地址;内核在3G~3G+896MB的空间中进行线性映射,即从物理地址0~896MB的部分(ZONE_DMA+ZON

m0_57042151的博客 565

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

java 多线程 jvm_聊聊JVM(五)从JVM角度理解线程

这篇说说如何从JVM的角度来理解线程,可以对Java的线程模型有一个更加深入的理解,对GC的一些细节也会理解地更加深刻。本文基于HotSpot的OpenJDK7实现。我们知道JVM主要是用C++实现的,JVM定义的Thread的类继承结构如下:Class hierarchy- Thread- NamedThread- VMThread- ConcurrentGCThread- WorkerThre...

weixin_42172972的博客 395

从Android程序员的角度理解JVM内存布局

       从Android程序员的角度理解JVM 前言    这个标题有点怪,啥叫从Android程序员的角度理解JVM呢?从Android程序员的角度出发来说,感觉JVM(Java Virtual Machine)离我们有点远啊。因为我们一般开发都是在ART环境,最不济也是在Dalivk环境下运行App程序,JVM吗是有点远!但是,理解JVM可以帮助我们更好的了解Java内存的布局,对象...

IT先森 1475

从JVM角度对java中引用的理解

java 引用的理解。从JVM角度理解引用

qq_44850917的博客 634

从Android程序员的角度理解JVM之垃圾回收(GC)

       从Android程序员的角度理解JVM垃圾回收(GC)

IT先森 1437

从JVM角度理解线程

这篇说说如何从JVM的角度来理解线程,可以对Java的线程模型有一个更加深入的理解,对GC的一些细节也会理解地更加深刻。本文基于HotSpot的OpenJDK7实现。我们知道JVM主要是用C++实现的,JVM定义的Thread的类继承结构如下:Class hierarchy - Thread   - NamedThread     - VMThread     - ConcurrentGCThre...

qpzkobe的博客 246

一文带你吃透Java代码执行过程:JVM加载字节码+解释执行+编译执行

前本节简单介绍Java代码执行过程,JVM在执行Java代码时所做的工作,以及JVM是如何设计的。Java代码执行的过程简单可以分为以下几步:1)Java代码被编译成字节码。2)(可选)字节码被AOT编译器编译成可执行文件(该功能在JDK 17中被废弃)。3)通过JVM执行字节码或者可执行文件。JVM作为一个程序,主要包含以下功能:1)JVM加载并解析字节码,或者JVM加载可执行文件,并解析可执行文件。

2401_83384536的博客 3060
上一篇: 工厂模式和抽象工厂模式
下一篇: mySQL的慢SQL如何优化
Longtermevolution
博客等级 码龄9年 113粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值