Java开发现在面试越来越难了,进大厂必备的JVM、多线程高并发这都是最基础的知识了,今天我们一起来学习Java虚拟机入门。
运行时数据区域
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域,主要有这么几个区域,并且对每个区域进行介绍。

程序计数器
程序计数器(Program Counter Register)它是一块较小的内存空间,它是记录当前线程所执行到的字节码的行号。因为由于Java虚拟机的多线程是通过线程轮流切换、以及分配处理器执行时间的方式来实现的,一个处理器都只会执行一条线程中的指令。为了让线程切换后能够恢复到正常的执行位置,所以每一条线程都有一个独立的程序计数器,这样线程之间计数器互不影响。

Java虚拟机栈
和程序计数器一样是线程私有,它的生命周期是与线程相同的。Java虚拟机是Java执行方法的内存模型,在每个方法执行时都会同步创建一个栈帧(Stack Frame),主要是用来存储:局部变量表、操作数栈、动态链接、方法出口等信息。
本地方法栈
本地方法栈就是为虚拟机使用到的本地(Native) 方法服务的。
Java堆(Heap)
Java堆是虚拟机所管理的内存中最大的一块,是所有线程共享的一块区域,唯一的目的就是存放对象实例,并且是“几乎”所有的对象的实例都是在“Java堆”分配内存的。
同时Java堆也是垃圾收集器管理的内存区域,也称之为“GC堆”。由于现在基本采用分代回收垃圾器算法,所以Java堆又可以分为:新生代、老年代。
法区
方法区也是线程共享的内存区域,主要存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。
很多Java程序员都习惯在 HotSpot虚拟机上开发、部署程序,很多人都更愿意把方法区称呼为“永久代“。到了 JDK 8,终于完全废弃了永久代的概念,改用与JRockit、J9一样在本地内存中实现的元空间(Metaspace)来代替了。注意:这区域的内存回收目标主要是针对常量池的回收和对类型的卸载。
补充
运行时常量池:它是方法区的一部分,用于存放编译期生成的各种字面量与符号引用,这部分内容将在类加载后存放到方法区的运行时常量池中。对于初学者想深入JVM虚拟机原理,国内非常不错的深入理解Java虚拟机第三版这本,值得Java程序员看的。
-
JAVA
+关注
关注
20文章
3015浏览量
117024 -
JVM
+关注
关注
0文章
161浏览量
13096 -
虚拟机
+关注
关注
1文章
976浏览量
30764
发布评论请先 登录
SGG-北京总部Java20250625-12月结课
Java并发编程的“基石”——多线程概念初识
【虚拟化数据恢复】ESXI虚拟机还原快照致数据丢失?完整恢复方案解析
【米尔全志T153开发板评测】虚拟机资料下载与安装
虚拟机数据恢复—虚拟机vmdk文件被删除的数据恢复案例
服务器数据恢复—EqualLogic存储硬盘离线导致上层虚拟机不可用的数据恢复案例
Arm架构助力Azure Cobalt 100虚拟机工作负载性能提升
虚拟机数据恢复—异常断电致ESXI存储失联?这份实战数据恢复案例请收好
Arm Neoverse CPU上大代码量Java应用的性能测试
蜂鸟e203在虚拟机unbuntu上面验证时报错的可能原因及解决措施
搭建自己的ubuntu系统之创建ubuntu虚拟机
中软国际鸿云虚拟机安装指南
迅为RK3588开发板挂载Windows以及虚拟机Ubuntu测试
TECS OpenStack资源池虚拟机网络二层地址无法互通的问题处理
虚拟化数据恢复—XenServer虚拟化平台上VPS不可用的数据恢复案例
Java:JVM虚拟机的入门知识
评论