我其实很低调 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 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 spring后端vue前端
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题