有什么工具可以知道我的Java应用程序已使用了多少个本机内存?我的应用程序内存不足:当前设置是:-Xmx900m
计算机,Windows 2003 Server 32位,RAM 4GB。
还在Windows上将boot.ini更改为/ 3GB,会有什么不同吗?如果设置为Xmx900m,则可以为此进程分配多少最大本机内存?是1100m吗?
(就我而言,我使用的是Java 8)
添加到命令行: -XX:NativeMemoryTracking=summary
然后启动 jcmd <PID> VM.native_memory
您应该得到这样的内容:
Total: reserved=3863657KB, committed=1679977KB
- Java Heap (reserved=1843200KB, committed=824320KB)
(mmap: reserved=1843200KB, committed=824320KB)
- Class (reserved=1311974KB, committed=298726KB)
(classes #52579)
(malloc=5350KB #76340)
(mmap: reserved=1306624KB, committed=293376KB)
- Thread (reserved=263278KB, committed=263278KB)
(thread #256)
(stack: reserved=262140KB, committed=262140KB)
(malloc=839KB #1280)
(arena=299KB #510)
- Code (reserved=278521KB, committed=164773KB)
(malloc=28921KB #37983)
(mmap: reserved=249600KB, committed=135852KB)
- GC (reserved=114897KB, committed=77093KB)
(malloc=13729KB #67925)
(mmap: reserved=101168KB, committed=63364KB)
- Compiler (reserved=461KB, committed=461KB)
(malloc=330KB #1138)
(arena=131KB #3)
- Internal (reserved=13877KB, committed=13877KB)
(malloc=13845KB #72978)
(mmap: reserved=32KB, committed=32KB)
- Symbol (reserved=28871KB, committed=28871KB)
(malloc=24740KB #275452)
(arena=4131KB #1)
- Native Memory Tracking (reserved=8393KB, committed=8393KB)
(malloc=45KB #523)
(tracking overhead=8348KB)
- Arena Chunk (reserved=184KB, committed=184KB)
(malloc=184KB)
有关更多信息,请参见https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr007.html
问题内容: 是否有一个准则来估计a消耗的内存量? 寻找类似于这些准则的估计内存使用情况的东西。 问题答案: 如果您查看源代码中的字段,则有: 的评论说 用于存储规范的字符串表示形式(如果已计算)。 假设您不调用,它将保留为零字节。因此是(8 + 4 + 4)= 16个字节+ 。 本身是4 + 4 + 4 + 4 + 4 = 20字节+ 。 20 + 16总共提供了36个字节加上大小,该大小始终是表
问题内容: 扩展基类时,Java中的内存使用情况如何。 子类是否包含基类的实例(具有其自身的开销和全部开销),还是仅具有其自身的16字节的开销? 那么,更具体地说,Bar实例的内存使用量是多少? 是吗 要不就 问题答案: 没有双重开销。 Java将采用该类,超类,计算所有字段所需的空间,并为一个实例分配所需的空间。 仅从内存的角度来看,根本不存在超类的概念,有Foo的实例仅需要一个int的内存,而
问题内容: 我想用Java监视以下系统信息: 当前的CPU使用率*(百分比) 可用内存 (可用/总计) 可用磁盘空间(可用/总) 请注意,我的意思是整个系统可用的整体内存,而不仅仅是JVM。 我正在寻找一种不依赖于我自己的调用外部程序或使用JNI的代码的跨平台解决方案(Linux,Mac和Windows)。尽管这些是可行的选择,但如果有人已经有了更好的解决方案,我宁愿自己不要维护特定于操作系统的代
我有一个很小的java控制台应用程序,我想在内存使用方面进行优化。它是在Xmx设置为仅64MB的情况下运行的。根据不同的监视工具(htop、ps、pmap、Dynatrace)显示进程的总体内存使用量超过250MB。我主要在Ubuntu18上运行它(也在其他操作系统上测试)。 我使用了-xx:nativeMemoryTracking,java param和jcmd的本地内存跟踪,以找出为什么在堆之
Java1.8。0_131 Windows Server 2012 R2。 “-Xmx=9000m”。但是Windows任务管理器显示java进程使用的内存超过14GB。 NMT显示“内部”消耗超过4.5 GB的内存。为什么会出现这种情况?我知道为本机内存定义空间不是Java功能。但是有什么方法可以限制“内部”内存吗? 总计:保留=15782485KB,提交=14653869KB-Java堆(保留
问题内容: 我目前正在测试将密钥插入数据库Redis(在本地)中。我有超过500万个密钥,而且我只有4GB的RAM,所以一时我达到了RAM的容量并交换了数据(并且我的PC掉了)。 我的问题是:如何在具有Redis数据库的计算机上监视内存使用情况,并以此方式发出警报,不再在Redis数据库中插入某些密钥? 谢谢。 问题答案: 关于内存使用情况,建议您查看redis.io 常见问题解答以及有关将red