Tag: 内存

-Xms JVM在引用堆内存时意味着什么?

究竟什么-Xms在Java堆内存方面意味着什么? 我们运行1024-2048 min-max内存分配。 由于一些问题,我们将其从2048调低至最高1728,从1024调整到512分钟。 -Xms如何影响堆内存分配以及为什么在-Xms值减少时最大内存减少?

分配1亿个具有较小物理内存的整数

想要输出1亿个整数,我的系统只有1 GB的RAM。什么是最快速有效的排序方式? 假设我们在文本文件中有一个输入,每行一个整数。 我们正在使用java程序进行排序。 我已经指定了RAM,因为我们无法保存RAM中的所有输入整数。 更新:整数是7位数字。

如何启动无限内存的JVM?

如何启动没有堆最大内存限制的JVM? 这样它可以占用尽可能多的内存吗? 我搜索了是否有这样的选项,但我似乎只找到-Xmx和-Xms选项。 编辑: 假设我有一台4GB内存的服务器,它只运行我的应用程序。 而且,假设我有另一台32GB RAM的服务器。 我不想以4GB的内存限制启动我的应用程序,因为第二台机器应该能够处理更多的对象

是否可以增加java进程(运行时)的大小?

我有一个非常重要的过程在运行。 我无法阻止它,需要扩大java进程的大小! 有没有办法在线增加我的java进程的大小(在运行时)?

试图将java对象存储在连续的内存中

我正在尝试实现类似缓存的对象集合。 目的是通过内存中的位置快速访问这些对象,因为我可能一次只能读取多个对象。 我目前只是将对象存储在像vector或deque这样的java集合对象中。 但我不相信这会利用连续的记忆。 我知道这可以在C中完成,但可以用Java完成吗? 这些对象可能具有不同的长度(因为它们可能包含字符串)。 有没有办法通过Java分配连续的内存? 是否有Java集合对象? 请告诉我。 谢谢,jbu

Java应用程序内存使用

我一直在编写一个小的java应用程序(我的第一个!),目前只做了一些事情。 目前,它运行Main类,它启动一个gui类(我编写的一个扩展JFrame的类,只包含一个JTextArea),一个通过大约40kb的BufferedInputStream加载本地文件的类,以及一个从一个类加载一个条目的类。 Java属性文件。 一切都运行得非常好,然而,我正在看Windows任务管理器,我注意到一些让我感到奇怪的东西。 当我启动应用程序时,RAM使用量会在加载本地文件时跳转到大约40MB,并从中提取一些值以显示在JTextArea中,这对我来说是正常的,因为JVM,Java基类等等。但是,当应用程序完成加载文件时,它只是闲置,因为我目前还没有做任何其他事情。 当它处于空闲状态时,只要窗口处于活动状态,应用程序的内存使用量就会每秒开始上升10-20kb。 这让我很奇怪。 如果我点击另一个程序使这个程序成为非活动窗口,内存仍会上升,但速度要慢得多(每3-5秒约10kb)。 我没有测试过它会走多远,但这让我觉得很奇怪。 这是正常的Java行为吗? 我想我的代码可能会泄漏内存,但我不确定如何。 我确实关闭了我正在使用的BufferedInputStream,我看不出还有什么会导致这种情况。 如果我的解释没有意义,我很抱歉,但我很感激任何人可能有的见解和/或指示。 更新: 根据建议,我基本上将我的应用程序剥离到Main类,它只调用gui类。 gui类只扩展JFrame并设置窗口大小,关闭操作和可见属性。 随着这些变化,内存仍然以10-20kb增长,但速度较慢。 这与我收到的其他建议相结合,让我相信这只是Java。 如果我发现其他有趣的东西,我将继续玩它,让大家都知道。

如何在java的内存中表示null

可能重复: Java内存中究竟是什么null 有没有人知道如何在对象或任何东西的内存中表示空值。 在dot net中,它由空指示符布尔值和相应类型的值表示( 请参阅此处 )。 所以有谁知道它是如何在java中完成的?

在java中使用大字符串时StringBuilder内存不足错误

我从String test += str; test成倍增长,成千上万的角色。 运行需要45分钟,可能是因为创建了大字符串并删除了垃圾。 然后,我将这样的输入交错,使其达到30秒。 这似乎是廉价的方式,但它运作良好: if (secondDump.length() > 50) { intermedDump = intermedDump + secondDump; secondDump = “”; } if (intermedDump.length() > 100) { thirdDump = thirdDump + intermedDump; intermedDump = “”; } if (thirdDump.length() > 500) { fourthDump = fourthDump + thirdDump; thirdDump = “”; } if (fourthDump.length() > 1000) { […]

为什么max heap在运行时会发生变化?

我们有一个在openjdk8中运行的Java应用程序,其最大堆内存在运行时更改 – 可能是什么原因? 我发现问题为什么堆在java中发生了变化,这指的是解释max和committed memory之间差异的文章。 在我们的例子中,似乎这两个通常是相同的,但并非总是如此 – 请参阅下面截图的11:53。 堆也可以更改为年轻代串行收集器( -XX:MaxHeapFreeRatio ,请参阅鼓励JVM到GC而不是增长堆? ),但是我们使用并行收集器,所以情况并非如此。 我们运行应用程序的内存相关JVM参数: -XX:MaxMetaspaceSize=200M -Xms2000m -Xmx2000m 不确定它是否相关,应用程序在11:55到11:58之间对老一代进行了并行标记扫描 – 此时有超过200MB的可用内存可用,我们看不出任何这种行为的原因。

Java进程内存使用量不断增加

前提条件: 具有16 Gb RAM的PC 在Ubuntu 16.10 x64上安装了JDK 1.8.x. 标准的基于Spring的Web应用程序,部署在Tomcat 8.5.x上。 Tomcat配置了下一个参数: CATALINA_OPTS=”$CATALINA_OPTS -Xms128m -Xmx512m -XX:NewSize=64m -XX:MaxNewSize=128m -Xss512k -XX:+UseParallelGC -XX:+AggressiveOpts -XX:+UseFastAccessorMethods -XX:MaxMetaspaceSize=512m -XX:-TieredCompilation -XX:ReservedCodeCacheSize=512m” JMeter 2.13用于负载测试运行 JProfiler 9.x用于java堆内存使用情况跟踪 top util用于java进程内存使用情况跟踪 当我连续3次开始加载测试时,我观察到(使用top )java进程增加了大量已用内存: Tomcat启动后使用~1Gb 在第一次测试运行后,它使用4.5Gb 当所有测试都完成后,Tomcat正在使用7Gb的RAM 所有这些时间堆大小都是有限的,JProfiler确认 – 堆大小不超过512Mb。 这是JProfiler的截图。 底部的红色数字是java进程使用的内存大小(根据top )。 问题是: 为什么java进程在工作时始终不断增加内存使用量? 谢谢! UPD#1:关于可能的重复:他们have confirmed that this only happens on Solaris. 但我使用的是Ubuntu 16.10。 同样,尖锐的问题没有一个可以解释问题原因的答案。 UPD#2:暂停一段时间后我不得不回到这个问题。 […]