首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么java程序占用那么内存

做java开发以来,有一个问题一直萦绕在脑海,那就是java程序为什么会占用那么的虚拟内存。之前也没有深究,因为服务器内存够大。...缘由 自从用上docker容器后,容器老报警,登上容器看看资源使用情况,发现java程序占用的虚拟内存不是一般的高。...检测命令是top,其中VIRT程序申请的内存有32GB,RES程序实际使用的内存有4.6GB,实际上我配置的最大内存和最小内存只有16GB。...查看内存映射 linux服务器提供了查看内存映射关系的命令pmap pmap(选项)(参数) 选项 -x:显示扩展格式; -d:显示设备格式; -q:不显示头尾行; -V:显示指定版本。...我将这些分配内存的块大小都加起来,最终大小是32GB,说明除了我申请的16GB内存程序又额外申请了16GB内存

3.1K10

Linux:使用 Alternatives 管理版本程序

Linux 系统中,经常会遇到一个软件有多个版本共存的情况。这时,管理和选择默认使用哪个版本就显得尤为重要。...本文将详细介绍如何使用 alternatives 命令在 Linux 中切换程序版本,确保我们能够灵活掌握这一强大工具。...基本概念 alternatives 命令实际上是 update-alternatives 的简写,它是 Debian 及其衍生版(如 Ubuntu)中的一个工具,但其他许多 Linux 发行版也提供了这一功能或类似功能...添加新的程序版本 使用 alternatives 添加新的程序版本,需要指定程序的名称、可执行文件路径、优先级等参数。...结论 通过掌握 alternatives 系统,我们可以更加灵活地管理 Linux 系统中软件的多个版本,无论是开发环境还是生产环境,都能确保软件配置的最优化和个性化。

12710
您找到你想要的搜索结果了吗?
是的
没有找到

Linux下c程序内存映像

(2)内存有多种管理方法:栈、堆、数据段、bss段、.text段等,其实这个Linux环境可以查看以ELF结尾的可执行程序,可以看到所说的这些的;一个变量的存储类属性就是描述这个变量存储在何种内存段中。...Linux下c程序内存映像 - 代码段、只读数据段 - (1)对应着程序中的代码(函数),代码段在linux中又叫文本段(.text)。...C语言不会自动向堆中存放东西,堆的操作是程序员自己手工操作的。程序员根据需求自己判断要不要使用堆内存,用的时候自己申请(使用malloc函数),自己使用,完了自己释放(使用free函数释放掉)。...(2)对于linux中的每一个进程来说,它都以为整个系统中只有它自己和内核而已。它认为内存地址0xC0000000以下都是它自己的活动空间,0xC0000000以上是OS内核的活动空间。...总结 上面的介绍,只是一些概念性的介绍,要详细更加深入的理解Linux内存,可以看这篇文章:https://blog.csdn.net/f22jay/article/details/7925531

2.9K20

理解linux平台上java程序内存模型

java 程序是运行在jvm 虚拟机里面的,离开jvm虚拟机,那么java程序无法直接在linux平台的运行。 所以java应用程序和os 平台之间是隔着jvm虚拟机的。...我们更多需要从jvm作为java程序管理者的角度来看其内存模型: 此时jvm的内存空间可以分为两大类,分别是 “堆内存” 以及“非堆内存”,其中前者是可以分配给java程序使用的,而后者则是jvm进程自己使用的...jvm进程不仅仅提供了java程序的运行环境,同时还进行 java 程序内存回收工作(也就是GC操作),程序员从而可以不用考虑内存回收,这个是jvm进程(也就是java虚拟机)来完成的. B....而Linux的swap回收是具有滞后性的,所以可能看到swap的空间被大量使用. 同时会经历系统响应缓慢的情况....另外,磁盘数据和缓冲区之间通常是采用“块操作”,这个效率也比流式操作高的, 当IO操作完成后,缓冲区Buffer会被释放,以便再次使用。

92630

Linux 程序设计1:深入浅出 Linux 共享内存

