认识JVM


最近写者开始学习JVM,如果你和我一样是初学者,希望这篇文章能够帮助到你!
个人认为这块还是非常有必要去认真了解及学习的,特别是刚入门或入门不久的java开发来说,这是java的基石。

JVM解释

JVM全称为Java Virtual MAchine-Java虚拟机,我们可以直观的从名字上得出一个定义:JVM是java上的一个虚构出来的计算机,是一个位于Java与操作系统之间的中间态。有自己完善的硬件结构,如处理器、堆栈、寄存器等,还具有相应的指令系统。

JVM作用

Java程序的跨平台特性主要就是因为JVM实现的。在编译java程序时会将写好的源程序通过编译器编译生成.class文件(又称为字节码文件),之后就是通过JVM内部的解释器将字节码文件解释成为具体平台上的机器指令执行,所以就可以实现java程序的跨平台特性。

JVM内部体系结构大致分为三部分:类装载器(ClassLoader)子系统,运行时数据区执行引擎

java程序运行与JVM的关系:

1.java源文件编译生成.class文件(字节码)
2.字节码由JVM解释运行。
因为java程序既要编译同时也要经过JVM的解释运行,所以java被称为半解释语言。

JVM位置

初学JVM,是不是有这样的疑惑,JVM在哪?

对于JVM的位置:JVM是运行在操作系统之上的,它与硬件没有直接的交互

在这里插入图片描述

JVM体系结构

在这里插入图片描述

方法区

方法区是被所有线程共享,所有字段和方法字节码,以及一些特殊方法,如构造函数,接口代码也在此定义,简单说,所有定义的方法的信息都保存在该区域,此区域属于共享区间
静态变量、常量、类信息(构造方法、接口定义)、运行时的常量池存在方法区中,但是 实例变量存在堆内存中,和方法区无关

JNI (Java 本地方法接口)

** 即:Java Native Interface,凡是带了Native关键字的方法就会进入本地方法栈,其他的就是Java栈**

Native Method Stack

它的具体做法是Native Method Stack 中登记native方法,在(Execution Engine)执行引擎执行的时候加载Native Libraies。【本地库】

:栈内存,主管程序的运行,生命周期和线程同步;
线程结束,栈内存也就释放,对于栈来说,不存在垃圾回收问题
一旦线程结束,栈就Over!

栈运行原理栈帧 ,每个栈帧对应着一个未运行完的函数。栈帧中保存了该函数的返回地址和局部变量。
在这里插入图片描述

Heap,一个JVM只有一个堆内存,堆内存的大小是可以调节的。
类加载器读取了类文件后,一般会把 类、方法、常量、变量~ 放在堆中,来保存我们的所有引用类型的真实对象。
堆内存中还要细分为三个区域:

  • 新生区 (伊甸园区)Young/New
  • 养老区 Old
  • 永久区 Perm
    GC垃圾回收,只要在伊甸园区和养老区~
    假设内存满了,OOM(OutOfMemory:堆内存不够)
    在JDK8以后,永久存储区改了名字(元空间

PC寄存器(即:程序计数器)

每个线程都有一个线程计数器,是线程私有的,就是一个指针,指向方法区中的方法字节码(用来存储指向像一条指令的地址,也即将要执行的指令代码),在执行引擎读取下一条指令,是一个非常下的内存空间,几乎可以忽略不计

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

已转行@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值