首页 > 其他分享 >JVM初了解

JVM初了解

时间:2023-12-20 13:00:11浏览次数:35  
标签:Eden Survivor 存活 XX 了解 GC JVM

一、JVM常用启动参数说明

  1. - 开头为标准参数,所有的 JVM 都要实现这些参数,并且向后兼容,如 -server。

  2. -D 设置系统属性,如 -Dfile.encoding=UTF-8。

  3. 以 -X 开头为非标准参数,基本都是传给 JVM 的,默认 JVM 实现这些参数的功能,但是并不保证所有 JVM 实现都满足,且不保证向后兼容。可以使用 java -X 命令来查看当前 JVM 支持的非标准参数,如 -Xmx8g。

  4. 以 –XX:开头为非稳定参数, 专门用于控制 JVM 的行为,跟具体的 JVM 实现有关,随时可能会在下个版本取消。-XX:±Flags 形式, ± 是对布尔值进行开关,如 -XX:+UseG1GC。-XX:key=value 形式, 指定某个选项的值,如 -XX:MaxPermSize=256m。

  5. 常用options。

    -server:jvm启用server模式,启动慢,运行性能和内存管理效率高,适用于生产环境。64位jdk默认此模式忽略-client。

    -client:jvm启用client模式,启动快,运行时性能和内存管理效率不高。

    -Xms:设置JVM的初始堆内存大小,可直接和Xmx值一样。

    -Xmx:设置JVM的最大堆内存大小,推荐内存50%-80%。

    -Xss:设置每个线程的栈大小。

    --Xmn:设置新生代的初始大小,等价于 -XX:NewSize,使用 G1 垃圾收集器 不应该 设置该选项,在其他的某些业务场景下可以设置。官方建议设置为 -Xmx 的 1/2 ~ 1/4。优先级高于-XX:NewRatio。
    -XX:NewRatio:老年代和新生代比例,默认2。

    -XX:SurvivorRatio:设置Eden区和Survivor区的比例,默认8。Survivor有两个。

    -XX:+UseParallelGC:使用并行垃圾回收器。
    -XX:+UseConcMarkSweepGC:使用并发标记清除垃圾回收器。
    -verbose:gc:打印GC日志信息。

    -XX:+UseG1GC:使用 G1 垃圾回收器

    -XX:+UseConcMarkSweepGC:使用 CMS 垃圾回收器

    -XX:+UseSerialGC:使用串行垃圾回收器,JVM默认,般适用于小型应用和单处理器,算法比较简单,GC效率也比较高,但可能会给应用带来停顿。

    -XX:+UseParallelGC:使用并行垃圾回收器,多个线程并行执行GC,一般适用于多处理器系统中,可以提高GC的效率,但算法复杂,系统消耗较大。(配合使用: -XX:ParallelGCThreads=8,并行收集器的线程数,此值最好配置与处理器数目相等)

    XX:MetaspaceSize: 元空间的初始大小是21M,如果启动后GC过于频发,可以设置的大一些,一般设置的是256M

    -XX:MaxMetaspaceSize: 元空间的最大值默认是无限大,一般设置与-XX:MetaspaceSize大小一样。
    ......

二、GC相关

堆内存=新生代+旧生代/老年代+永久区

新生代:主要用来存储新创建的对象,内存较小,垃圾回收频繁。这个区又分为三个区域:一个 Eden Space 和两个 Survivor Space。

新生代区域采用复制算法

  1. 堆新对象处理,进入年轻代(Eden Space)
  2. Eden 100%执行Minor GC。
  3. Eden存活对象大于Survivor空间,则存活的对象直接进入老年代,Eden回收。
  4. Eden存活对象不大于Survivor空间,存活对象直接进入Survivor区域,Eden回收。下一次直接清理Eden和Survivor,Eden存活对象则进入另一个Survivor区域。
  5. 如果每次Survivor区域仍有存活,或者Eden存活+Survivor存活大于Suvivor空间,则统一进入老年代。
  6. 每次Minor GC执行前都会检查老年代空间,如果Eden存活在老年代放不下了,则会先执行Full GC,在Minor GC,Eden存活再进入老年代。

jvm优化,减少Full GC频率,多在新生代空间轮转。

