浅谈Java虚拟机JVM

JVM运行时的内存区域是怎样的?

根据Java虚拟机的定义,JVM运行时内存区域主要由Java堆、Java栈【Java栈、虚拟机栈】、方法区和程序计数器以及运行时常量池组成。

运行时内存区域的组成各部分主要作用:

程序计数器:一个只读的存储器,用于记录Java虚拟机正在执行的字节码指令的地址

Java虚拟机栈:一种线程私有的存储器,用于存储Java中的局部变量

本地方法栈:本地方法栈是一种特殊的栈,它与Java虚拟机栈有着相同的功能,但它致辞本地代码(Native Code)的执行

Java堆:是存储对象实例的运行时内存区域

方法区:用于存储已被加载的类信息、常量、静态变量、即时编译后的代码的数据区域

方法区的具体实现有多种,比如堆、永久代、元空间等

运行时常量:是方法区的一部分。用于存储编译阶段生成的信息,主要有字面量和符号引用常量两类

哪些是程序共享那些事程序私有的

堆、方法区以及运行时常量池是线程共享的

栈、程序计数器是线程私有的

堆和栈的区别:

1、存储位置不同,堆是在JVM的堆内存中分配空间,栈是JVM的栈内存中分配空间

2、存储的内容不同,堆中主要存储对象,栈中主要存储本地变量

3、堆是线程共享的,栈是程序私有的

4、栈的大小要比堆小很多

内存泄漏和内存溢出是啥?

见字起意,以下说说个人看法

内存泄漏:内存泄漏就是使用了对象以后,资源没有及时的关闭或回收,就比如ThreadLocal,随着时间越久,可用的内存就是慢慢减少

内存溢出:程序想要调用内存中的大小已经超出了我们内存的实际大小

一般情况,内存泄漏会导致内存溢出的,因为内存泄漏一直无法回收资源,并且内存一直在减少,久而久之就会导致没有可用内存来分配,就会导致内存溢出

相关推荐
2601_962106646 分钟前
HashMap入门|工号-姓名键值存储、两种遍历方式、根据key/value查
java
czq_268671948713 分钟前
Python打卡第46天
开发语言·python
杨凯凡39 分钟前
Spring Framework 7 API 版本管理实战:请求头路由、兼容迁移与废弃策略
java·rest api·springframework·spring boot 4·api版本管理
T_Wizard1 小时前
同一个问题写了 4 遍:官方 SDK / HTTP / Spring AI / LangChain4j,到底该选哪个
java·ai编程
hai_android1 小时前
AudioTrack 深度解析:从原理到实战
android·java·kotlin
斯维赤1 小时前
限流、熔断、降级,你真的分得清吗?
java·后端·架构
Evand J3 小时前
【MATLAB例程介绍】(17)永磁同步电机(PMSM)基于自适应无迹卡尔曼滤波(AUKF)的电流噪声在线估计。测量噪声协方差自适应与转速估计对比仿真
开发语言·matlab·卡尔曼滤波·无迹卡尔曼滤波·pmsm·电机滤波
BaiPeter4 小时前
ZPL文件预览
开发语言·c++
aiks_yuan4 小时前
Java CPU 100% 怎么排查:JDK 11 起 jstack 自带线程 CPU 时间,不用再 top -H 换算十六进制(JDK 8、11、17 实测)
java
Flynn Liang6 小时前
AiServices 源码级拆解:一个接口如何变成 RAG Agent
java·langchain·源码分析·rag·langchain4j·aiservices