运行个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
27182 root 20 0 1182152 40452 13596 S 0.0 1.0 :00.27 java
 
变换参数          java -Xmx1024m -Xms1024m org/hjb/test/TestOnly   后观察
 
1
27278   root   20  0     2258424      31656    13776 S     0.0       0.8       0:00.16     java   

  

 
继续变换参数   java -Xmx2024m -Xms2024m org/hjb/test/TestOnly   后观察
 
 27297 root  20   0     3319832     34876     13668 S    0.0       0.9       0: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
27406 root 20 0 3345308 35000 13716 S 0.0 0.9 0: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
27445 root 20 0 3345308 1.034g 13688 S 0.0 26.8 0: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学习-内存划分及内存的调用关系

    一.JAVA内存划分 JAVA的内存可以划分为五个部分:堆.栈.方法区.本地方法区和寄存器. 堆(Heap):凡是new出来的东西都在堆中 如: integer = new Integer(2) // ...

  2. 浅谈Java内存模型

    Java内存模型虽说是一个老生常谈的问题 ,也是大厂面试中绕不过的,甚至初级面试也会问到.但是真正要理解起来,还是相当困难,主要这个东西看不见,摸不着.网上已经有大量的博客,但是人家的终究是人家的,自 ...

  3. Java 内存模型,或许应该这么理解

    大家好,我是树哥. 在前面一段时间,我连续写了几篇关于并发编程的文章: 从 CPU 讲起,深入理解 Java 内存模型! - 陈树义的博客 深入理解 happens-before 原则 - 陈树义的博 ...

  4. 死磕内存篇 --- JAVA进程和linux内存间的大小关系

    运行个JAVA 用sleep去hold住 package org.hjb.test; public class TestOnly { public static void main(String[] ...

  5. java语言:Linux与JVM的内存关系分

    在一些物理内存为8g的服务器上,主要运行一个Java服务,系统内存分配如下:Java服务的JVM堆大小设置为6g,一个监控进程占用大约 600m,Linux自身使用大约800m.从表面上,物理内存应该 ...

  6. java线程基础巩固---多线程与JVM内存结构的关系及Thread构造函数StackSize的理解

    继续学习一下Thread的构造函数,在上次[http://www.cnblogs.com/webor2006/p/7760422.html]已经对如下构造都已经学习过了: 多线程与JVM内存结构的关系 ...

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

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

  8. Java虚拟机2:Java内存区域及对象

    几个计算机的概念 为以后写文章考虑,也为巩固自己的知识和一些基本概念,这里要理清楚几个计算机中的概念. 1.计算机存储单位 从小到大依次为位Bit.字节Byte.千字节KB.兆M.千兆GB.TB,相邻 ...

  9. Java内存溢出的详细解决方案

    本文介绍了Java内存溢出的详细解决方案.本文总结内存溢出主要有两种情况,而JVM经常调用垃圾回收器解决内存堆不足的问题,但是有时仍会有内存不足的错误.作者分析了JVM内存区域组成及JVM设置虚拟内存 ...

随机推荐

  1. JavaScript中this 详解

    涵义 this 关键字是一个非常重要的语法点.毫不夸张地说,不理解它的含义,大部分开发任务都无法完成. 首先, this 总是返回一个对象,简单说,就是返回属性或方法“当前”所在的对象. this.p ...

  2. Multidex(二)之Dex预加载优化

    Multidex(二)之Dex预加载优化 https://www.jianshu.com/p/2891599511ff

  3. php通过CURL模拟post提交请求

    <?php header("Content-type:text/html;charset=utf-8"); class Test{ public function reque ...

  4. BZOJ3052/UOJ#58 [wc2013]糖果公园 莫队 带修莫队 树上莫队

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ3052.html 题目传送门 - BZOJ3052 题目传送门 - UOJ#58 题意 给定一棵树,有 ...

  5. IDEA控制台问题:At least one JAR was scanned for TLDs yet contained no TLD

    参考连接: https://www.cnblogs.com/interdrp/p/7763040.html 1.调整Tomcat对应类的log级别 2.观察Tomcat日志打印信息 3.调整${tom ...

  6. 线程有gil锁

    gil锁作用: 遇到阻塞( 比如 recv() , accept() )就切换

  7. python3解析库lxml

    阅读目录 1.python库lxml的安装 2.XPath常用规则 (1)读取文本解析节点 (2)读取HTML文件进行解析 (3)获取所有节点 (4)获取子节点 (5)获取父节点 (6)属性匹配 (7 ...

  8. SORT--不要仅限于题目中

    输入n,m 表示输入n个数输出前m个最大的数 Input The input file contains many test cases. Each case has 2 lines. The fir ...

  9. Java 之 JavaScript (一)

    1.JavaScript a.定义:JavaScript 是脚本语言,是一种轻量级的编程语言 b.实现:①直接通过标签里面的onXX属性驱动js的执行 <input type="but ...

  10. Stall Reservations POJ - 3190(贪心)

    Oh those picky N (1 <= N <= 50,000) cows! They are so picky that each one will only be milked ...