JVM查看字节码信息、GC及分类

本文详细解析了Java虚拟机(JVM)的字节码信息及执行流程,深入探讨了GC(Garbage Collection)原理,包括新生代与老年代比例配置、对象存活判断策略,以及四种主流GC算法:标记-清除、复制、标记-整理和分代收集,并分析了各自的优缺点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、字节码信息

代码执行流程
在这里插入图片描述

package com.ruozedata.jvm;

public class JvmDemo {
    public static void main(String[] args) throws InterruptedException {
        System.out.println("zuozedata");

        Thread.sleep(100000);
    }
}

javap -c JvmDemo.class
javap -verbose -c JvmDemo.class 打印附加信息,比如#1 #2 是什么意思

Compiled from "JvmDemo.java"
public class com.ruozedata.jvm.JvmDemo {
  public com.ruozedata.jvm.JvmDemo();  //构造器
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void main(java.lang.String[]) throws java.lang.InterruptedException;
    Code:
       0: getstatic     #2                  // Field java/lang/System.out:Ljava/io/PrintStream;
       3: ldc           #3                  // String zuozedata
       5: invokevirtual #4                  // Method java/io/PrintStream.println:(Ljava/lang/String;)V
       8: return
}

2、GC和分类

在这里插入图片描述
-XX:SurvivorRatio=8
默认值8
新生代Eden S0和S1的比例

-XX:NewRatio=2
新生代和老年代的占比

-XX:MaxTenuringThrshold=15
默认是15,GC的最大年龄
如果是0,表示不经过新生代,直接接入老年代

JMM重点做了什么?
原子性,一致性,还有可见

哪些对象会被GC
1 ) 引用计数
操作对象肯定要引用,引用存在栈里面
就是引用,被其他引用使用了一次,就计数一次
2)枚举根节点可达性分析
在这里插入图片描述

堆区GC算法的了解

1、标记-清除 Mark-Sweep
						标记: 就是GC Roots开始找==>存活的对象,标记下
						清除: 将没有标记的对象全部干掉
						
						但是有很多内存碎片
2、复制	Copy
						把内存划分成两个区域,在任意的时间点只有一个是活动的
						GC线程会将活动区域的存活对象全部复制到空闲区域,而且内存地址是排序的
						新生代GC用得比较多	
						
						浪费内存,速度快,没有内存碎片		
									
3、标记-整理 	Mark-Compact
						标记:就是GC Roots开始找==>存活的对象,标记下
						整理:会把活的,内存地址进行排序
						
						耗时间,性能较低
4、分代	
						前面三者的综合使用
						新生代:复制
						老年代:标记清除/标记整理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值