首页 > 系统相关 >【JVM】Java跨平台性质及Java虚拟机内存结构

【JVM】Java跨平台性质及Java虚拟机内存结构

时间:2024-08-10 21:54:08浏览次数:16  
标签:Java int 虚拟机 跨平台 线程 执行 方法

目录

Java为什么可以跨平台

Java虚拟机的内存结构

简单聊聊~

Java为什么可以跨平台

Java编写的代码可以做到一次编译,多平台运行。这是为什么呢?

我们在使用Java之前先要去按照对应操作系统版本的JDK,JDK中包含了Java编译器,Java虚拟机,一些类库等。

在编写完代码之后,代码通过编译器进行编译生成字节码文件(也就是.java文件被编译成了.class文件),然后被java虚拟机执行。

在执行的过程中,不同操作系统版本下的java虚拟机就会将字节码文件解释为该操作系统能够理解的机器指令进行执行,从而达到在不同平台下运行结果的统一。

Java虚拟机的内存结构

Java虚拟机内存结构包含方法区,堆区,虚拟机栈,本地方法栈,程序计数器这五个部分。

当运行字节码文件时,会将类信息放入方法区,由字节码执行引擎来执行代码。

每个线程独享有一个虚拟机栈,本地方法栈,程序计数器来存放执行过程中的数据,而所有的线程共享堆区和方法区中的数据。

虚拟机栈内由一个个栈帧组成,而一个方法对应一个栈帧内存。

栈帧由四个部分组成:

局部变量表,操作数栈,动态链接,方法出口

public class Test {
    public static void main(String[] args) {
        int a = 2;
        int b = 1;
        int c = add(a, b);
        System.out.println(c);
    }
    public static int add(int o1, int o2) {
        return o1+o2;
    }
}

局部变量表用于存放a,b这些变量对应的值,如果是对象则是该对象在堆中对应的内存地址,

而操作数栈是用来辅助计算的,

当执行引擎执行到int c = add(a, b)这行代码时,应当要跳到add方法所在的方法区的内存地址去执行代码,而动态链接则是保存了add方法的内存地址。(所以动态链接就是保存了方法中所调用方法的内存地址)

假如当前进入了add方法执行完后要返回到main方法中继续执行,就需要看方法出口,方法出口中保存了main方法的内存地址。(所以方法出口就是保存了要返回的方法的地址)

而本地方法栈类似虚拟机栈,区别是本地方法栈的每一个栈帧对应的是一个本地方法(即被native修饰的方法),用来存本地方法执行过程中的数据。

程序计数器是用于记录线程执行到了哪一行代码,实际存的是当前执行到的代码的下一行代码的内存地址。

假设一个线程A被挂起,转而运行另一个线程B,过一段时间,这个线程A恢复了运行,就可以通过程序计数器来看执行到了哪一行代码,然后继续运行线程A。

今天介绍到这里,明天继续!

开发入门中,欢迎指教~

标签:Java,int,虚拟机,跨平台,线程,执行,方法
From: https://blog.csdn.net/m0_73455589/article/details/141096479

相关文章

  • Java学习第六周
    packagecom.sxt;publicclassTestLoop{publicstaticvoidmain(String[]args){for(intm=1;m<=5;m++){for(inti=0;i<5;i++){System.out.println(m+"\t");}System.out.println();}}}1 1 1 1 12 2 2 2 23 3 3 3 34 4 4 4......
  • 基于Java Web的社区新闻推荐系统/资讯网站
     目录摘要Abstract1引言1.1研究背景1.2研究现状1.3主要研究内容2相关技术2.1Java介绍2.2MySQL数据库2.3Tomcat2.4Vue框架3需求分析3.1功能需求分析3.2非功能需求分析3.3可行性分析4系统设计4.1系统功能设计4.2系统流程设......
  • 基于java+ssm+vue的大学生社团活动管理微信小程序
    ......
  • 手把手教你运行Java开源框架若依RuoYi(视频教程)
    很多小伙伴在学习若依框架的时候,可能会遇到项目启动失败等各种问题。于是,我抽空制作了若依各个版本的项目启动教程,希望对初学者有一定帮助!在启动若依框架的时候,需要配置好基础开发环境。JDK版本使用1.8.xMySQL版本使用5.7.xNode版本使用14.xNacos版本使用2.0.xReids......
  • 学习Java的第六周
    第六周的学习记录来喽,本周按照黑马程序员课程安排,并没有学习新的内容,而是上了专题课:综合案例,通过这些练习题综合练习了前面所学的各个知识点,既复习了前面几周跟着课程自学的Java基础,也在做练习题的过程中“温故而知新”,学到了不少新知识新技巧,总体看来这些习题难度都不小,说实话也......
  • Java中的灵活缓存失效策略设计:从TTL到LRU的实现
    Java中的灵活缓存失效策略设计:从TTL到LRU的实现大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!缓存失效策略在现代应用程序中至关重要,它决定了缓存数据的更新和淘汰机制。本文将探讨在Java中如何实现灵活的缓存失效策略,包括TTL(Time-To-Live)和LRU(Le......
  • Java中的异步编程模型与事件处理框架:从CompletableFuture到Reactive Streams
    Java中的异步编程模型与事件处理框架:从CompletableFuture到ReactiveStreams大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在现代软件开发中,异步编程和事件驱动架构变得越来越重要。它们能有效提高应用程序的性能和响应速度,特别是在处理高并发和I......
  • 已解决:java.lang.UnsupportedClassVersionError 异常的正确解决方法,亲测有效!!!
    java.lang.UnsupportedClassVersionError是一个常见的错误,通常出现在运行一个Java程序时,提示某个类的版本与当前JVM(JavaVirtualMachine)不兼容。这通常意味着你试图在一个较低版本的JVM上运行由较高版本的Java编译器编译的类文件。本文将详细分析该错误的成因,并提供有效的解......
  • Java IO 流详解
    概述流是一个抽象的概念,代表了数据的无结构化传递。流的本质是数据在不同设备之间的传输。在Java中,数据的读取和写入都是以流的方式进行的在Java中,根据数据流向的不同,可以将流分为输入(Input)流和输出(Output)流。根据单位的不同,可以将流分为字节流和字符流。根据等级的不同,可以......
  • Java计算机毕业设计基于Android的校园网上拍卖平台(开题报告+源码+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在数字化校园建设的浪潮中,学生们对于便捷、高效的二手商品交易需求日益增长。传统的校园跳蚤市场受限于时间、空间等因素,难以满足学生群体对于多样化......