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文章
2997浏览量
115682 -
JVM
+关注
关注
0文章
161浏览量
12957 -
虚拟机
+关注
关注
1文章
968浏览量
30177
发布评论请先 登录
Arm Neoverse CPU上大代码量Java应用的性能测试
搭建自己的ubuntu系统之创建ubuntu虚拟机
中软国际鸿云虚拟机安装指南
TECS OpenStack资源池虚拟机网络二层地址无法互通的问题处理
hyper 备份,Hyper备份:虚拟机备份与恢复
hyper-v虚拟机,为何需要用hyper-v虚拟机?
hyper v 上网,Hyper-V上网:虚拟机网络配置
hyper cpu,Hyper CPU优化:提升虚拟机性能
hyper-v 备份,hyper-v怎样进行虚拟机的创建
hyper v 删除,怎么样删除hyper-v中的虚拟机?
hyper内存条,hyper-v 添加虚拟机还需要硬盘吗
Netflix起诉博通,指控VMware虚拟机专利侵权
Ubuntu系统的虚拟机安装步骤 如何在Ubuntu系统上编译软件
Hyper-V创建虚拟机配置IP等网络配置原理(Linux、Windows为例)

Java:JVM虚拟机的入门知识
评论