我试图寻找这个问题的答案,但始终没有找到答案。
当我定义最大堆大小时,为Java GC空间分配大小的标准比率是多少?
也就是说:如果我用4Gb的堆启动JVM,那么分配给Eden的是多少?给幸存者多少钱?终身监禁要多少钱?
此外,对于不同的VM供应商,该比率是否会发生变化?
提前谢谢
这是特定于JVM的。在Oracle的JVM上,您可以使用-XX: PrintCommand dLineFlags-XX: PrintGC详细信息
来查找堆大小:
$ java -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -version
-XX:InitialHeapSize=78820288 -XX:MaxHeapSize=1261124608 -XX:+PrintCommandLineFlags -XX:+PrintGCDetails -XX:+UseCompressedOops -XX:+UseParallelGC
java version "1.7.0_09"
Java(TM) SE Runtime Environment (build 1.7.0_09-b05)
Java HotSpot(TM) 64-Bit Server VM (build 23.5-b02, mixed mode)
Heap
PSYoungGen total 22464K, used 770K [0x000000013e820000, 0x0000000140130000, 0x0000000157970000)
eden space 19264K, 4% used [0x000000013e820000,0x000000013e8e0b08,0x000000013faf0000)
from space 3200K, 0% used [0x000000013fe10000,0x000000013fe10000,0x0000000140130000)
to space 3200K, 0% used [0x000000013faf0000,0x000000013faf0000,0x000000013fe10000)
ParOldGen total 51328K, used 0K [0x000000010c570000, 0x000000010f790000, 0x000000013e820000)
object space 51328K, 0% used [0x000000010c570000,0x000000010c570000,0x000000010f790000)
PSPermGen total 21248K, used 2165K [0x0000000107370000, 0x0000000108830000, 0x000000010c570000)
object space 21248K, 10% used [0x0000000107370000,0x000000010758d6a8,0x0000000108830000)
由此,你可以很容易地计算出比率。
如果我们以任务分配给员工为例,根据员工的可用性和执行单个任务所需的技能(硬约束),我们将任务列表分配给员工列表。 现在,如果有一项任务,而没有任何员工具备完成该任务的技能,Optaplanner仍会将该任务分配给员工,并打破一个硬约束。这个结果告诉我,有一个硬约束被打破了,但任务仍然被分配,这影响了员工应该做的任务链,即不是分配一个不相关的(没有技能的)任务,系统(Optaplanner)不应该提
我一直在分析我们服务的Java.lang.OutofMemoryError:Java堆空间,并试图通过Eclipse MAT工具挖掘堆转储。 我们的服务使用8G堆运行,生成的堆转储的大小只有500 MB。
问题内容: 是局部变量,将其存储在堆或堆栈中的何处? 问题答案: 在堆上。每当您用来创建对象时,它都会在堆上分配。
我在阅读HBase文档时遇到了离堆读取路径,据我所知,离堆是内存中的一个地方,Java在那里存储垃圾回收器无法触及的对象。我还去搜索了一些方便使用离堆内存的libs,并找到了Ehcatche,但是,我找不到任何关于他的oracle或JVM的官方文档。那么,这是JVM的标准功能,还是某种程度的攻击,如果是,那么底层的类和技术是什么。
这是对OCaml标准库所提供的不同容器的一个粗略的比较。以下的n代表容器中元素的数量。 值得注意的是,大O所代表的是当前实现下的效率,并不为官方文档保证。希望以后这些实现不会 变得更糟糕吧。总之,文档才是理解这些模块最好的来源。当然,你也可以尝试阅读源代码。 Lists: 不可变的单链表 添加一个元素会创建一个新的链表l,从x指向链表tl。tl不会被改变,因此不会被拷贝。 添加一个元素: O(1)
主要内容:JEP 316 : 替代内存设备上的堆分配JEP 316 : 替代内存设备上的堆分配 通过 Java 10 中的这一增强,现在用户可以指定替代内存设备,例如 NV-DIMM 到 HotSpot VM 来分配 Java 堆空间。用户需要使用新选项 -XX:AllocateHeapAt 将路径传递到文件系统。 此选项采用文件路径并进行内存映射以达到所需的结果。其他堆标志如 -Xmx、-Xms 继续工作。