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

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

示例三


image.png


结果为222

示意图

image.png


1、在执行func1的时候 会创建一个形参p即p2的副本
2、p和p2 指向同一个堆中对象 属性id=111
3、通过p指针修改对象的属性id为222
4、执行完func1 释放圈红部分内存
5、此时对象的id属性值为222


Linux用户态、内核态


程序处理的状态在运行过程中可能处于内核态也可能处于用户态
可能某一时刻处于用户态下一时刻切换到内核态


用户态在什么情况下能切换到内核态呢即触发条件

image.png


1、内核态的相关操作执行完了就会退回到用户态
2、外部资源:
打开机箱盖 放眼望去都是属于外部资源
内存条
网卡
磁盘
主板上的声卡
主板上的网卡
主板上的usb外设
主板上的声光同步的LED
想要操作这些硬件的话 都需要从用户态切换到内核态
比如读写文件(系统调用 open read write(系统调用的名称同时也是c语言内置的函数的名称))的时候 就会触发用户态到内核态
3、申请内存(堆内存) c语言通过malloc(c语言内置函数名称并没有一个系统调用名称与之对应)

分配内存 malloc

image.png


两者是虚拟内存空间并不是主存物理内存空间
真正拿到物理内存空间还要在第一次访问的时候
发现虚拟内存地址没有映射到物理内存地址 
于是触发一个叫缺页中断(也叫缺页异常)
操作系统中的中断和异常有很多类似的地方
java在new对象的时候也经历了这样的过程

brk

小于128k内存申请调用brk

mmap

在内存的堆空间游标到栈最小内存地址之间申请内存


最常见就是系统调用

image.png


在linux系统通过man syscalls查看所有的系统调用命令
1、accept:套接字客户端连接套接字
2、bind套接字服务端监听端口
3、brk是macloc的一种实现形式 是申请内存的
4、chmod、chown、open、read、write 这些命令都是对文件进行操作
5、 open read wirte 也是对磁盘的操作也可以归为设备类,设备类还比如io、control
6、进程 fork 当前程序中再创建一个进程;exit进程退出
7、c语言打开文件用的是fopen
fopen是一个库函数
并不是一个直接的系统调用
open是一个系统函数
fopen里面封装了open
api比较原生 写起来比较复杂 
fopen写起来比较简单

信息

比如获取当前cpu信息(getcpu)、操作系统信息
对应的函数getxxx

通信

通讯 进程之间的通信 pipe(管道)建立文件和内存的映射mmap
mmap也属于设备类


相关文章
|
2月前
|
缓存 Prometheus 监控
Elasticsearch集群JVM调优设置合适的堆内存大小
Elasticsearch集群JVM调优设置合适的堆内存大小
485 1
|
23天前
|
存储 Java 程序员
【JVM】——JVM运行机制、类加载机制、内存划分
JVM运行机制,堆栈,程序计数器,元数据区,JVM加载机制,双亲委派模型
|
1月前
|
存储 监控 算法
深入探索Java虚拟机(JVM)的内存管理机制
本文旨在为读者提供对Java虚拟机(JVM)内存管理机制的深入理解。通过详细解析JVM的内存结构、垃圾回收算法以及性能优化策略,本文不仅揭示了Java程序高效运行背后的原理,还为开发者提供了优化应用程序性能的实用技巧。不同于常规摘要仅概述文章大意,本文摘要将简要介绍JVM内存管理的关键点,为读者提供一个清晰的学习路线图。
|
2月前
|
Java
JVM内存参数
-Xmx[]:堆空间最大内存 -Xms[]:堆空间最小内存,一般设置成跟堆空间最大内存一样的 -Xmn[]:新生代的最大内存 -xx[use 垃圾回收器名称]:指定垃圾回收器 -xss:设置单个线程栈大小 一般设堆空间为最大可用物理地址的百分之80
|
2月前
|
Java
JVM运行时数据区(内存结构)
1)虚拟机栈:每次调用方法都会在虚拟机栈中产生一个栈帧,每个栈帧中都有方法的参数、局部变量、方法出口等信息,方法执行完毕后释放栈帧 (2)本地方法栈:为native修饰的本地方法提供的空间,在HotSpot中与虚拟机合二为一 (3)程序计数器:保存指令执行的地址,方便线程切回后能继续执行代码
27 3
|
2月前
|
存储 缓存 监控
Elasticsearch集群JVM调优堆外内存
Elasticsearch集群JVM调优堆外内存
61 1
|
2月前
|
Arthas 监控 Java
JVM进阶调优系列(9)大厂面试官:内存溢出几种?能否现场演示一下?| 面试就那点事
本文介绍了JVM内存溢出(OOM)的四种类型:堆内存、栈内存、元数据区和直接内存溢出。每种类型通过示例代码演示了如何触发OOM,并分析了其原因。文章还提供了如何使用JVM命令工具(如jmap、jhat、GCeasy、Arthas等)分析和定位内存溢出问题的方法。最后,强调了合理设置JVM参数和及时回收内存的重要性。
|
2月前
|
Java Linux Windows
JVM内存
首先JVM内存限制于实际的最大物理内存,假设物理内存无限大的话,JVM内存的最大值跟操作系统有很大的关系。简单的说就32位处理器虽然可控内存空间有4GB,但是具体的操作系统会给一个限制,这个限制一般是2GB-3GB(一般来说Windows系统下为1.5G-2G,Linux系统下为2G-3G),而64bit以上的处理器就不会有限制。
30 1
|
3月前
|
缓存 算法 Java
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
这篇文章详细介绍了Java虚拟机(JVM)中的垃圾回收机制,包括垃圾的定义、垃圾回收算法、堆内存的逻辑分区、对象的内存分配和回收过程,以及不同垃圾回收器的工作原理和参数设置。
136 4
JVM知识体系学习六:JVM垃圾是什么、GC常用垃圾清除算法、堆内存逻辑分区、栈上分配、对象何时进入老年代、有关老年代新生代的两个问题、常见的垃圾回收器、CMS
|
3月前
|
存储 算法 Java
Java虚拟机(JVM)的内存管理与性能优化
本文深入探讨了Java虚拟机(JVM)的内存管理机制,包括堆、栈、方法区等关键区域的功能与作用。通过分析垃圾回收算法和调优策略,旨在帮助开发者理解如何有效提升Java应用的性能。文章采用通俗易懂的语言,结合具体实例,使读者能够轻松掌握复杂的内存管理概念,并应用于实际开发中。