JVM简介

本文详细解析了JVM的内存结构,包括方法区、本地方法栈、程序计数器、栈内存和堆内存的功能与作用。阐述了栈内存与堆内存的特性,以及它们在Java程序运行中的关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、JVM体系结构图
JVM是运行在操作系统上的,它与计算机硬件没有直接的交互。
在这里插入图片描述
JVM主要包括五部分:Java栈、堆、方法区、本地方法栈、程序计数器。

1)方法区:方法区是被所有线程共享的
静态变量+常量+类信息(构造方法+接口定义)+运行时常量池均保存在方法区

2)本地方法栈:加载其他语言的本地方法库,native关键字

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

二、栈内存
栈内存主管java程序的运行,在线程创建时创建,在线程结束时释放,不存在垃圾回收,每个线程都有自己私有的一块栈内存。

栈内存存储:8种基本数据类型 + 对象的引用变量 + 实例方法
栈内存遵循 “先进后出,后进先出” 原则

StackOverflowerError 线程请求的栈深度大于虚拟机所允许的深度

三、堆内存
堆内存线程共享,主要是存放对象实例和数组。

OutOfMemoryError:如果堆中没有内存完成实例分配,并且堆也无法再扩展时,抛出该异常

堆内存逻辑上主要分为三部分:新生区、养老区、永久区

新生区执行minor gc, 养老区执行full gc, full gc后仍无法进行对象保存,则报OutOfMemoryError

永久区存储运行时必须的类信息,被装载在此区域的数据不会进行垃圾回收,关闭JVM才会释放永久区内存

栈、堆、方法区的交互关系

四、堆内存参数调优
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值