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也属于设备类


相关文章
|
6月前
|
缓存 监控 Linux
Linux内存问题排查命令详解
Linux服务器卡顿?可能是内存问题。掌握free、vmstat、sar三大命令,快速排查内存使用情况。free查看实时内存,vmstat诊断系统整体性能瓶颈,sar实现长期监控,三者结合,高效定位并解决内存问题。
497 0
Linux内存问题排查命令详解
|
缓存 Linux
linux 手动释放内存
在 Linux 系统中,内存管理通常自动处理,但业务繁忙时缓存占用过多可能导致内存不足,影响性能。此时可在业务闲时手动释放内存。
679 17
|
10月前
|
缓存 Linux 数据安全/隐私保护
Linux环境下如何通过手动调用drop_caches命令释放内存
总的来说,记录住“drop_caches” 命令并理解其含义,可以让你在日常使用Linux的过程中更加娴熟和自如。
1536 23
|
12月前
|
存储 缓存 算法
JVM简介—1.Java内存区域
本文详细介绍了Java虚拟机运行时数据区的各个方面,包括其定义、类型(如程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区和直接内存)及其作用。文中还探讨了各版本内存区域的变化、直接内存的使用、从线程角度分析Java内存区域、堆与栈的区别、对象创建步骤、对象内存布局及访问定位,并通过实例说明了常见内存溢出问题的原因和表现形式。这些内容帮助开发者深入理解Java内存管理机制,优化应用程序性能并解决潜在的内存问题。
627 29
JVM简介—1.Java内存区域
|
12月前
|
监控 Linux Python
Linux系统资源管理:多角度查看内存使用情况。
要知道,透过内存管理的窗口,我们可以洞察到Linux系统运行的真实身姿,如同解剖学家透过微观镜,洞察生命的奥秘。记住,不要惧怕那些高深的命令和参数,他们只是你掌握系统"魔法棒"的钥匙,熟练掌握后,你就可以骄傲地说:Linux,我来了!
399 27
|
12月前
|
缓存 监控 算法
JVM简介—2.垃圾回收器和内存分配策略
本文介绍了Java垃圾回收机制的多个方面,包括垃圾回收概述、对象存活判断、引用类型介绍、垃圾收集算法、垃圾收集器设计、具体垃圾回收器详情、Stop The World现象、内存分配与回收策略、新生代配置演示、内存泄漏和溢出问题以及JDK提供的相关工具。
JVM简介—2.垃圾回收器和内存分配策略
|
消息中间件 Linux
Linux中的System V通信标准--共享内存、消息队列以及信号量
希望本文能帮助您更好地理解和应用System V IPC机制,构建高效的Linux应用程序。
485 48
|
12月前
|
存储 Java 编译器
JVM简介—3.JVM的执行子系统
本文详细介绍了Java类的加载、执行及其相关机制,涵盖Class文件结构、字节码指令、类加载器、双亲委派模型、栈桢和方法调用等内容。
JVM简介—3.JVM的执行子系统
|
12月前
|
存储 编解码 安全
阿里云高性能企业级甄选Intel第八代计算型c8i、通用型g8i和内存型r8i实例简介
计算型c8i、通用型g8i和内存型r8i实例是阿里云推出的高性能企业级甄选Intel第八代云服务器实例,采用CIPU+飞天技术架构,搭载最新的Intel 第五代至强可扩展处理器(代号EMR),性能进一步大幅提升,同时拥有AMX加持的AI能力增强,并在全球范围率先支持TDX机密虚拟机能力,实现了AI增强和全面安全防护的两大特色优势。本文将为您介绍这三个实例规格的性能、适用场景及最新活动价格以及选择指南,以供选择参考。
463 18
|
缓存 NoSQL Linux
Linux系统内存使用优化技巧
交换空间(Swap)的优化 禁用 Swap sudo swapoff -a 作用:这个命令会禁用系统中所有的 Swap 空间。swapoff 命令用于关闭 Swap 空间,-a 参数表示关闭 /etc/fstab 文件中配置的所有 Swap 空间。 使用场景:在高性能应用场景下,比如数据库服务器或高性能计算服务器,禁用 Swap 可以减少磁盘 I/O,提高系统性能。
493 3