JVM内存结构

本文详细介绍了JVM的内存结构,包括程序计数器、虚拟机栈、本地方法栈、堆内存、方法区(在JVM不同版本中的变化)以及直接内存。每个部分都阐述了其作用和在JVM执行过程中的职责,例如堆内存用于存储对象实例,方法区存储类信息,程序计数器用于记录执行的字节码指令。此外,还探讨了JVM的内存参数设置,如堆大小、新生代和老年代的比例、线程栈大小等。
摘要由CSDN通过智能技术生成

一、java代码编译执行过程

  1. 源码编译:通过Java源码编译器将Java代码编译成JVM字节码(.class文件)
  2. 类加载:通过ClassLoader及其子类来完成JVM的类加载
  3. 类执行:字节码被装入内存,进入JVM虚拟机,被解释器解释执行
    在这里插入图片描述 注:Java平台由Java虚拟机和Java应用程序接口搭建,Java语言则是进入这个平台的通道,
    用Java语言编写并编译的程序可以运行在这个平台上

二、JVM简介

  1. java程序经过一次编译之后,将java代码编译为字节码也就是class文件,然后在不同的操作系统上依靠不同的java虚拟机进行解释,最后再转换为不同平台的机器码,最终得到执行

  2. Java虚拟机(JVM) 处在核心的位置,是程序与底层操作系统、硬件无关的关键。

    • JVM的下方是移植接口,移植接口由两部分组成:适配器和Java操作系统, 其中依赖于平台的部分称为适配器,JVM 通过移植接口在具体的平台和操作系统上实现
    • JVM 的上方是Java的基本类库和扩展类库以及它们的API, 利用Java API编写的应用程序(application) 和小程序(Java applet) 可以在任何Java平台上运行而无需考虑底层平台
    • Java虚拟机(JVM)实现了程序与操作系统的分离,从而实现了Java 的跨平台
  3. JVM在它的生存周期中有一个明确的任务,那就是运行Java程序,因此当Java程序启动的时候,就产生JVM的一个实例;当程序运行结束的时候,该实例也跟着消失了

  4. 三种JVM:① Sun公司的HotSpot ② BEA公司的JRockit ③ IBM公司的J9 JVM

    • 在JDK1.7及其以前我们所使用的都是Sun公司的HotSpot,但由于Sun公司和BEA公司都被oracle收购,jdk1.8将采用Sun公司的HotSpot和BEA公司的JRockit两个JVM中精华形成jdk1.8的JVM。

三、JVM体系结构

  1. Class Loader类加载器
    负责加载 .class文件,class文件在文件开头有特定的文件标示,并且ClassLoader负责class文件的加载等,至于它是否可以运行,则由Execution Engine决定。
      ① 定位和导入二进制class文件
      ② 验证导入类的正确性
      ③ 为类分配初始化内存
      ④ 帮助解析符号引用.
  2. Native Interface本地接口
      本地接口的作用是融合不同的编程语言为Java所用,它的初衷是融合C/C++程序,Java诞生的时候C/C++横行的时候,要想立足,必须有调用C/C++程序,于是就在内存中专门开辟了一块区域处理标记为
      native的代码,它的具体作法是Native Method Stack中登记native方法,在Execution Engine执行时加载native libraies。
      目前该方法使用的越来越少了,除非是与硬件有关的应用,比如通过Java程序驱动打印机,或者Java系统管理生产设备,在企业级应用中已经比较少见。
      因为现在的异构领域间的通信很发达,比如可以使用Socket通信,也可以使用Web Service等。
  3. Execution Engine 执行引擎:执行包在装载类的方法中的指令,也就是方法。
  4. Runtime data area 运行数据区(即:虚拟机内存或者JVM内存 下节
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值