运行个JAVA 用sleep去hold住
package org.hjb.test; 

public class TestOnly {
public static void main(String[] args) { System.out.println("sleep ..");
try {
Thread.sleep(10000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
 
java -Xmx10m -Xms10m org/hjb/test/TestOnly
 
 
 
 
从Jvm进程的角度观察
 
查看JAVA进程的总体内存大小
 
原始参数         java -Xmx10m -Xms10m org/hjb/test/TestOnly   后观察结果:
 
 PID    USER  PR   NI      VIRT         RES       SHR    S    %CPU  %MEM     TIME+  COMMAND
root S 0.0 1.0 :00.27 java
 
变换参数          java -Xmx1024m -Xms1024m org/hjb/test/TestOnly   后观察
 
27278   root   20  0     2258424      31656    13776 S     0.0       0.8       0:00.16     java

  

 
继续变换参数   java -Xmx2024m -Xms2024m org/hjb/test/TestOnly   后观察
 
  root                     S    0.0       0.9       :00.10     java   

上面观察可以得出

提高JAVA的堆内存分配,影响的只是VIRT内存的使用情况。 详附1
 
 
实验二:
观察JAVA的实际使用内存,  JAVA进程的实际使用内存应该包括, JVM的内存+JAVA程序的内存 详附2
 
运行 java -Xmx2048m -Xms2048m org/hjb/test/TestOnly  观察
 
 PID    USER   PR    NI     VIRT          RES        SHR     S    %CPU  %MEM      TIME+  COMMAND
root S 0.0 0.9 :00.21 java
 
修改程序
package org.hjb.test;
public class TestOnly {
public static void main(String[] args) { System.out.println("sleep ..");
try {
byte[] buf = new byte[1024 * 1024 * 1024]; //1g 增大其内存
Thread.sleep(10000000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
 
运行 java -Xmx2048m -Xms2048m org/hjb/test/TestOnly  观察
 
 PID    USER  PR        NI        VIRT          RES          SHR   S    %CPU  %MEM      TIME+        COMMAND
root .034g S 0.0 26.8 :00.89 java
 
 
上面观察可以得出
JAVA 程序中实际使用内存才会占用到内存,此时查看JAVA的内存
 
 
 
 
通过实验, 设想只有当前用到了内存才会进RES?
 
后面是通过线上问题发现不是如此, 因为如果没有释放的内存,还是在RES的, 比如JDK的没触发,那么内存就一直占用 了RES.  所以内存大小还是可以直接影响到JAVA进程的大小
 
JAVA进程内存 = JVM进程内存+heap内存+ 永久代内存+ 本地方法栈内存+线程栈内存 +堆外内存 +socket 缓冲区内存
 
linux内存和JAVA堆中的关系
 
RES = JAVA正在存活的内存对象大小 + 未回收的对象大小  + 其它
 
VIART= JAVA中申请的内存大小,即 -Xmx  -Xms + 其它
 
其它 = 永久代内存+ 本地方法栈内存+线程栈内存 +堆外内存 +socket 缓冲区内存 +JVM进程内存
 
 
附1:
 
VIRT:virtual memory usage 
1、进程“需要的”虚拟内存大小,包括进程使用的库、代码、数据等 
2、假如进程申请100m的内存,但实际只使用了10m,那么它会增长100m,而不是实际的使用量 
RES:resident memory usage 常驻内存 
1、进程当前使用的内存大小,但不包括swap out 
2、包含其他进程的共享 
3、如果申请100m的内存,实际使用10m,它只增长10m,与VIRT相反 
4、关于库占用内存的情况,它只统计加载的库文件所占内存大小 
SHR:shared memory 
1、除了自身进程的共享内存,也包括其他进程的共享内存 
2、虽然进程只使用了几个共享库的函数,但它包含了整个共享库的大小 
3、计算某个进程所占的物理内存大小公式:RES – SHR 
4、swap out后,它将会降下来DATA1、数据占用的内存。如果top没有显示,按f键可以显示出来。 
2、真正的该程序要求的数据空间,是真正在运行中要使用的。
 
 
附2:
 
 
 
 
 
 
 
 
 
 

死磕内存篇 --- JAVA进程和linux内存间的大小关系的更多相关文章

  1. Java线程与Linux内核线程的映射关系(转)

    Java线程与Linux内核线程的映射关系 Java线程与Linux内核线程的映射关系Linux从内核2.6开始使用NPTL (Native POSIX Thread Library)支持,但这时线程 ...

  2. 【死磕NIO】— 跨进程文件锁:FileLock

    大家好,我是大明哥,一个专注于[死磕 Java]系列创作的程序员. [死磕 Java ]系列为作者「chenssy」 倾情打造的 Java 系列文章,深入分析 Java 相关技术核心原理及源码 死磕 ...

  3. 【Android手机测试】linux内存管理 -- 一个进程占多少内存?四种计算方法:VSS/RSS/PSS/USS

    在Linux里面,一个进程占用的内存有不同种说法,可以是VSS/RSS/PSS/USS四种形式,这四种形式首字母分别是Virtual/Resident/Proportional/Unique的意思. ...

  4. java进程占用系统内存高,排查解决

    转自:http://blog.51cto.com/chengxiaobai/2052530?cid=695076 故障:最近收到生产服务器的报警短信以及邮件,报警内容为:内存使用率高于70%. 使用t ...

  5. 高端内存映射之vmalloc分配内存中不连续的页--Linux内存管理(十九)

    1 内存中不连续的页的分配 根据上文的讲述, 我们知道物理上连续的映射对内核是最好的, 但并不总能成功地使用. 在分配一大块内存时, 可能竭尽全力也无法找到连续的内存块. 在用户空间中这不是问题,因为 ...

  6. linux内存优化之手工释放linux内存

    先介绍下free命令 Linux free命令用于显示内存状态. free指令会显示内存的使用情况,包括实体内存,虚拟的交换文件内存,共享内存区段,以及系统核心使用的缓冲区等. 语法: free [- ...

  7. Linux软件间的依赖关系(转)

    Linux中的软件大部分是零碎的,其粒度比windows的小很多,软件之间的依赖关系很强烈,下面是自己的一些理解: 一.Linux中的软件依赖Linux中的软件依赖关系成一颗拓扑树结构,比如A直接或间 ...

  8. 【死磕JVM】用Arthas排查JVM内存 真爽!我从小用到大

    Arthas是啥 当我们系统遇到JVM或者内存溢出等问题的时候,如何对我们的程序进行有效的监控和排查,就发现了几个比较常用的工具,比如JDK自带的 jconsole.jvisualvm还有一个最好用的 ...

  9. Java进程堆外内存(off heap)大小

    一.使用ByteBuffer.allocateDirect分配的off heap内存大小 本机进程 在Jvisualvm中安装 Mbeans插件.然后查看java.nio/BufferPool/dir ...

随机推荐

  1. 快速构建H5单页面切换骨架

    在Web App和Hybrid App横行的时代,为了拥有更好的用户体验,单页面应用顺势而生,单页面应用简称`SPA`,即Single Page Application,就是只有一个HTML页面的应用 ...

  2. IE6/7下空div占用空间的问题

    最近注意力没在前端上面,工作碰到这样一个问题,下意识的写了句 font-size:0;line-height:0;哪知道引发了更大的bug.后来插入数据进去的时候都不显示了..再后来百度一番找到,原来 ...

  3. 前端学HTTP之Web主机托管

    前面的话 对内容资源的存储.协调以及管理的职责统称为Web主机托管.主机托管是Web服务器的主要功能之一.保存并提供内容,记录对内容的访问以及管理内容都离不开服务器.如果不想自行管理服务器所需的软硬件 ...

  4. TortoiseGit 文件比对工具使用 Beyond Compare 和 DiffMerge

    TortoiseGit 内置的文件比对工具是 TortoiseMerge,用于文件比对和解决冲突合并,TortoiseGit 还支持外部的比对工具使用,比如 Beyond Compare 和 Diff ...

  5. ,net core mvc 文件上传

    工作用到文件上传的功能,在这个分享下 ~~ Controller: public class PictureController : Controller { private IHostingEnvi ...

  6. SHA-1算法

    SHA-1.h #ifndef _SHA1_H #define _SHA1_H #include<iostream> using namespace std; //4个函数 #define ...

  7. 手机游戏渠道SDK接入工具项目分享(二)万事开头难

    一般接到任务后程序员们通常都开始着手进行技术调研了,但我这活是项目负责人.还有一大堆事情要先期准备,没人能帮忙. 一.人力配置 考虑的之前已经有一波人搞了大半年,但没有起色,先期也没有太大人力需求,所 ...

  8. SQL字符串函数

    LEN() :计算字符串长度(字符的个数.)datalength();//计算字符串所占用的字节数,不属于字符串函数.测试varchar变量与nvarchar变量存储字符串a的区别.见备注1.LOWE ...

  9. myrocks复制中断问题排查

    背景 mysql可以支持多种不同的存储引擎,innodb由于其高效的读写性能,并且支持事务特性,使得它成为mysql存储引擎的代名词,使用非常广泛.随着SSD逐渐普及,硬件存储成本越来越高,面向写优化 ...

  10. 【repost】JS错误类型的学习

    SyntaxError是解析代码时发生的语法错误 // 变量名错误  var 1a;  // 缺少括号  console.log 'hello'); (2)ReferenceError Referen ...