这章需要介绍一些共享内存相关的设置,在 Linux 系统之中和共享内存有关的文件有: /proc/sys/kernel/shmmni:限制整个系统可创建共享内存段个数。...共享内存本质上是对内存空间的使用,同时也是 ipc 的方式之一,所以我们可以使用对应的 Linux 命令来查看对应共享内存的使用: free 可以显示系统的内存占用,共享内存内存占用会归类在 shared...共享内存的使用状况 这里简单介绍一下,共享内存各个列所代表的含义: key:共享内存的key,后文会通过程序来解释 key 的含义。 shmil:共享内存的编号。...status:共享内存的状态,显示“dest”表示共享内存段已经被删除,但是还有别的引用,共享内存是通过引用计数的方式来决定生命周期,一旦程序应用内存地址的计数为0,操作系统会回收对应的内存资源。...所以说,在一个使用到共享内存程序之中,需要程序设定一个文件路径和一个项目的proj_id,来获取系统之中确定一段共享内存的key。

2.3K32

困扰一周的奇葩bug:重复相似代码,导致单片机程序

、压力采集模块的程序,完成后,三通道温度采集程序可正常运行。...最后需要对三通道温度采集模块添加二次校准算法功能,新功能写好后,也可正常采集和通信,但是使用IAP功能时,flash扇区擦除失败,无法跳转到升级程序,且程序飞。...问题分析和解决: 尝试1:修改新增加的二次校准算法功能程序。 将二次校准算法功能屏蔽,升级程序可正常使用,估计是这里的问题,进行修改:变量定义、指针地址、内存管理等一系列操作下来,问题没有解决。...此时我的排查侧重点是数据内存或者地址溢出方面。 尝试2:查看flash配置是否存在问题。 既然是flash扇区擦除失败,会不是是配置存在问题?...尝试4:按照功能模块屏蔽代码,是否是程序中某部分功能与二次校准算法功能程序冲突。

62920

Linux 底层原理」理解进程内存布局,掌握程序动态

简单来讲,进程就是运行中的程序。更进一步,在用户空间中,进程是加载器根据程序头提供的信息将程序加载到内存并运行的实体。...在《攻克 Linux 系统编程》中,我们解释了的 ELF 文件头中指定的程序入口地址,各个节区在程序运行时的内存排布地址等,指的都是在进程虚拟空间中的地址。...在 Linux 系统中,使用如下命令可查看一个运行中的进程的内存排布。 ? 稍微修改上一篇中的示例代码,在 main 函数返回之前,增加一个无限循环,保持程序一直运行。 ?...除此之外,还有两块 vdso 和 vsyscall 内存区。它们是一部分内核数据在用户空间的映射,为了提高应用的性能而创建。在《攻克 Linux 系统编程》中,我们再专门详细讨论。...05 总结 本文深入探究了 Linux 进程在用户空间的一些内部细节,包括逻辑内存排布、进程创建和变身的内部细节、进程状态监控的目的和接口,以及终止进程的正确姿势等。

1.8K30

Linux程序设计】之Linux库函数的使用,文件程序开发,静态与共享函数

这个系列的博客贴的都是我大二的时候学习Linux系统高级编程时的一些实验程序,都挺简单的。贴出来纯粹是聊胜于无。...实验题目:Linux基础程序设计综合实验 实验目的:熟悉并掌握Linux库函数的使用,文件程序开发,静态与共享函数库的制作,Makefile文件编写以及gdb调试等。...一、基于库函数使用的文件程序开发 设计程序,满足如下要求: 1、程序包含5个文件,myfirst.c, mysqrt.c, mysqrt.h, mypow.c mypow.h 2、myfirst.c为主程序...5、使用gcc对程序编译,生成满足题目要求的可执行文件myfirst。注意:编译时,需指定数学函数库。...注意:使用共享库编译和运行源程序时,均需考虑函数库的路径问题。

1.1K20

Linux下多线程程序为什么消耗大量虚拟内存

/AuthServer.vlog & 然后启动测试,内存不再增加,果然valgrind显示没有任何内存泄露。反复试验了很多次,结果都是这样。...14M,输入0,创建子线程,进程内存达到23M,这增加的10M是线程堆栈的大小(查看和设置线程堆栈大小可用ulimit -s),第一次输入1,程序分配1k内存,整个进程增加64M虚拟内存,之后再输入2,...glibc 版本大于2.11的都会有这个问题:在Redhat 的官方文档上: Red Hat Enterprise Linux 6 features version 2.11 of glibc, providing...设置这个值以后最好能对你的程序做一下压力测试,用以看看改变arena的数量是否会对程序的性能有影响。...意外发现 想到tcmalloc小对象才从线程自己的内存池分配,大内存仍然从中央分配区分配,不知道glibc是如何设计的,于是将上面程序中线程每次分配的内存从1k调整为1M,果然不出所料,再分配完64M

