标签:max perm 变化 操作 系统 follow 内存泄漏 msi 加载
JVM内存包含以下部分:
JVM有一个堆,它是运行时数据区,从中分配所有类实例和数组的内存。它是在JVM启动时创建的。
可以使用以下VM选项配置堆大小:
1 2 |
|
默认情况下,最大堆大小为64 Mb。
对象的堆内存由自动内存管理系统回收,该系统称为垃圾收集器。堆可以是固定大小,也可以扩展和缩小,具体取决于垃圾收集器的策略。
此外,JVM还有堆以外的内存,称为非堆内存。它在JVM启动时创建并存储每类结构,例如运行时常量池,字段和方法数据,方法和构造函数的代码,以及实习字符串。
不幸的是,JVM在非堆内存上提供的唯一信息是它的整体大小。没有关于非堆内存内容的详细信息。
非堆内存大小的异常增长可能表示存在潜在问题,在这种情况下,您可以检查以下内容:
如果应用程序确实需要大量非堆内存且默认最大大小为64 Mb是不够的,则可以借助-XX:MaxPermSize
VM选项扩大最大大小。例如,-XX:MaxPermSize=128m
设置128 Mb的大小。
Similarities and Differences Between Stack and Heap
两者都是Java分配内存的方式,两者都存储在RAM中。但是,为了使事情更容易记住,堆用于动态内存分配,而堆栈用于静态分配。
它存放在哪里? 在堆栈上分配的变量可以直接从内存访问,因此,这些变量可以非常快速地运行。另一方面,访问堆上的对象需要更多时间。
分配何时发生? 在堆栈上,编译程序时会发生内存分配。同时,在堆上,它在程序运行时开始。
既然如此,那么在编译之前,如果要使用堆栈,则需要知道需要多少数据和内存。堆栈的另一个限制是它无法处理需要大量内存的大块变量。如果您不知道在运行时需要多少数据,或者您需要大量数据的内存,那么您需要使用堆。
堆栈使用起来更容易,更快,但它带来了很多限制,如果你使用堆,你可以忽略它们。
你什么时候使用堆栈? 堆栈只能用于占用少量内存的局部变量。好消息是内存分配和管理不会成为您的问题,访问这些对象的速度非常快。它确实受到大小限制以及无法在堆栈上调整变量的事实。
你什么时候使用堆?如果存在需要全局访问的变量,则使用堆来分配内存,而不是只对创建它的方法和函数可用。当你需要大量内存时,堆也很好,因为它对内存大小没有限制。您还可以在堆上调整变量的大小。
标签:max perm 变化 操作 系统 follow 内存泄漏 msi 加载
原文地址:https://www.cnblogs.com/messpro/p/13294631.html