JVM内存管理深度剖析,GC算法与底层原理

本文深入剖析Java Virtual Machine(JVM),详细讲解其类加载器、运行时数据区域、动态连接、返回地址等核心概念。重点探讨了JVM的堆内存分配,包括新生代、老年代的内存布局,以及对象生存与GC策略。同时,提到了虚拟机栈和本地方法栈的映射关系,以及虚拟机优化技术。
摘要由CSDN通过智能技术生成

Java Virtual Machine

JVM 全称 Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机。它能识别 .class后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。

Java类加载器ClassLoader也是JVM中的一部分,他将.class存储到运行时数据区当中。最后生成机器码给操作系统。

 运行时数据区域

Java虚拟机在执行Java程序 的过程中会把它所管理的 内 存 划分为若干个不同的数据 区域。

下面对运行时数据区域进行细讲:
一. 程序计数器:
由于存在多线程场景, 记录 当前线程正在执行的 字节码 指令的地址。
由于有在操作系统层存在时间片轮转,导致线程之间的切换,这就需要有内存来记录每个线程运行的地址。
在JVM内存区域中唯一不会OOM的区域,其他区域都会出现OOM。
二.虚拟机栈
存储当前线程运行方法所需的数据,指令、返回地址。如果虚拟机栈是子弹夹,那么它的子弹就是栈帧,里面可以包含很多个栈帧
栈帧里面包含的内容: 
1. 局部变量表: 顾名思义就是局部变量的表,用于存放我们的局部变量的。首先它是一个32位的长度,主要存放我们的Java的八大基础数据类型,一般32位就可以存放下,如果是64位的就使用高低位占用两个也可以存放下,如果是局部的一些对象,比如我们的Object对象,我们只需要存放它的一个引用地址即可。
2 . 操作数据栈 :存放我们方法执行的操作数的,它就是一个栈,先进后出的栈结构,操作数栈,就是用来操作的,操作的的元素可以是任意的java数据类型,所以我们知道一个方法刚刚开始的时候,这个方法的操作数栈就是空的,操作数栈运行方法就是JVM一直运行入栈/出栈的操作。

3. 动态连接:Java语言特性多态(需要类运行时才能确定具体的方法)。多态分为静态分派和动态分派。 

4. 返回地址:正常返回(调用程序计数器中的地址作为返回)、异常的话(通过异常处理器表<非栈帧中的>来确定)

虚拟机栈有大小限制,默认Hotspot 虚拟机的大小为1M.可用参数 –Xss调整大小,例如-Xss256k
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值