当前位置: 首页 > 面试题库 >

Java进程内存检查测试

施永宁
2023-03-14
问题内容

我想看看-Xmx-Xms我的程序参数的影响,并检查多少内存我的过程中消耗。

我编写了一个简单的程序,但无法推断出结果。请帮助。

public static void main( String[] args ) {
        char[] array = new char[69926904];
}

我跑了参数 -Xms5M -Xmx200M
。理想情况下,由于一个字符占用2个字节,因此在超过内存限制之前,它应容纳100M个字符。即使我们说,几乎没有空间用于 指针length
,我也不知道,为什么它在 69926904 length 之后会 引发 错误 。

谢谢。


问题答案:

仔细阅读有关Generational Heap的JVM Garbage Collection Tuning
Guide
,它有望回答您的问题。

使用-XX:+PrintGCDetailsoption 运行Java ,一切应该变得清晰:

Heap
 PSYoungGen      total 3584K, used 294K [0x00000000fbd60000, 0x00000000fc160000, 0x0000000100000000)
  eden space 3072K, 9% used [0x00000000fbd60000,0x00000000fbda9860,0x00000000fc060000)
  from space 512K, 0% used [0x00000000fc0e0000,0x00000000fc0e0000,0x00000000fc160000)
  to   space 512K, 0% used [0x00000000fc060000,0x00000000fc060000,0x00000000fc0e0000)
 PSOldGen        total 136576K, used 136576K [0x00000000f3800000, 0x00000000fbd60000, 0x00000000fbd60000)
  object space 136576K, 100% used [0x00000000f3800000,0x00000000fbd60000,0x00000000fbd60000)
 PSPermGen       total 21248K, used 2595K [0x00000000ee600000, 0x00000000efac0000, 0x00000000f3800000)
  object space 21248K, 12% used [0x00000000ee600000,0x00000000ee888db0,0x00000000efac0000)

您的200M Java堆由2代组成:1/3(66.7M)是YoungGen,而2/3(133.3M)是OldGen。

-XX:NewRatio 选项允许更改比例,但是默认值2表示YoungGen将保留堆的1 /(2 + 1)部分。

Java对象不能跨越几代,因此对象的最大大小不能大于最大代。在您的情况下,最大的一代是OldGen:136576K =
139853824,正好是char[69926904](16字节头+ 2 * 69926904字节数据)的大小。



 类似资料:
  • 问题内容: 我想看看和我的程序参数的影响,并检查多少内存我的过程中消耗。 我编写了一个简单的程序,但无法推断出结果。请帮助。 我跑了参数 。理想情况下,由于一个字符占用2个字节,因此在超过内存限制之前,它应容纳100M个字符。即使我们说,几乎没有空间用于 指针 和 length ,我也不知道,为什么它在 69926904 length 之后会 引发 错误 。 谢谢。 问题答案: 仔细阅读有关Gen

  • used_memory:859192数据结构的空间 used_memory_rss:7634944实占空间 mem_fragmentation_ratio:8.89前2者的比例,1.N为佳,如果此值过大,说明redis的内存的碎片化严重,可以导出再导入一次.

  • 问题内容: 如果我具有流程的PID,则os.FindProcess是否足以测试该流程的存在?我的意思是,如果返回,我是否可以认为它已终止(或被杀死)? 编辑: 我刚刚写了一个包装函数(旧式bash流程测试)。这可以正常工作,但是如果有其他解决方案(使用go库完成),我仍然很高兴。 问题答案: 这是查看进程是否处于活动状态的传统的Unix方式-向其发送0信号(就像您对bash示例所做的一样)。 来自

  • script/下的memstat.sh或者ps_mem.py都可以查看系统的内存情况,两个工具都需要root权限。

  • 我是java内存问题的新手,在调试java进程的内存使用时遇到了问题,需要你的帮助。根据“the java进程占用8G常驻内存和9.4G虚拟内存。这对于这个进程来说太多了,我想检查一下为什么它会吃掉内存。所以我使用jmap进行了一次堆转储(没有使用‘live’选项,因为它可能会触发GC ),发现只有100MB的活动对象,还有1.5G的不可达对象。那么剩下的6G内存去哪了?我应该检查哪些其他类型的非

  • #!/bin/bash # Get current swap usage for all running processes # Erik Ljungstrom 27/05/2011 # Modified by Mikko Rantalainen 2012-08-09 # Pipe the output to "sort -nk3" to get sorted output # Modified