JVM maxHeapSize和InitialHeapSize不会反映在htop中

时间:2017-12-07 23:18:17

标签: java jvm heap-memory

我有一台Linux机器,我正在运行一个Java应用程序。 我用这些参数运行jvm:-Xmx27231m -Xms27231m

然而,当我看到htop / top时。 我对整个系统和过程的具体看法是,jvm实际上并没有保留27GB的堆,而是要求它。 我所看到的是那个 Virt:32.8G RES:15.3G SHR:16536

在我所有的其他prod / qa / dev机器中,RES反映了确切的数量(可能更多),因为我要求JVM为我保留的堆大小。 然而,对于一台特定的机器,情况并非如此。 我对这种情况发生的原因一无所知。

我将Java Mission Control附加到该进程,我发现InitialHeapSize和MaxHeapSize实际上具有正确的值,但是类型不是CommandLine而是符合人体工程学。我真的不知道这意味着什么。

任何? 谢谢

1 个答案:

答案 0 :(得分:3)

JVM不预先对页面进行预处理,以减少启动时间。但是,您可以使用此选项强制它。

func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {

    let currentText = textView.text ?? ""
    guard let stringRange = Range(range, in: currentText) else { return false }
    let changedText = currentText.replacingCharacters(in: stringRange, with: text)
    return changedText.count <= 399 // Pass your character count here 
}

BTW这不会阻止JVM在没有使用的情况下将内存释放回操作系统(尽管JVM很少使用此AFAIK),也不会将堆锁定到主内存中以防止交换。

  

然而,对于一台特定的机器,情况并非如此。

很可能它没有正确的活动来导致内存被懒惰地使用。