查看并解析当前jdk的垃圾收集器

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
简介: 本文介绍了如何查看和解析当前JDK使用的垃圾收集器,通过在IDEA中配置JVM选项并运行示例代码来展示G1垃圾回收器的详细信息和命令行标志。

概述:复习的时候,学看一下。

命令:

-XX:+PrintCommandLineFlags

打开idea,配置jvm

把上面命令输入jvm options中即可。

举例代码

这个代码的解析,我上篇文章有写,这个跟本文没有任何关系:

hutool工具的简单使用

pom文件:

  <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.8.24</version>
        </dependency>

示例代码:

package org.cyl.test04;

import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.io.resource.ClassPathResource;
import cn.hutool.core.lang.Console;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.asymmetric.KeyType;
import cn.hutool.crypto.asymmetric.RSA;
import cn.hutool.http.HttpUtil;

import java.io.File;
import java.util.List;

public class HutoolExample {

    public static void main(String[] args) {
        // 字符串操作
        String str = "Hutool is a tool for Java.";
        String result = StrUtil.sub(str, 0, 10);
        Console.log("SubString: {}", result);

        // 文件操作
        File file = FileUtil.file("D:\\csdnwork\\test04\\src\\main\\resources\\static\\text.txt");
        FileUtil.writeUtf8String("Hello Hutool", file);

        // 集合操作
        List<String> list1 = CollUtil.newArrayList("Hutool", "Java", "Tool");
        List<String> list2 = CollUtil.newArrayList("Easy", "Effective");
        List<String> newList = (List<String>) CollUtil.addAll(list1, list2);
        Console.log("New List: {}", newList);

        // 加密
        String test = SecureUtil.md5("Hello Hutool");
        Console.log("MD5: {}", test);


        // 加密
        RSA rsa = new RSA();
        String originalText = "Hello Hutool";
        byte[] encryptResult = rsa.encrypt(originalText, KeyType.PublicKey);
        Console.log("Encrypted: {}", encryptResult);

        // 解密
        byte[] decryptResult = rsa.decrypt(encryptResult, KeyType.PrivateKey);
        String decryptedText = new String(decryptResult);
        Console.log("Decrypted: {}", decryptedText);


        // 日期时间处理
        String dateStr = "2022-01-22";
        Console.log("Date: {}", DateUtil.parse(dateStr));

        // 网络操作
        String response = HttpUtil.get("https://www.baidu.com");
        Console.log("HTTP Response: {}", response);

        // 读取Classpath下的资源文件
        ClassPathResource resource = new ClassPathResource("/static/index.html");
        String content = resource.readStr(CharsetUtil.CHARSET_UTF_8);
        Console.log("Resource Content: {}", content);
    }
}

运行查看:

解析结果

我用的是graalvm17

-XX:ConcGCThreads=3 -XX:+EnableJVMCIProduct -XX:G1ConcRefinementThreads=13 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=264819584 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=4237113344 -XX:MinHeapSize=6815736 -XX:+PrintCommandLineFlags -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:ThreadPriorityPolicy=1 -XX:-UnlockExperimentalVMOptions -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC -XX:-UseLargePagesIndividualAllocation

  • -XX:ConcGCThreads=3: 设置并发垃圾回收线程数为3。
  • -XX:+EnableJVMCIProduct: 启用JVMCI产品。
  • -XX:G1ConcRefinementThreads=13: 设置G1垃圾回收器的并发细化线程数为13。
  • -XX:GCDrainStackTargetSize=64: 设置GCDrain栈目标大小为64MB。
  • -XX:InitialHeapSize=264819584: 设置初始堆大小为264819584字节(约2.5GB)。
  • -XX:MarkStackSize=4194304: 设置标记栈大小为4194304字节(约4MB)。
  • -XX:MaxHeapSize=4237113344: 设置最大堆大小为4237113344字节(约4GB)。
  • -XX:MinHeapSize=6815736: 设置最小堆大小为6815736字节(约6.5MB)。
  • -XX:+PrintCommandLineFlags: 打印命令行标志。
  • -XX:ReservedCodeCacheSize=251658240: 设置保留代码缓存大小为251658240字节(约240MB)。
  • -XX:+SegmentedCodeCache: 启用分段代码缓存。
  • -XX:ThreadPriorityPolicy=1: 设置线程优先级策略为1。
  • -XX:-UnlockExperimentalVMOptions: 禁用实验性虚拟机选项。
  • -XX:+UseCompressedClassPointers: 使用压缩类指针。
  • -XX:+UseCompressedOops: 使用压缩普通对象指针。
  • -XX:+UseG1GC: 使用G1垃圾回收器。
  • -XX:-UseLargePagesIndividualAllocation: 禁用单独分配大页面。

查看G1垃圾回收器

都知道现在用的是G1收集器,命令。

-XX:+PrintCommandLineFlags -XX:+PrintGCDetails

