- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
Possible Duplicate:
Limit jvm process memory on ubuntu
在我的应用程序中,我将文档上传到服务器,服务器对其进行一些分析。
今天,我使用 jconsole.exe 和堆转储分析了我的应用程序,试图找出是否存在内存问题/内存泄漏。我想我可能会遇到这样的问题,因为我的应用程序在运行时在 RAM 上增长得非常快。
当我在运行一段时间后使用 jconsole 观察堆/codecache/perm gen 等内存时,我很惊讶地看到以下内容:
图片链接:https://www7.pic-upload.de/13.06.12/murk9qrka8al.png
正如您在右侧的 jconsole 中看到的那样,当我进行与分析相关的操作时,堆会增加,但当工作结束时,堆也会再次减小到正常大小。在左侧,您可以看到部署应用程序的服务器的“htop”。就是这样:尽管堆运行正常,而且垃圾收集器似乎也运行正确,但 RAM 却令人难以置信高到几乎 3.2GB。
这现在真的让我很困惑。我在想我的 java 虚拟机堆栈是否必须对此做点什么?我做了一些研究,我发现虚拟机堆栈是一个只有几兆字节(甚至只有 kb)的小内存。
我的技术背景:
解决方案?
你知道为什么会发生这种情况以及我可以做些什么来修复它吗?我现在真的很惊讶,因为我认为内存问题来自内存泄漏,导致堆爆炸。但现在,堆不是问题。 RAM 越来越高,而堆却保持在同一水平。而且我不知道该怎么做才能解决它。
感谢您与我分享的每一个想法。
编辑:也许我还应该指出,这种行为目前使我无法真正让其他人使用我的应用程序。当 RAM 已满且服务器不再响应时,我就退出了。
Edit2:也许我还应该补充一点,在每次成功的进一步分析后,此 RAM 都会不断增加。
最佳答案
通过-Xmx
进行的堆设置仅控制Java堆,它不控制JVM对 native 内存的消耗,根据实现的不同, native 内存的消耗完全不同。
来自以下文章Thanks for the Memory ( Understanding How the JVM uses Native Memory on Windows and Linux )
维护堆和垃圾收集器使用您无法控制的 native 内存。
More native memory is required to maintain the state of the memory-management system maintaining the Java heap. Data structures must be allocated to track free storage and record progress when collecting garbage. The exact size and nature of these data structures varies with implementation, but many are proportional to the size of the heap.
JIT 编译器使用 native 内存,就像 javac
一样
Bytecode compilation uses native memory (in the same way that a static compiler such as gcc requires memory to run), but both the input (the bytecode) and the output (the executable code) from the JIT must also be stored in native memory. Java applications that contain many JIT-compiled methods use more native memory than smaller applications.
然后你就有了使用 native 内存的类加载器
Java applications are composed of classes that define object structure and method logic. They also use classes from the Java runtime class libraries (such as java.lang.String) and may use third-party libraries. These classes need to be stored in memory for as long as they are being used. How classes are stored varies by implementation.
我什至不会开始引用有关线程的部分,我想您已经明白了Java 堆并不是 JVM 实现中唯一消耗内存的东西,也不是所有东西进入 JVM 堆,堆占用的 native 内存比您指定的要多得多管理和簿记。
应用程序服务器很多时候都具有在 JVM 外部运行的 native 代码,但仍然向操作系统显示为与控制应用程序服务器的进程关联的内存。
关于尽管堆保持不变,Java RAM 却增加了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11023224/
我需要从 1024 增加 FD_SETSIZE 值至 4096 .我知道最好使用 poll()/epoll()但我想了解什么是优点/缺点。主要问题是:我要重新编译glibc吗? ?我读了几个线程,其中
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
我在 HTML 文件中有这样的内容: var value = 0; add(x){ x++; do
有没有办法在用户向上滚动时增加变量,并在用户使用 JavaScript 向下滚动时减少变量?变量没有最大值或最小值,如果能够调整灵敏度就好了。我不知道从哪里开始,感谢您的帮助! 编辑:没有滚动条,因为
我是 ios 新手,遇到以下问题。 我想根据表格 View 中元素的数量增加和减少表格 View 的高度大小。如果在输入时客户端在输出时给出 3 个或超过 3 个元素,我希望看到一个比默认行大 2 行
所以我一直在四处搜索,似乎大多数人认为以下列方式递增 indexPath 是正确的方法: NSIndexPath *newIndexPath = [NSIndexPath indexPathForRo
我有一个关于 connSupervisionTimeout 的问题。 我正在使用 CoreBluetooth 编写应用程序。我检查了连接参数和 connSupervisionTimeout = 720
我正在尝试根据页面的滚动位置更改元素的填充;当用户向下滚动页面时,填充会增加,而当他们向上滚动时,填充会减少。 我的主要问题是滚动不是很流畅,有时如果我滚动到页面顶部太快,每次元素的填充大小都不一样。
我正在尝试计算 18456 个基因的相关性度量,但编译器 (Dev C) 在将宏 GENE 或 INDEX 增加到 4000 到 5000 之间的值后退出或大。例如,它适用于: # define GE
我有一个带有 position: absolute 和 CSS3 过渡的圆形元素(a 元素)。在 hover 事件中,我想增加圆的高度和宽度,但我想在所有边上添加像素,而不仅仅是在左侧或右侧。 示例如
为了改善用户体验,我计划在我网站的所有页面(A-、A、A+)上增加/减少/重置字体大小 我面临的问题是页面上不同元素使用的字体大小不统一。有些是 14px,有些是 18px,有些是 12px,有些是
本文实例讲述了Yii框架数据库查询、增加、删除操作。分享给大家供大家参考,具体如下: Yii 数据库查询 模型代码: ?
sql替换语句,用该命令可以整批替换某字段的内容,也可以批量在原字段内容上加上或去掉字符。 命令总解:update 表的名称 set 此表要替换的字段名=REPLACE(此表要替换的字段名, '原
sql不常用函数总结以及事务,增加,删除触发器 distinct 删除重复行 declare @x 申明一个变量 convert(varchar(20),t
要增加我使用的最大可用内存: export SPARK_MEM=1 g 或者我可以使用 val conf = new SparkConf() .setMaster("loca
我正在尝试将文本(自定义文本按钮)放入 AppBar 的前导属性中。但是,当文本太长时,文本会变成多行 Scaffold( appBar: AppBar( centerTi
我正在使用最新版本的 NetBeans,我需要增加输出和菜单的字体大小(不是代码部分)。我试过: netbeans_default_options=".... --fontsize 16" 但是当我将
我必须将 180000 个点绘制到一个 EPS 文件中。 使用标准 gnuplot 输出尺寸点彼此太接近,这使得它们无法区分。有没有办法增加图像的宽度和高度? 最佳答案 是的。 set termina
我有一个带有输入字段的 twitter bootstrap 3 导航栏。我想增加输入字段的宽度。我已尝试设置 col 大小,但它不起作用。 html比较长,请引用bootply http://www.
我正在尝试增加 ggplot 标题中下划线的大小/宽度/厚度。我曾尝试使用大小、宽度和长度,但没有成功。 这是我所做的一个例子。 test <- tibble(x = 1:5, y = 1, z =
我是一名优秀的程序员,十分优秀!