2K30

我们用Windows官方跑了Linux GUI应用程序,不愧是“胶水操作系统”

所以在“咕咕咕”一年后,微软终于实现了去年Build开发者大会上立下的flag: 在Windows里运行Linux的IDE开发Linux程序 在Windows里运行只支持Linux的GUI程序,或者在Linux...开发者采用RDP RAIL技术,将远程Linux应用程序集成到本地桌面上;同时,采用VAIL技术进行传输,在主机和客户端之间共享内存。 ?...又或者,让Linux应用程序能在Windows桌面上实现缩放,以支持显示器配置,同时支持单个显示器的DPI(图像输出分辨率)缩放。...先来一个简单的,在WSLg里的Linux一个Wine下的IE。 ?...注意看时间,8分钟以后,这事就收不住了:WSLg下Linux的Chrome里一个JavaScript写的Windows3.1。 ? 另外有消息称,微软在WSL的基础上正在开发安卓子系统。

1.5K40

Linux系统下利用C程序输出某进程的内存占用信息

前言 大家应该都遇到过一种情况,在实际工作中有时需要程序打印出某个进程的内存占用情况以作参考, 下面介绍一种通过Linux下的伪文件系统 /proc 计算某进程内存占用的程序实现方法.下面话不多说了,来一起看看详细的介绍吧...Linux系统的文件类型大致可分为三类: 普通文件, 目录文件和伪文件. 伪文件不是用来存储数据的, 因此这些文件不占用磁盘空间, 只是存在于内存中..../proc/meminfo 存放系统的内存信息, 通过文件中各个变量的名字便可知其代表的信息....示例代码 下面只是贴出一个简单的获取某进程当前时刻所占用的实际内存的c代码实现例子....int i; char name[32];//存放项目名称 int vmrss;//存放内存 //读取VmRSS这一行的数据 for (i=0;i<VMRSS_LINE-1;i++) {

2.3K21

GPU加速03:流和共享内存—让你的CUDA程序如虎添翼的优化技术!

当然,将这些优化技巧应用之后,程序将获得更大的加速比,这对于需要数小时甚至数天的程序来说,收益非常之大。...将程序改为流后,每次只计算一小部分,流水线并发执行,会得到非常大的性能提升。 默认情况下,CUDA使用0号流,又称默认流。不使用流时,所有任务都在默认流中顺序执行,效率较低。...流不仅需要程序员掌握流水线思想,还需要用户对数据和计算进行拆分,并编写更多的代码,但是收益非常明显。对于计算密集型的程序,这种技术非常值得认真研究。...内存优化 我在本系列第一篇文章提到,CPU和GPU组成异构计算架构,如果想从内存上优化程序,我们必须尽量减少主机与设备间的数据拷贝,并将更多计算从主机端转移到设备端。...总结 一般情况下,我们主要从“增大并行度”和“充分利用内存”两个方向对CUDA来进行优化。本文针对这两种方向,分别介绍了流和共享内存技术。

4.2K20

汽车之家三面:Linux操作系统里一个进程最多可以创建多少个线程?

