我的系统无法为Java进程提供超过1.5 Gb的内存。因此,我需要一种精确的方法来指定Java进程设置,包括Java内部的所有内存类型以及可能的fork。
一个特定的Java流程和系统来说明我的问题:
我当前的环境是Ubuntu Linux 9.10下的Java 1.6.0_18。
我使用以下JVM选项启动大型Java服务器进程:“ -Xms512m -Xmx1024m -XX:PermSize = 256m
-XX:MaxPermSize = 512m”
现在,“ top”命令报告该进程使用了1.6gb内存…
问题:
1-如何计算Java进程使用的最大空间?如果可能,请提供确切的公式。(Smth.like:max.heap + max.perm + stack + jvm
space =最大空间)
2-在我的情况下,在Linux下臭名昭著的fork行为是什么?分叉的JVM是否会占用额外的1.6 gb(总计3.2 Gb的已用内存)?
3-必须使用哪些选项绝对确保在任何时候使用的容量都不超过1.5gb?
谢谢
@rancidfishbreath:“ ulimit”将确保Java占用的内存不会超过指定的数量。我的目的是确保Java永远不会尝试这样做。
顶部
报告1.6GB,因为PermSize在堆大小最大堆大小的上面。在您的情况下,将MaxPermSize设置为512m,将Xmx设置为1024m。总计1536m。与其他语言一样,除非您确切知道启动了多少线程,使用了多少文件句柄等,否则无法计算出绝对精确的数字。每个线程的堆栈大小取决于OS和JDK版本,在您的情况下,取决于其版本1024k(如果是64位计算机)。因此,如果您有10个线程,则将额外使用10240k,因为堆栈不是从堆(Xmx)中分配的。设置较低的堆栈和MaxPermSize时,大多数表现良好的应用程序都能完美运行。尝试将ThreadStackSize设置为128k,如果遇到StackOverflowError(即,如果进行了很多深度递归),则可以逐步增加它,直到问题消失。
因此,我的回答实质上是您无法将其控制在MB范围内,Java进程将使用多少内存,但是通过设置-Xmx1024m -XX:MaxPermSize =
384m和-XX:ThreadStackSize = 128k
-XX:+可以使您接近UseCompressedOops。即使您有很多线程,在达到1.5GB之前,您仍有 足够
的空间。UseCompressedOops告诉VM即使在64位JVM上运行时也要使用狭窄的指针,从而节省了一些内存。
对于我的项目,最好在组件道具中传递null值,以指示未指定的值(如果愿意,则为“已知未知”)。以这种方式使用null是我们团队的惯例。 通过组件prope类型定义,我希望为prop传递一个值,但允许它为null(而不是未定义),而不会触发警告的React prop类型验证。 所以用输入输出的方式重申一下: 属性值=字符串/数字/对象/等-- 这种行为如何才能完成? 一个想法是编写一些替代。is必需
问题内容: Python程序是否有办法确定当前正在使用多少内存?我已经看到了有关单个对象的内存使用情况的讨论,但是我需要的是该过程的总内存使用情况,以便可以确定何时需要开始丢弃缓存的数据。 问题答案: 这是适用于各种操作系统(包括Linux,Windows 7等)的有用解决方案: 在我当前使用psutil 5.6.3安装的python 2.7中,最后一行应为 相反(API发生了变化)。 注意:如果
问题内容: 如果我有: 和 通常 一个数组 如何同时考虑引用变量来计算实际内存使用量? 问题答案: 如果您想要一个准确的答案,那就不能了。至少不是以任何简单的方式。该主题说明更多。 Bragaadeesh和Bakkal的答案的麻烦在于它们忽略了开销。每个数组还存储诸如它具有的维数,它有多长时间以及垃圾收集器使用的一些东西之类的东西。 对于简单的估算,应该使用其他答案中的计算并加上100-200字节
问题内容: 在一次采访中,我被要求计算内存使用量,如果其中有200万个项目,则估计将消耗多少内存。 例如: 映射是这样的。 我如何估计Java中此HashMap对象的内存使用情况? 问题答案: 简短的答案 为了找出对象的大小,我将使用探查器。例如,在YourKit中,您可以搜索对象,然后获取它以计算其深度大小。这将使您很清楚地知道如果对象是独立的,则使用多少内存,并且该对象的大小是保守的。 怪癖
我有一张excel表格,里面有一些时间值。这些值是格式化为字符串的持续时间。当我尝试对这些值求和时,结果是0,因为Excel不能对字符串求和。当我点击公式栏上的回车键时,它确实变成了一个时间,所以我计算出的总和是有效的。如何将单元格的值从字符串更改为时间值?我已经将日期格式设置为和 我从转换成秒的时间量开始,我将其转换成持续时间 然后我使用 然后我将单元格值设置为刚刚生成的字符串 然后我将设置为一
问题内容: 如何使用T-SQL更改表中的一个属性以允许为null(不为null-> null)?也许更改表? 问题答案: