当前位置:首页 > 内存 > 正文

jvm运行内存知识大全

  • 内存
  • 2024-07-16 00:56:04
  • 6757

一、JVM性能调优:GC调试、各内存区、Linux参数大全及实用小技巧

深入剖析JVM性能调优:关键参数控制与实战技巧


在Java应用中,JVM性能调优至关重要。在本文中,您将探索一组核心参数,它们将帮助您进行精确调整并提高性能。我们首先从运行时数据区域开始:


内存区域管理:-XX:TargetSurvivorRatio调整新生代与幸存者区域的比例,以保证高效的内存分配。-XX:MaxTenuringThreshold控制对象晋升到老年代的年龄。
大对象策略:-XX:PretenureSizeThreshold设置大对象直接进入老年代的阈值,避免频繁GC。
内存使用监控:-XX:MaxHeapFreeRatio和-XX:MinHeapFreeRatio监控堆中的空闲内存并维护内存使用情况。
对象大小限制:-XX:MaxNewSize和-XX:MaxPermSize分别设置新生代和元数据区域的最大单个对象大小。
大页内存优化:-XX:UseLargePages和-XX:LargePageSizeInBytes提高内存访问性能。
空间生成策略:-XX:HandlePromotionFailure保证空间分配的合理性,避免内存溢出。

接下来是GC调试和控制:


GC协议和控制:-XX:HeapDumpOnOutOfMemoryError和-XX:HeapDumpAfterFullGC设置OOME堆转储此时,-XX:MaxGCPauseMillis目标暂停时间。
自适应策略:-XX:UseAdaptiveSizePolicy自动调整堆内存大小以减少停顿时间。

还有其他实用技巧:


-XX:UseGCOverheadLimit限制GC使用的时间,提高Application的响应速度。
-XX:OnOutOfMemoryError是定义OOME时运行的脚本,用于执行自定义恢复策略。

深入了解Java堆栈参数和元数据空间:


-Xss和-XX:ThreadStackSize调整线程堆栈大小并优化线程管理。
-XX:+DoEscapeAnalysis和-XX:PrintEscapeAnalysis转义分析,提高内存使用效率。

最后,了解元数据空间的优化参数,例如大小限制和恢复策略。


以上参数只是冰山一角,更高级的技术如内存碎片处理、元空间回收等还有待发现。仔细的监控和优化将使您的JVM应用程序更加稳定和高效。请根据实际场景灵活使用这些参数,以提高Java应用程序的性能。


二、javajvm的内存到底是什么分配的,看得有点糊涂。

整个Java程序执行过程包括以下内存区域:

l寄存器:JVM内部虚拟寄存器,访问速度很快且不受程序控制。。

L栈:存储局部变量的值,包括:1.使用基本数据类型的值。2.它是类的实例,即对该类的引用(指针)。堆区域对象。它还可用于在加载方法时保存帧。

​​l堆:用于存储动态创建的数据,例如新对象。创建的对象只包含其成员变量,不包含成员方法。同一类的对象有自己的成员变量,并存储在自己的堆上,但由于它们共享类的方法,因此每次创建对象时不会复制成员方法。

​​l​常量池:JVM为每个加载的类型维护一个常量池。常量池是该类型中用的常量的有序集合。包含直接常量(原始类型、字符串)以及对其他类型、方法和字段的符号引用(1)。池中的数据是通过索引访问的,就像数组一样。常量池在Java中的动态链接中起着关键作用,因为常量池包含一个类型对其他类型、方法和字段的所有符号引用。常量池存在于堆上。

Hard用于存放从磁盘读取的源程序代码。

l数据段:用于存储定义为静态的静态成员。