Tag: 内存

尽管有足够的可用内存,但巨大的数组会丢失内存

使用-Xmx1G标志提供1千兆字节的堆,以下按预期工作: public class Biggy { public static void main(String[] args) { int[] array = new int[150 * 1000 * 1000]; } } 该数组应代表约600 MB。 但是,以下抛出OutOfMemoryError: public class Biggy { public static void main(String[] args) { int[] array = new int[200 * 1000 * 1000]; } } 尽管arrays应该代表大约800 MB,因此很容易适合内存。 丢失的记忆在哪里消失了?

如何存储实例方法

可能重复: 内存中的Java / C#方法表示 我想知道我是否在java中有一个对象,它是如何存储实例方法的? 对象是否有指向它的实例方法的指针? 例: public class MyObject { private int x; private int y; [..] } 如果我计划在内存中保留这些MyObject的很多(例如一个对象的大树),如果除了x的getter和yi定义计算总和的实例方法,它会在内存方面产生显着差异吗? 我正在尝试理清我应该添加更多实例方法或使用getter和setter在另一个类中进行计算。

Java中对象的内存开销是多少?

重复: Java中对象的内存消耗是多少? 假设在Intel或AMD机器上的64位Linux上使用Java 1.6 JVM,创建一个简单的对象会使用多少内存开销(以字节为单位)? 例如,二维数组中的每一行都是一个单独的对象。 如果我的arrays很大,我将使用多少RAM?

JVM进程与JVM堆内存使用情况

我已经阅读了这个Process Memory Vs Heap – JVM ,我遇到了同样的问题。 jvm进程内存使用量不断增加,从不收缩。我通过在linux服务器上做一个top来检查。 应用程序正在将作业调度到集群(使用Quartz + Sun Java DRMAA API) Java堆空间在应用程序生命周期中保持在限制范围内,但是jvm进程显示内存使用量稳步攀升并且永远不会下降。 这是内存泄漏吗? 如果是这样,为什么堆空间在限制范围内。 有人可以解释一下。 更新:当我通过jconsole跟踪时,我有-Xmx1600m -Xms1600m我可以看到堆空间在这个限制范围内,距离为450m,但是top命令显示该进程使用了​​超过900m。

使用Java检测CPU速度/内存/ Internet速度?

在Java中是否可以识别可用的总CPU速度以及总系统内存? 网络的网络连接速度也很棒。

Java Runtime.maxMemory不正确?

我运行了以下方法Runtime.getRuntime()。maxMemory()并给出了85196800。 但是,然后我从命令行运行顶部,它显示 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 8672 root 20 0 1284m 156m 4296 S 0.3 60.9 0:33.35 java 这不显示使用156M的ram吗? 有什么想法发生了什么?

Object.toString或Object.hashCode是否给出了对象的内存地址

通常声称Object.hashCode() (所有对象的默认实现Object.hashCode()的实现给出了对象的内存地址。 该声明通常附加于Object.to String()产生的特殊输出的解释。 请看这里的例子。 对于我所知道的任何JVM / JRE,情况肯定不是这样。 尤其是因为地址通常是64位长。 而且,垃圾收集器重定位对象,因此地址会发生变化。 我已经看到声称它可以是对象的初始内存地址。 但是,由于许多对象具有相似的地址,因此对于哈希码来说这将是一个糟糕的选择。 是否存在或曾经存在任何广泛使用的JVM / JRE,它们是对象的(初始)内存地址。 我知道Object类的JavaDoc表明实现的hashCode可能是内存地址。 但我怀疑这是一个从未更新过的严重过时的声明。 实际上,当前的Oracle JVM不使用内存地址(但可以配置为执行此操作): https://stackoverflow.com/a/16105878/545127 hashCode是一个内存地址的想法是一个历史人工制品: https://stackoverflow.com/a/13860488/545127 我的问题是, 任何广泛使用的JVM是否(和哪些)使用内存地址作为其(默认)实现。

java引用变量存储在哪里?

Java的引用变量是如何存储的? 这是否与C指针类似? 我的意思是引用变量是这段代码中的myDog Dog myDog = new Dog(); 我理解了C指针,它存储在堆中的全局变量,并且它存储在堆栈中的局部变量。 我想知道java工作方式相同。

如何启动具有更多内存的Java小程序?

对于大型Java应用程序,默认的64 MB最大堆内存可能很小。 是否有任何applet参数可以为签名的applet增加此值? 对于Java程序,这是一个简单的命令行参数,但这对于浏览器中的applet是如何工作的。

如果指定最大堆大小大于可用RAM,会发生什么

在接受采访时被问到。 如果指定的最大堆大小(Xmx)大于可用RAM,会发生什么? 我也想知道如果指定最小堆大小(Xms)大于可用RAM会发生什么?