jvm|jvm内存组件,你了解多少

jvm|jvm内存组件,你了解多少

JVM使用的内存不仅仅是堆 。 例如 , Java方法、线程堆栈和本机句柄在内存中与堆以及JVM内部数据结构分开分配 。 若想要更加系统更加详细的学习JVM知识 , 建议参加java培训 , 有经验丰富的专业讲师面授指导教学 , 能够帮你更全面了解JVM 。
-Xmx参数的值控制Java堆的最大大小 , Java堆不是JVM分配的唯一内存 。 除了永久性生成或Metaspace(基于java , 从JDK8起 , MetaSpace就在那里) , CodeCache , 其他JVM内部使用的本机C++堆 , 线程堆栈的空间 , 直接字节缓冲区 , GC开销 , 以及JVM内存消耗中包含的其他东西 。
以下是一些其他JVM内存组件:
Metaspace(元空间)
JDK8之前的HotSpotJVM有第三种类型的生成 , 称为永久生成 , 它与Java堆相邻 。 它包含JVM用来描述应用程序中使用的类和方法的元数据 。 从JDK8开始 , Permanent被一个称为Metaspace的新空间所取代 , 该空间与Java堆不相邻 。 Metaspace是从本机内存中分配的 。 MaxMetaspaceSize参数限制JVM中Metaspace的使用 。 默认情况下 , Metaspace没有限制 , 它以非常小的默认值开始 , 并根据需要以较小的增量增长 。 Metaspace只包含类元数据 , 所有活动Java对象部分都被移动到堆内存中 , 因此Metaspace的使用率远低于永久生成 。 通常 , 无需指定最大Metaspace大小 , 除非面临较大的Metaspace泄漏 。 在java培训中 , 也有关于JVM内存的学习 , 学好这部分的知识 , 可以避免在工作中出现的很多问题 。

CodeCache
CodeCache是包含JVM生成的本机代码的内存区域 。 JVM生成本机代码的原因有很多 。 这些原因包括动态生成的解释器循环、JNI存根和由JIT编译器编译成本机代码的Java方法 。 JIT编译器贡献了大部分代码缓存区域 。
ThreadStackSize/Xss
-XX:ThreadStackSize=size设置线程堆栈大小(以字节为单位) 。 附加字母k或K表示千字节 , m或M表示兆字节 , 或g或G表示千兆字节 。 Xss的默认值取决于您运行的操作系统和体系结构 。 此选项相当于-Xss 。
【jvm|jvm内存组件,你了解多少】JVM一向很好的帮我们管理内存 , 它是Java程序运行的环境 , 同时是一个操作系统的一个应用程序进程 , 因此它有自己的生命周期 , 也有自己的代码和数据空间 。 参加java培训学习 , 可以在短时间内获得很大提升 , 避免在学习上多走弯路 , 节省时间 , 提高学习效率 。