运行个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. Jquery,YUI这个著名js库名称作用的理解

    看廖雪峰大神的教程,其中讲到变量作用域问题.在命名空间中,写到:因为全局变量绑到了window上,不同的js文件访问相同全局变量或者定义了相同名字的顶层函数,都会造成命名冲突,并且很难被发现. 减少冲 ...

  2. Springmvc+uploadify实现文件带进度条批量上传

    网上看了很多关于文件上传的帖子,众口不一,感觉有点乱,最近正好公司的项目里用到JQuery的uploadify控件做文件上传,所以整理下头绪,搞篇文档出来,供亲们分享. Uploadify控件的主要优 ...

  3. iOS启动图片适配问题

    Portrait 是竖屏 top home button Landscape是横屏 left home button retina 要求640x1136pixels, 在右边的Image属性 Expe ...

  4. Delphi - XP扫雷外挂制作

    技术交流,DH讲解. 本来之前就在写这个文章,还写了War3挂的教程,后来因为一些事就没有弄了.现在过年在家又没有事就继续把这个写完吧.哈哈.不要以为写个挂很容易,要想写个挂肯定要了解游戏呀.我们现在 ...

  5. javascript+HTMl5游戏下载,开发一个都能月薪上万!舅服你

    HTML5时代已经到来许久了,你是否已经掌握了那么一点呢?今天小编给大家讲讲h5的折叠多设备.跨平台特性, 即用HTML5制作游戏.相比flash,HTML5更加灵活方便,随着浏览器技术的不断升级,H ...

  6. [JLOI2012] 树

    Description 在这个问题中,给定一个值S和一棵树.在树的每个节点有一个正整数,问有多少条路径的节点总和达到S.路径中节点的深度必须是升序的.假设节点1是根节点,根的深度是0,它的儿子节点的深 ...

  7. as3中的embed

    actionscript3允许把外部swf直接用Embed标记嵌入到主类中(当然用UrlLoader动态加载也行) 原 作者:菩提树下的杨过出处:http://yjmyzz.cnblogs.com 关 ...

  8. 理解WebSocket心跳及重连机制(五)

    理解WebSocket心跳及重连机制 在使用websocket的过程中,有时候会遇到网络断开的情况,但是在网络断开的时候服务器端并没有触发onclose的事件.这样会有:服务器会继续向客户端发送多余的 ...

  9. 1568: [JSOI2008]Blue Mary开公司

    1568: [JSOI2008]Blue Mary开公司 题目描述 传送门 题目分析 简单分析可以发现就是不停给出了\(n\)条直线,要求每次给出一条直线后求出所有直线在横坐标为\(x\)时\(y\) ...

  10. Warning: File upload error - unable to create a temporary file in Unknown on line 0

    upload_tmp_dir 临时文件夹问题 上传文件提示 Warning: File upload error - unable to create a temporary file in Unkn ...