我其实很低调 2011-01-04 15:33
浏览 317
已采纳

JAVA内存问题。

JDK版本:1.6.0_19
服务器:tomcat
测试项目:一个简单的web程序。里面有个systemInfo.jsp页面。,调用了Runtime的totalMemory(),maxMemory(),freeMemory() 以及当前使用的内存totalMemory()-freeMemory(),CPU核数availableProcessors()
测试目的:查看JSP打出来的内存大小和任务管理器里面的JAVA进程的大小是否一样。

详情:
1:以前一直没注意,这几天突然发现windows的任务管理器 里面的内存和程序真正运行的时候是不一样的。当时就迷惑了。JAVA启动后就是一个JAVA进程,我们都知道,里面包含了JAVA虚拟机还有一些其他的东西。所以任务管理器里面的内存要比我们用程序查看的时候大,因为程序里面只显示的是JAVA虚拟机的内存。这是我的理解。不知对否。
2:为什么我程序里面调用runtime.maxMemory()打印出来的最大内存数是519m(519.....K),而我设置的-Xmx是512M,好像有3M不见了。我认为可能是虚拟机不会准确的去抓去512M,只能在512M左右,不知这样理解对否。
3:让我郁闷的就是:如我前面所说,我的内存最大设置了512M,初始化内存是64M。所以totalMemory()这里的内存打出来差不多也是64M,但是任务管理器里面的JAVA内存大小是89M(程序运行5分钟),89M比我们JAVA虚拟机的内存多了25M的样子,这25M可能是TOMCAT启动后,其他东西的使用。但是和我开始想的不一样。我认为JAVA这个进程应该是512M才对,不然JAVA怎么保证他的最大内存可使用呢?如果其他程序把内存耗尽,那么这个时候JAVA虚拟机要向内存再申请的时候,就不是申请不了了吗?
4:有谁告诉一下如何用JAVA查看某个进程(不一定是JAVA的进程,比如查看QQ的进程)的内存使用情况。
5: 一个tomcat里面部署多个程序,应该就相当于一个虚拟机里面有多个程序运行吧。。这几个程序共享一个虚拟机。那么有什么办法获取一个程序的当前占用的内存吗?

  • 写回答

5条回答 默认 最新

  • lang_shao 2011-01-04 15:54
    关注

    [quote]5: 一个tomcat里面部署多个程序,应该就相当于一个虚拟机里面有多个程序运行吧。。这几个程序共享一个虚拟机。那么有什么办法获取一个程序的当前占用的内存吗? [/quote]

    一个tomcat运行的时候是一个进程,不同的应用程序是由不同的线程来运行,tomcat内部把它们隔开了,但实际还是在同一个jvm,我不知有什么方法可以获得各个程序占用的内存,如果有估计也需要tomcat来提供。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误
  • ¥30 3天&7天&&15天&销量如何统计同一行
  • ¥30 帮我写一段可以读取LD2450数据并计算距离的Arduino代码
  • ¥15 飞机曲面部件如机翼,壁板等具体的孔位模型
  • ¥15 vs2019中数据导出问题
  • ¥20 云服务Linux系统TCP-MSS值修改?
  • ¥20 关于#单片机#的问题:项目:使用模拟iic与ov2640通讯环境:F407问题:读取的ID号总是0xff,自己调了调发现在读从机数据时,SDA线上并未有信号变化(语言-c语言)
  • ¥20 怎么在stm32门禁成品上增加查询记录功能