📜  常用的JVM参数

📅  最后修改于: 2022-05-13 01:54:48.895000             🧑  作者: Mango

常用的JVM参数

JVM 或Java虚拟机是物理机的软件实现,也可以说是抽象机。 Java的设计理念是 WORA(一次编写,随处运行),它在 VM 上运行。它是一个规范,它提供了一个经常执行Java字节码的运行时环境。编译器将Java文件编译为Java .class 文件,然后将该 .class 文件输入到 JVM 中,JVM 加载并执行该类文件。

JVM由三个基本子单元构成

  1. 类加载器子系统
  2. 运行时数据区
  3. 执行引擎

现在让我们讨论最常用的JVM参数,即3个如下:

  1. Java堆大小
  2. 垃圾收集器
  3. 打印 GC

参数 1: Java堆大小

以下三个 JVM 选项指定运行Java程序时的初始和最大堆大小以及线程堆栈大小:

-Xms - set initial Java heap size
 -Xmx - set maximum Java heap size
 -Xss - set java thread stack size

参数 2:垃圾收集器

垃圾收集算法用于获得更好的应用程序稳定性。垃圾收集跟踪 JVM 堆空间中可用的每个对象并删除未使用的对象。

Java为我们提供了 4 种实现垃圾回收的方法,分别是:

例子:

Java
// Class
// To test garbage collection
public class GFG { 
 
  // Method 1 - finalize()
  // finalize() method is invoked each time
  // before the "Test example garbage collection"
  public void finalize(){System.out.println("Test example garbage collection");} 
  
  // Method 2
  // Main driver method
  public static void main(String args[]){
   
  // Creating anonymous objects of
  // GFG class in amin() method 
  GFG object1 = new GFG(); 
  GFG object2 = new GFG();
    
  // Assigning objects NULL references
  object1 = null; 
  object2 = null;
   
  // CAlling(invoking) garbage collection
  // using gc() method
  System.gc(); 
 } 
}


Java
// Java Program to illustrate Print GC
public class Application {
 
    private static Map stringContainer = new HashMap<>();
 
    public static void main(String[] args) {
        System.out.println("Start!");
        String stringWithPrefix = "Prefix";
 
        // Load Java Heap with 3 M java.lang.String instances
        for (int i = 0; i < 3000000; i++) {
            String newString = stringWithPrefix + i;
            stringContainer.put(newString, newString);
        }
        System.out.println("MAP size: " + stringContainer.size());
 
        // Explicit GC!
        System.gc();
 
        // Remove 2 M out of 3 M
        for (int i = 0; i < 2000000; i++) {
            String newString = stringWithPrefix + i;
            stringContainer.remove(newString);
        }
 
        System.out.println("MAP size: " + stringContainer.size());
        System.out.println("End");
    }
}


输出:

Test example garbage collection
 Test example garbage collection

参数 3:打印 GC

这些 JVM 选项启用垃圾收集日志记录,这对于延迟敏感的操作非常有效。

使用以下参数,我们可以记录 GC 活动:

-XX:+UseGCLogFileRotation 
-XX:NumberOfGCLogFiles=< number of log files > 
-XX:GCLogFileSize=< file size >[ unit ]
-Xloggc:/path/to/gc.log

例子:

Java

// Java Program to illustrate Print GC
public class Application {
 
    private static Map stringContainer = new HashMap<>();
 
    public static void main(String[] args) {
        System.out.println("Start!");
        String stringWithPrefix = "Prefix";
 
        // Load Java Heap with 3 M java.lang.String instances
        for (int i = 0; i < 3000000; i++) {
            String newString = stringWithPrefix + i;
            stringContainer.put(newString, newString);
        }
        System.out.println("MAP size: " + stringContainer.size());
 
        // Explicit GC!
        System.gc();
 
        // Remove 2 M out of 3 M
        for (int i = 0; i < 2000000; i++) {
            String newString = stringWithPrefix + i;
            stringContainer.remove(newString);
        }
 
        System.out.println("MAP size: " + stringContainer.size());
        System.out.println("End");
    }
}