Tag: 内存

在一长串文件中查找最近修改的3个文件

我有一个文件列表,我想排序和提取前3个最后修改。 约束:由于下游应用程序的兼容性问题,我无法使用Java 7 我目前的选择 解决方案1 File[] files = directory.listFiles(); Arrays.sort(files, new Comparator(){ public int compare(File f1, File f2) { return Long.valueOf(f1.lastModified()).compareTo(f2.lastModified()); } }); 解决方案2 public static void sortFilesDesc(File[] files) { Arrays.sort(files, new Comparator() { public int compare(Object o1, Object o2) { if ((File)o1).lastModified().compareTo((File)o2).lastModified()) { return -1; } else if (((File) o1).lastModified() < ((File) o2).lastModified()) { […]

Java方法的内存开销是多少?

类中函数的内存开销是多少? 例如, Class A { int a } Class B { int a int foo(int); } 所以A类的100个实例应该是80个字节。 B类的100个实例怎么样?

StringBuilder最有效的初始容量大小?

我正在写很多东西来登录突发,并优化数据路径。 我用StringBuilder构建日志文本。 什么是最有效的初始容量,内存管理明智,所以无论JVM如何都能很好地工作? 目标是避免几乎总是重新分配,这应该由初始容量约80-100覆盖。 但是我也想浪费尽可能少的字节,因为StringBuilder实例可能会在缓冲区中出现并且会浪费掉浪费的字节。 我意识到这取决于JVM,但是应该有一些值,这会浪费最少的字节,无论JVM,都是“最小公分母”。 我目前正在使用128-16 ,其中128是一个很好的整数,减法用于分配开销。 此外,这可能被视为“过早优化”的情况,但由于我所追求的答案是一个“经验法则”数字,因此知道它在将来也会有用。 我不期待“我最好的猜测”答案(上面我自己的答案已经是这样),我希望有人已经研究过这个并且可以分享基于知识的答案。

Java进程内存检查测试

我试着看看-Xmx和-Xms参数如何影响我的程序并检查我的进程消耗了多少内存。 我写了一个简单的程序,但我无法推断出结果。 请帮助。 public static void main( String[] args ) { char[] array = new char[69926904]; } 我使用参数-Xms5M -Xmx200M 。 理想情况下,由于字符占用2个字节,因此在超出内存限制之前应保留100M字符。 即使我们说,很少有空间用于指针和长度 ,我不知道,为什么它在69926904长度后抛出错误。 谢谢。

Java 8 hashmap高内存使用率

我使用散列图存储QTable来实现强化学习算法。 我的hashmap应该存储15000000个条目。 当我运行算法时,我看到进程使用的内存超过1000000K。 当我计算内存时,我预计它的使用量不会超过530000K。 我试着写一个例子,我得到了相同的高内存使用率: public static void main(String[] args) { HashMap map = new HashMap(16_000_000, 1); for(int i = 0; i < 15_000_000; i++){ map.put(i, i); } } 我的记忆力: 每个入口集都是32个字节 容量为15000000 HashMap实例使用:32 * SIZE + 4 * CAPACITY memory =(15000000 * 32 + 15000000 * 4)/ 1024 = 527343.75K 我的记忆计算错在哪里?

对象的地址在其生命周期中是否固定?

对象的地址在其生命周期中是不变的还是可以改变? 我只是觉得一个对象的地址永远不会改变。 它是JVM依赖的吗? 我没有找到任何明确的规格。

Java本机内存使用情况

有没有工具可以知道我的java应用程序使用了多少本机内存? 我从我的应用程序中经历过outofmemory:当前设置是:-Xmx900m 电脑,Windows 2003 Server 32bit,RAM 4GB。 也是在Windows上将boot.ini更改为/ 3GB,会有什么不同吗? 如果设置为Xmx900m,那么可以为此进程分配多少最大本机内存? 是1100米?

Java使用的内存比分配的内存多

使用以下Java选项启动Apache Tomcat(Atlassian Confluence)实例: JAVA_OPTS=”-Xms256m -Xmx512m -XX:MaxPermSize=256m -Djava.awt.headless=true ” 但是我发现在启动之后它会快速吞噬我的虚拟服务器上可用的大部分1GB内存。 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 6082 root 19 0 1105m 760m 16m S 0.7 74.2 5:20.51 java 整体消耗的内存(heap + PermGen)是否应该保持在使用-Xmx指定的内存之下? 这导致的问题之一是我无法使用关闭脚本关闭服务器,因为它尝试生成具有256MB内存的JVM,因为它不可用而失败。

JVM最大堆大小可以动态吗?

JVM -Xmx参数允许将JVM的最大堆大小设置为某个值。 但是,有没有办法让这个价值变得有活力? 换句话说,我想告诉JVM“看看,如果你需要它,只需继续从系统中取RAM,直到系统出来。” 问题的两个部分:首先,有问题的应用程序可以使用非常广泛的ram,具体取决于用户正在做什么,因此概念性最小值和最大值相差很远。 其次,JVM似乎在启动时保留虚拟内存的最大堆空间。 这个特定的应用程序运行在各种各样的硬件上,因此选择“一刀切”的最大堆空间很难,因为它必须足够低才能在低端硬件上运行,但我们真的喜欢能够利用真正强劲的机器,如果它们可用的话。

为什么Java使用堆进行内存分配?

我刚刚在一本java书中读到这句话,说java中的Objects驻留在堆上。 是否使用了堆,因为它是快速存储数据和检索数据的最佳方式? 我只是想知道数据结构是初学者。 我的意思是为什么不堆叠或其他东西?