Minor GC 和 Full GC

Minor GC:新生代 GC,指发生在新生代的垃圾收集动作,因为 Java 对象大多死亡频繁,所以 Minor GC 非常频繁,一般回收速度较快。

Full GC:老年代 GC,也叫 Major GC,速度一般比 Minor GC 慢 10 倍以上。

标签:Eden,Survivor,存活,XX,了解,GC,JVM
From: https://www.cnblogs.com/flywing/p/17916280.html

相关文章

  • 《深入浅出Java虚拟机:JVM原理与实战》
    ......
  • 深入了解Git LFS:高效管理大型文件的利器
    今天在使用CodeUp上传代码时,我为项目添加了一个大小超过300MB的文件。在进行push操作时,系统提示我“推送失败,以下文件大小超过单文件200MB的系统限额,大文件请使用Git-LFS管理”。于是我开始了解GitLFS。对于需要处理大型二进制文件的项目而言,Git的性能可能成为一个瓶颈。为了解决......
  • 使用jvm工具排查系统问题
    java-jvm-toolJstatd远程连接(推荐)不用重启项目远程机配置[demo@localhost jvmtest]$ vi jstatd.all.policy# 内容grant codebase "file:/home/demo/jdk1.8.0_171/lib/tools.jar" {permission java.security.AllPermission;};#IP为远程机外网IP(必须配置ip地址)[demo@l......
  • Windows 了解一下Windows
    运行1.“运行”这个软件是windows里面经常要用到的工具,它可以通过一些程序的名称快速打开管理程序,以下是常用管理程序,如果你觉得你的记忆能力足够好的话,可以进入C:\windows\system32里面找找所有管理软件并记住他们的名称,然后在运行里面直接使用名称就可以快速打开。taskmg......
  • JVM详解
    1.JVM由那些部分组成,运行流程是什么?JVM是什么好处:一次编写,到处运行自动内存管理,垃圾回收机制思考:JVM由哪些部分组成,运行流程是什么?从图中可以看出JVM的主要组成部分ClassLoader(类加载器)RuntimeDataArea(运行时数据区,内存分区)ExecutionEngine(执行引擎)NativeMethodLibrary(本地......
  • 一篇文章带你了解Python之Selenium自动化爬虫
    Python之Selenium自动化爬虫0.介绍Selenium是一个Web的自动化测试工具,最初是为网站自动化测试而开发的,Selenium可以直接运行在浏览器上,它支持所有主流的浏览器(包括PhantomJS这些无界面的浏览器(2018年开发者说暂停开发,chromedriver也可以实现同样的功能)),可以接收指令,让浏览器自动加......
  • 成熟且专业的内外网文件交换系统,了解一下!
    近年来全球网络安全威胁态势的加速严峻,使得企业对于网络安全有了前所未有的关注高度。越来越多的企业在网络安全体系建设和日常工作中,都面临一个核心问题,如何保护企业核心数据资产?绝大多数企业都在内部实施了网络隔离,隔离成内外网,互联网与内网,生产网与办公网,办公网与研发网等等,......
  • JVM基础篇(二)-JVM结构-类加载子系统
    类加载器子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识(CAFEBABE)。ClassLoader只负责class文件的加载,至于它是否可以运行,则由执行引擎(ExecutionEngine)决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方......
  • 简单了解 Maven,其实这一篇就够了!
    一、MavenMaven是什么?Maven是一个跨平台的项目管理工具。作用:基于Java平台的项目的构建、依赖包管理和项目信息管理对项目提供一种依赖配置,配置好的项目,Maven会自动从我们设置的仓库中下载和管理jar包Maven也提供了一种标准的项目目录结构,通过这种约定,大大减少了不同项目的学习成......
  • JVM虚拟机系统性学习-对象的创建流程及对象的访问定位
    对象的创建流程与内存分配对象创建流程如下:Java中新创建的对象如何分配空间呢?new的对象先放Eden区(如果是大对象,直接放入老年代)当Eden区满了之后,程序还需要创建对象,则垃圾回收器会对Eden区进行垃圾回收在垃圾回收的时候,会将Eden区的幸存对象转移到SurvivorFrom区如果再......