Tag: 内存

java存储中的实际参数在哪里

如果我将一个String文字传递给某些metohd: String s=new String(“stack”); String s2=s.concat(“overflow”); 其中将存储字符串“overflow”。 我的一个朋友争辩说它是在String常量池中创建的,我反对他。 请告诉我 提前致谢。

从java获取OS内存大小

有没有办法从java获取操作系统上的总内存大小? 运用 Runtime.getRuntime().maxMemory() 返回JVM的允许内存,而不是操作系统的内存。 有没有人有办法获得这个(从java代码)?

内存有效的多值映射

嗨,我有以下问题:我在MultiValueMap存储字符串和相应的整数值列表MultiValueMap我存储大约13000亿字符串,一个字符串最多可以有500或更多值。 对于每个值,我将在地图上随机访问。 所以最糟糕的情况是13 000 000 * 500点拨电话。 现在地图的速度很快但内存开销却很高。 MultiValueMap就是HashMap/TreeMap<String, <ArrayList> 。 HashMap和TreeMap都有很多内存开销。 一旦完成,我就不会修改地图,但我需要它在程序中随机访问的速度要快且尽可能小。 (我将它存储在磁盘上并在启动时加载它,序列化的映射文件占用大约600mb但在内存中大约需要3gb?) 最有效的内存是将String存储在已排序的字符串数组中,并为值提供相应的二维int数组。 因此访问将是字符串数组上的二进制搜索并获取相应的值。 现在我有三种方法可以实现目标: 我使用一个排序的MultivalueMap(TreeMap)来创建所有的东西。在我完成获取所有值之后,我通过调用map.keyset().toArray(new String[0]);获取字符串数组map.keyset().toArray(new String[0]); 创建一个二维int数组并从多值映射中获取所有值。 Pro:它易于实现,在创建过程中仍然很快。 Con:从Map到Arrays的复制过程中占用的内存更多。 我从一开始就使用Arrays或者ArrayLists,并将所有内容存储在Pro:最少的内存开销。 Con:这将非常慢,因为每次添加一个新Key时我都必须对Array进行排序/复制。另外,我需要实现自己的(可能更慢)排序,以保持相应的int数组的顺序相同字符串。 难以实施 我使用Arrays和MultivalueMap作为缓冲区。 程序完成创建阶段的10%或20%后,我会将值添加到数组并保持顺序,然后启动一个新的Map。 Pro:足够的速度和足够的内存效率。 骗局:难以实施。 这些解决方案都不适合我。 您是否知道此问题的任何其他解决方案,可能是内存高效(MultiValue)Map实现? 我知道我可以使用数据库,所以不要把它作为答案发布。 我想知道如何在不使用数据库的情况下做到这一点。

java堆空间是由RAM还是硬盘决定的?

我正在执行一个巨大的计算,我得到一个“堆外空间”错误。 我想知道的是,如果Java自动进行分页,那么在执行此计算时可能会使用我的硬盘空间吗? 如果它不自动执行,我该如何启用此选项?

监视Java应用程序的内存使用情况

我想在一个Java进程中运行几个REST Web应用程序,以便在Akka的帮助下轻松保存内存和扩展。 我想估计每个请求处理程序消耗多少内存并检测整个系统的危险。 是否有可能在该进程内几乎实时监视内存使用情况,并找出每个请求处理程序使用了多少内存? 我需要实现的目标是什么? 有没有工具? 是否有可能捕获out of memory exception并基于内存使用情况做一些事情,例如仅崩溃请求处理程序超出假定的内存限制? 如果是这样,那会有什么不好的?

inheritance中的Java内存使用情况

扩展基类时,Java中的内存使用情况如何? 子类是否包含基类的实例(具有它自己的开销和所有)或它是否只有16字节的开销? class Foo { int x; } class Bar extends Foo { int y; } 那么,更具体地说,Bar实例的内存使用量是多少? 是Foo (including overhead) + Bar(including overhead) 或只是Foo (excluding overhead + Bar(including overhead)

特定于线程的堆分配

是否有可能使一些线程子集(例如来自特定的ThreadPool)从自己的堆中分配内存? 例如,大多数线程都是从常规共享堆分配的,很少有工作线程从各个堆分配(每个线程1:1)。 目的是确保在共享环境中安全执行代码 – 典型的worker是无状态的并且在单独的线程上运行,处理一个请求不应该消耗超过4MB的堆。 更新#1 Re:但为什么你担心“安全执行”和不可预测的堆消耗增加? 关键是在我的进程中安全托管任意第三方Java代码。 有一点是由于第三方代码中的错误导致我的整个过程没有“内存不足”。 更新#2 Re:从限制每个线程的内存使用量来看,在Java中语言是不可能的 根据我的调查,在我发布这个问题之前,我的意见是一样的,我只是希望我错过了一些东西。 我现在看到的唯一可能的用例替代解决方案是…… 1) 我的java线程需要多少内存? – 跟踪某些调控器线程中的线程内存使用情况并终止坏线程 2) 在我自己的JVM上运行Java代码 – 是的,这是可能的。 你可以下载一个JVM开源实现,修改它…… 🙂

java中类的内存分配?

B类inheritance了A类。现在当我们创建一个B类型的对象时,为B分配的内存是多少? 是包括A和B,还是内存分配的任何其他程序?

不断增加YARN中Spark应用程序的物理内存

我在YARN中运行Spark应用程序,有两个执行程序,Xms / Xmx为32 GB,spark.yarn.excutor.memoryOverhead为6 GB。 我看到应用程序的物理内存不断增加,最终被节点管理器杀死: 2015-07-25 15:07:05,354 WARN org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl: Container [pid=10508,containerID=container_1437828324746_0002_01_000003] is running beyond physical memory limits. Current usage: 38.0 GB of 38 GB physical memory used; 39.5 GB of 152 GB virtual memory used. Killing container. Dump of the process-tree for container_1437828324746_0002_01_000003 : |- PID PPID PGRPID SESSID CMD_NAME USER_MODE_TIME(MILLIS) SYSTEM_TIME(MILLIS) VMEM_USAGE(BYTES) RSSMEM_USAGE(PAGES) […]

这些java本机内存从哪里分配?

JDK版本是热点8u_45 我研究了我的java进程的本机内存。 本机内存甚至比堆消耗更多空间。 然而,有许多本机内存块让我感到困惑。 例如pmap -x的结果: 00007f8128000000 65508 25204 25204 rw— [ anon ] 00007f812bff9000 28 0 0 —– [ anon ] 00007f812c000000 65508 24768 24768 rw— [ anon ] 00007f812fff9000 28 0 0 —– [ anon ] 00007f8130000000 65508 25532 25532 rw— [ anon ] 00007f8133ff9000 28 0 0 —– [ anon ] 00007f8134000000 […]