打印一下GCDetails.

  1. [0.006s][info ][gc] Using G1:表示正在使用G1垃圾收集器。
  2. [0.007s][info ][gc,init] Version: 17.0.9+11-LTS-jvmci-23.0-b21 (release):表示G1垃圾收集器的初始版本号为17.0.9+11-LTS-jvmci-23.0-b21。
  3. [0.007s][info ][gc,init] CPUs: 16 total, 16 available:表示总共有16个CPU核心可用。
  4. [0.007s][info ][gc,init] Memory: 16163M:表示JVM的总内存为16163兆字节(MB)。
  5. [0.007s][info ][gc,init] Large Page Support: Disabled:表示不支持大页(Large Page)。
  6. [0.007s][info ][gc,init] NUMA Support: Disabled:表示不支持NUMA(Non-Uniform Memory Access,非一致内存访问)。
  7. [0.007s][info ][gc,init] Compressed Oops: Enabled (Zero based):表示启用了压缩对象指针(Compressed Object Pointer),并且是基于零的索引。
  8. [0.007s][info ][gc,init] Heap Region Size: 2M:表示垃圾回收的一块区域的大小为2兆字节(MB)。
  9. [0.007s][info ][gc,init] Heap Min Capacity: 8M:表示堆的最小容量为8兆字节(MB)。
  10. [0.007s][info ][gc,init] Heap Initial Capacity: 254M:表示堆的初始容量为254兆字节(MB)。
  11. [0.007s][info ][gc,init] Heap Max Capacity: 4042M:表示堆的最大容量为4042兆字节(MB)。
  12. [0.007s][info ][gc,init] Pre-touch: Disabled:表示禁用预触摸(Pre-touch)。
  13. [0.007s][info ][gc,init] Parallel Workers: 13:表示并行工作线程的数量为13。
  14. [0.007s][info ][gc,init] Concurrent Workers: 3:表示并发工作线程的数量为3。
  15. [0.007s][info ][gc,init] Concurrent Refinement Workers: 13:表示并发整理工作线程的数量为13。
  16. [0.007s][info ][gc,init] Periodic GC: Disabled:表示禁用周期性垃圾收集(Periodic Garbage Collection)。
  17. [0.015s][info ][gc,metaspace] CDS archive(s) mapped at: [0x0000018e47000000-0x0000018e47bd0000-0x0000018e47bd0000), size 12386304, SharedBaseAddress: 0x0000018e47000000, ArchiveRelocationMode: 1.:表示CDS归档文件映射在地址范围[0x0000018e47000000-0x0000018e47bd0000-0x0000018e47bd0000),大小为12386304字节,共享基地址为0x0000018e47000000,归档重定位模式为1。
  18. [0.015s][info ][gc,metaspace] Compressed class space mapped at: 0x0000018e48000000-0x0000018e88000000, reserved size: 1073741824:表示压缩类空间映射在地址范围[0x0000018e48000000-0x0000018e88000000),保留大小为1GB。
  19. [0.015s][info ][gc,metaspace] Narrow klass base: 0x0000018e47000000, Narrow klass shift: 0, Narrow klass range: 0x100000000:表示窄类(Narrow Class)的基址为0x0000018e47000000,移位量为0,范围为从0x100000000到最大值。
目录
相关文章
|
6月前
|
并行计算 Java 程序员
深入解析JDK 8中的Lambda表达式:新特性的力量
本文将深入探讨JDK 8中引入的最引人注目的新特性之一:Lambda表达式。我们将详细解析Lambda表达式的概念、语法和用途,并通过实际示例展示如何利用Lambda表达式简化代码和提高编程效率。
|
6月前
|
存储 Java 数据管理
探秘JDK 10:崭新特性悉数解析
探秘JDK 10:崭新特性悉数解析
92 0
|
6月前
|
JSON 编解码 Java
Java升级:JDK 9新特性全面解析“
Java升级:JDK 9新特性全面解析“
158 0
|
1月前
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
130 1
|
4月前
|
监控 算法 Java
Java虚拟机垃圾收集机制深度解析
在Java的世界中,垃圾收集是确保内存管理高效运行的关键机制之一。本文将深入探讨Java虚拟机的垃圾收集机制,包括其工作原理、常见的垃圾收集算法以及调优实践。我们将基于最新的研究数据和实验结果,提供对垃圾收集器性能的比较分析,并讨论如何根据不同应用场景进行优化。通过逻辑严密的分析,我们旨在为Java开发者提供实用的指导,以帮助他们更好地理解和掌握这一关键技术。
|
5月前
|
存储 缓存 监控
JVM中G1垃圾收集器:原理、过程和参数配置深入解析
JVM中G1垃圾收集器:原理、过程和参数配置深入解析
|
6月前
|
缓存 自然语言处理 JavaScript
万字长文深度解析JDK序列化原理及Fury高度兼容的极致性能实现
Fury是一个基于JIT动态编译的高性能多语言原生序列化框架,支持Java/Python/Golang/C++/JavaScript等语言,提供全自动的对象多语言/跨语言序列化能力,以及相比于别的框架最高20~200倍的性能。
168709 12
|
5月前
|
Java Spring
深入解析Spring源码,揭示JDK动态代理的工作原理。
深入解析Spring源码,揭示JDK动态代理的工作原理。
59 0
|
6月前
|
监控 Java 开发者
JDK 9新特性深度解析:垃圾回收器的改进与优化
本文将深入探讨JDK 9中垃圾回收器的改进与优化。随着Java语言的不断发展,垃圾回收器作为内存管理的核心组件也经历了多次迭代和改进。JDK 9引入了新的垃圾回收器,旨在提高内存回收的效率和性能,降低垃圾回收的停顿时间。本文将详细介绍这些改进,以及如何在实际应用中利用这些改进来提高应用程序的性能和稳定性。
|
3天前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
15 2

推荐镜像

更多