JVM内存划分、Linux用户态、内核态简介(上)

简介: JVM内存划分、Linux用户态、内核态简介(上)

JVM内存划分


image.png


1、在Java运行的时候 JVM虚拟机拿到自己能支配的内存 将内存进行分割
2、本地方法栈存储是C++ native方法
3、程序计数器指向程序当前运行的位置
4、方法区存储元数据信息
在jdk1.7之前 叫做永久代
jdk8之后改为元数据空间
主要存储一些静态方法或变量 类加载classloader等等这样一些全局的信息
5、栈区存储函数当前运行中的临时变量
栈、本地方法栈、程序计算器是线程私有的
每个线程在运行的过程中 会单独分配内存
有多少线程就会有多少栈区
6、堆区和方法区都是全局共享
堆区主要用来存对象
7、栈区存储的是对象的引用类型 只是对象的一个地址 最终指向堆区实际存在的对象


举例说明


示例1

java程序代码

image.png

结果为20,10

示意图

image.png


1、执行main函数 在栈中给a变量分配栈内存 赋值10(a是实参数)
2、执行func1 在栈中给a变量分配栈内存 赋值10(a变成了形参)
3、在栈中给b变量分配栈内存 赋值10
4、修改a值为11
5、执行完func1释放栈内存
栈遵循先入后除原则 先删除b再删除a


示例二


image.png

image.png


1、执行func1在栈中分配内存给变量a并赋值10 占4个字节大小
2、在栈中分配内存给变量b并赋值10 占4个字节大
3、在堆中创建一个对象new Person id默认为0 ,name默认为null
4、在栈中分配内存给变量p表示指向对象的地址 地址是int类型 占4个字节大 是引用类型
5、通过p指针给堆中的对象的属性id赋值为1
6、在堆中创建一个String对象 该对象中有char数组
char数组是值类型 不是一个对象类型
7、p指针给堆中的对象的属性name 它也代表一个指针 指向String对象
8、func1执行完释放圈红部分内存 栈上12字节的内存就会被释放
9、堆中的对象如何释放?
在堆上运行的对象不能随着函数运行完毕自动清理
你也不知道是否有其他线程也引用当前对象
是否也是引用的当前这个地址来访问的


Java的基础数据类型都是值类型 指针也是值类型 因而是直接存到内存 不是存地址去寻址

1、main函数在方法区
2、如果类Main中有一个static Integer a 静态全局变量
那么该变量会存放在方法区中 所有的栈函数都可以Main.a引用


相关文章
|
1月前
|
缓存 Linux
linux 手动释放内存
在 Linux 系统中,内存管理通常自动处理,但业务繁忙时缓存占用过多可能导致内存不足,影响性能。此时可在业务闲时手动释放内存。
110 17
|
3月前
|
缓存 Prometheus 监控
Elasticsearch集群JVM调优设置合适的堆内存大小
Elasticsearch集群JVM调优设置合适的堆内存大小
637 1
|
11天前
|
消息中间件 Linux
Linux中的System V通信标准--共享内存、消息队列以及信号量
希望本文能帮助您更好地理解和应用System V IPC机制,构建高效的Linux应用程序。
80 48
|
1月前
|
消息中间件 Linux
Linux:进程间通信(共享内存详细讲解以及小项目使用和相关指令、消息队列、信号量)
通过上述讲解和代码示例,您可以理解和实现Linux系统中的进程间通信机制,包括共享内存、消息队列和信号量。这些机制在实际开发中非常重要,能够提高系统的并发处理能力和数据通信效率。希望本文能为您的学习和开发提供实用的指导和帮助。
119 20
|
2月前
|
算法 Linux
深入探索Linux内核的内存管理机制
本文旨在为读者提供对Linux操作系统内核中内存管理机制的深入理解。通过探讨Linux内核如何高效地分配、回收和优化内存资源,我们揭示了这一复杂系统背后的原理及其对系统性能的影响。不同于常规的摘要,本文将直接进入主题,不包含背景信息或研究目的等标准部分,而是专注于技术细节和实际操作。
|
2月前
|
存储 监控 算法
深入探索Java虚拟机(JVM)的内存管理机制
本文旨在为读者提供对Java虚拟机(JVM)内存管理机制的深入理解。通过详细解析JVM的内存结构、垃圾回收算法以及性能优化策略,本文不仅揭示了Java程序高效运行背后的原理,还为开发者提供了优化应用程序性能的实用技巧。不同于常规摘要仅概述文章大意,本文摘要将简要介绍JVM内存管理的关键点,为读者提供一个清晰的学习路线图。
|
3月前
|
Java
JVM内存参数
-Xmx[]:堆空间最大内存 -Xms[]:堆空间最小内存,一般设置成跟堆空间最大内存一样的 -Xmn[]:新生代的最大内存 -xx[use 垃圾回收器名称]:指定垃圾回收器 -xss:设置单个线程栈大小 一般设堆空间为最大可用物理地址的百分之80
|
3月前
|
Java
JVM运行时数据区(内存结构)
1)虚拟机栈:每次调用方法都会在虚拟机栈中产生一个栈帧,每个栈帧中都有方法的参数、局部变量、方法出口等信息,方法执行完毕后释放栈帧 (2)本地方法栈:为native修饰的本地方法提供的空间,在HotSpot中与虚拟机合二为一 (3)程序计数器:保存指令执行的地址,方便线程切回后能继续执行代码
38 3
|
3月前
|
存储 缓存 监控
Elasticsearch集群JVM调优堆外内存
Elasticsearch集群JVM调优堆外内存
73 1
|
3月前
|
存储 算法 安全
深入理解Linux内核的内存管理机制
本文旨在深入探讨Linux操作系统内核的内存管理机制,包括其设计理念、实现方式以及优化策略。通过详细分析Linux内核如何处理物理内存和虚拟内存,揭示了其在高效利用系统资源方面的卓越性能。文章还讨论了内存管理中的关键概念如分页、交换空间和内存映射等,并解释了这些机制如何协同工作以提供稳定可靠的内存服务。此外,本文也探讨了最新的Linux版本中引入的一些内存管理改进,以及它们对系统性能的影响。