因为不同的操作系统和不同位数的操作系统,虚拟内存可能是不一样。 Windows 系统我不了解,我就说说 Linux 系统。...如果你想自己做个实验,你可以找台 32 位的 Linux 系统运行下面这个程序: [8a06945c79c646fe864a5d9609d0c071?...那么,我们可以把 threads-max 参数设置成 99999: echo 99999 > /proc/sys/kernel/threads-max 设置完 threads-max 参数后,我们重新测试线程数的程序...ulimit -s 1024000 设置完后,测试线程的程序,其结果如下: [25def654f557458088ad1b52f56ada2e?...为什么物理内存只有 2G,进程的虚拟内存却可以使用 25T 呢? 因为虚拟内存并不是全部都映射到物理内存的,程序是有局部性的特性,也就是某一个时间只会执行部分代码,所以只需要映射这部分程序就好。

1.8K10

Linux系统是如何用虚拟内存来欺骗应用程序的?

一、让有意义的事情变的有意思 二、物理内存、虚拟内存 三、Linux 中的换页机制 一、让有意义的事情变的有意思 昨天,看到下面这句话,送给您: 让有意思的事情变的有意义,让有意义的事情变的有意思!...我们都知道,同一个 x86 平台的硬件,既可以安装 Windows 操作系统,也可以安装 Linux 操作系统。 也就是说,在生产硬件的时候,它并不知道: 在自己的硬件之上,将会运行什么样的程序。...每个应用程序只能看到自己的虚拟内存空间,这是一块连续的空间,从而保证了不同应用程序之间的隔离,达到安全目的。 三、Linux 中的换页机制 ?...相比内存来说,硬盘的价格就便宜多了! 因此,Linux 操作系统就充分利用硬盘来糊弄应用程序,让应用程序觉得有永远也用不完的内存资源。...怎么样,通过这样的类比方式,是不是对 Linux 系统中的虚拟内存有更加感性的认识?

76720

记录服务器被入侵病毒:ssh密码被更改登录失败、恶意程序满了cpu、jar包启动失败自动kill、一直弹出You have new mail in varspoolmailroot

第一反应是以为服务器资源不足导致的 查看运行内存、磁盘空间都是足够的 被人入侵了,搞了个定时任务,把CPU资源全占用了。...系统为了保持稳定,所以自动kill进程 top #查看占用CPU等情况 直接去进行kill这个sshd的程序会重新生成新的 kill -9 2172 #将这个名为sshd、pid为2172的程序...并通过yum重新安装、启动 然后修改了ssh的端口号 将默认的22端口号做修改 查看计划性任务,因为并不是只通过crontab -e这一种方法进行修改 检查cron.目录下是否有新增的程序...,这个程序会被我kill掉,但是当我重新连接服务器的时候,也就是linux服务器用户登录的时候这个程序还是会生成,也就是说用户登录的时候会加载环境变量,这个攻击者把服务器的环境变量做了修改,导致我一登陆就会产生这个程序...kill了,并且不会重新生成,以及重新登录服务器的时候也不会产生这个程序 解决前: 解决后:

94210

优化C#服务器的思路和工具的使用

例如: 某个功能机器人会把所有的装备都删一遍, 然后再加一遍 某个功能机器人可能会不停的添加道具(或者装备), 最后背包满了, 就要往邮件里面塞 类似的功能有很多等等 测试程序本身, 需要比较合理的设计...后来通过VS内存分析看到, MongoDB驱动会产生非常的垃圾对象, 单个对象直接写和多个对象批量写最终所产生的的垃圾对象是一样....服务器在WindowsServer下长时间, 都没有内存泄漏, 但是在Linux会有内存泄漏, 最后查找原因是非托管部分泄漏了. 然后换成jemalloc之后解决, 这一点在最开始并没有想到....内存快照 dotMemory这个工具在获取内存快照这方面做得非常好, Windows和Linux下均可以使用, 其中Linux是命令行程序获取数据, 然后Windows客户端可以打开结果分析....之前在机器人战斗的时候, 发现内存占用越来越大, 然后通过dotMemory获取快照, 发现LuaEnv占用内存非常, 然后找到某一个LuaEnv, 详细的查看其内存占用.

18430

记录服务器被入侵病毒:ssh密码被更改登录失败、恶意程序满了cpu、jar包启动失败自动kill、一直弹出You have new mail in varspoolmailroot

第一反应是以为服务器资源不足导致的 查看运行内存、磁盘空间都是足够的 被人入侵了,搞了个定时任务,把CPU资源全占用了。...系统为了保持稳定,所以自动kill进程 top #查看占用CPU等情况 直接去进行kill这个sshd的程序会重新生成新的 kill -9 2172 #将这个名为sshd、pid为2172的程序...并通过yum重新安装、启动 然后修改了ssh的端口号 将默认的22端口号做修改 查看计划性任务,因为并不是只通过crontab -e这一种方法进行修改 检查cron.目录下是否有新增的程序...,这个程序会被我kill掉,但是当我重新连接服务器的时候,也就是linux服务器用户登录的时候这个程序还是会生成,也就是说用户登录的时候会加载环境变量,这个攻击者把服务器的环境变量做了修改,导致我一登陆就会产生这个程序...kill了,并且不会重新生成,以及重新登录服务器的时候也不会产生这个程序 解决前: 解决后: 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/101819

99010
领券