JVM产品

1.产品简介

1.1是什么(JAVA虚拟机)

java虚拟机是一台执行java字节码的虚拟计算机,他拥有独立的运行机制,其运行的java字节码也未必由java源文件编译而来。
java虚拟机是在操作系统上做了一层封装,屏蔽了具体操作系统API的底层细节,使得java程序具有跨平台的特性。
JVM是跨语言的,多种语言可以运行在JVM虚拟机上,从而可以利用JVM带来的跨平台特性和优秀的垃圾回收机制。以及可靠的即时编译器。

跨平台

多种编程语言只要提供各自的编译器,把源代码编译成符合java虚拟机规范的字节码文件,就可以在JAVA虚拟机上运行。这时应该叫JVM字节码文件了。

java技术的核心就是JAVA虚拟机,因为所以java程序都运行在java虚拟机内部。

1.2诞生的背景是什么?(需要让JAVA语言跨平台)

所谓虚拟机(Virtual Machine)就是一台虚拟的计算机,它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。

比较出名的系统虚拟机有Visual Box、VMware,他们是完全对物理计算机的仿真,提供一个可运行完整操作系统的软件平台。

Java虚拟机就是典型的程序虚拟机,他专门为执行单个计算机程序而设计的,在Java虚拟机中执行的指令我们称为Java字节码指令。

无论是系统虚拟机还是程序虚拟机,在上面运行的软件都被限制于虚拟机提供的资源中,比如java虚拟机我们可以设置堆内存大小,VMware的虚拟机我们可以设置CPU数,内存数等等。这些就是虚拟机提供的资源,软件运行会被限制在该资源中。

2.产品需求

2.1能够加载Class文件到内存

2.2能够识别Class文件的结构的以及合法性

2.3需要提供内存存储Class文件信息

2.4需要提供存储对象的内存

2.5需要提供执行引擎可以解释Class文件信息

2.6需要提供垃圾回收器对象对内存进行回收

2.7需要与第三方的语言进行通讯

3.产品设计

3.1类加载子系统

类加载子系统是用于加载编译后class文件的,但它只负责将符合格式要求的class字节码信息加载进内存,而只要符合格式规范的class文件都能被加载,至于加载进入的class文件到底是否能执行就并不是它负责的了,这是执行引擎子系统的范围之内的责任。

而类加载子系统中,核心知识点分为类加载器、双亲委派模型、类加载过程三大块。

3.2运行时内存区

3.2.1方法区

各个线程共享区域

在JVM启动时被创建,并且物理内存可以不连续

大小可以固定也可以是动态扩展的

方法区的大小决定了系统可以保存多少个类,如果系统定义了太多的类会出现OOM错误。

会随着JVM的关闭而释放这一区域的内存

3.2.2堆区

一个JVM实例中只存在一个堆区,堆也是Java内存管理的核心区域。

堆区的唯一目的就是存放对象实例,几乎所有的对象实例以及数据都在这里进行分配内存。

Java堆是垃圾收集器管理的主要区域,因此也被称为GC堆。

3.3.3栈区

存放函数的参数值、局部变量等,由编译器自动分配和释放,通常在函数执行完后就释放了,其操作方式类似于数据结构中的栈。栈内存分配运算内置于CPU的指令集,效率很高,但是分配的内存量有限,比如iOS中栈区的大小是2M。

3.3.4程序计数器

程序计数器 内存空间是不大的,第一眼看到这个名词,很有可能被认为是计量程序执行次数?不不不,千万别这样理解,我们可以把它当做一个下标位置临时存储,例如打断点中的当前断点位置;都知道,对于jvm层面而言,所执行的是class字节码文件,那么字节码文件中的程序逻辑也有顺序,一个简单的程序化结构语言如下:

那么程序计数器中到底存放的是什么内容呢?

好比下方的一个简单的程序流程图来说,当执行完“用户输入”动作后,下一步的动作是什么?谁知道?只有当前线程的程序计数器知道,"程序计数器"知道,当“输入是否是字符Y”后判断true还是false后,分别执行说明动作?是B操作?C操作?还是其他操作?都需要通过程序计数器来控制。

换一种描述词,我们还可以把其当做当前线程所执行的字节码的行号指示器。是一种程序控制流的指示器,包括任何的分支、循环、跳转、异常处理、线程恢复等操作都需要依赖于当前线程的程序计数器来指引。

通过程序计数器,将一个个指令,可以连接成一个完整的动作,从而完成整个程序的执行。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值