目 录CONTENT

文章目录

JVM虚拟机零散知识梳理

FatFish1
2025-03-19 / 0 评论 / 0 点赞 / 47 阅读 / 0 字 / 正在检测是否收录...

字节码常用指令和语法

怎么使用idea查看字节码

使用视图-show bytecode功能可以查看字节码

常量池

#符号引用类的常量池,可以得到他们的定义在Constant pool部分

Constant pool: 
#1 = Methodref   #6.#15   // java/lang/Object."<init>"()V 
#2 = Fieldref   #16.#17  // 
= String    #18   // Hello World! 
#4 = Methodref   #19.#20  // java/io/PrintStream.println:(Ljava/lang/String;)V 
#5 = Class    #21   // Main 
#6 = Class    #22   // java/lang/Object 
#7 = Utf8    <init> 
#8 = Utf8    ()V 
#9 = Utf8    Code 
#10 = Utf8    LineNumberTable 
#11 = Utf8    main 
...

创建对象

看一个创建对象的字节码案例:

public class MyTest {
    public static void main(String[] args) {
        Object o = new Object();
    }
}

0 new #2 <java/lang/Object>
3 dup
4 invokespecial #1 <java/lang/Object.<init> : ()V>
7 astore_1
8 return
  • new语句代表引用object常量池#2的创建方法。申请内存空间,还没初始化

  • dup是一个操作数栈管理指令,负责复制栈顶(注意,这个栈指的是操作数栈)一个或者两个数值并将复制值或双份的复制值重新压人栈顶。简单理解就是给操作数栈栈顶的元素弄了一个备份。

  • invokespecial调用#1的初始化元素,将Object进行初始化,如果构造函数有内容在此时执行。java编译器编译出来的字节码都会有invokespecial,通过其他方式产生的则不一定。

  • astore_1将o和new Object建立关联

JVM参数

-D、-X、-XX的区别

  • -D表示是JVM的标准选项,我们可以通过它设置系统属性

  • -X:可以输出有关非标准选项的帮助信息,例如-Xms和-Xmx

  • -XX:用于开发者调整JVM的行为、性能或输出调试信息等,有布尔值类型和带参数类型

    • 布尔值类型可以使用+或-表示true或false,例如-XX:-OmitStackTraceInFastThrow为禁用JVM隐藏堆栈

    • 带参选项的一般需要设置相应值,例如-XX:TreadStackSize=256k

常用的JVM参数

  • 最大/最小内存、栈空间:三个最常用的调优选项,同时是本地调测控制内存的好帮手

    • -Xmx-Xms:堆内存分配大小,当配置相同时,可以限制堆内存扩展,例如-Xmx8192m -Xms1024m

    • -Xss:配置虚拟机栈设置单个线程栈的大小, 一般默认为512K~1024K,例如-Xss105k

  • -XX:MaxPermSize:方法区分配内存大小

  • -XX:+/-UseTLAB:多线程并发申请内存场景,是否使用本地线程分配缓存

  • -XX:FieldsAllocationStyle:对象实例数据的存储策略,默认策略是将相同宽度的对象放到一起存放

  • -XX:CompactFields:对象实例数据存储时,允许长度短的对象在长的对象之间插空,默认true

  • -XX:ThreadStackSize:与-Xss参数功能一致

  • -XX:PermSize-XX:MaxPermSize:jdk8以前使用永久代,这两个参数配置永久代大小

  • -XX:MaxMetaspaceSize:jdk8用元空间代替永久代。配置元空间最大值,默认-1,即上限为内存

  • -XX:MetaspaceSize:jdk8指定元空间的初始空间大小,以字节为单位,达到该值会触发GC,同时收集器会对该值调整,如果释放了大量空间会降低该值,如果释放了很少空间,在不超过最大元空间上限的前提下适当提高。

  • -XX:MinMetaspaceFreeRatio:控制垃圾收集之后最小的元空间剩余容量百分比,控制垃圾回收频率

  • -XX:MaxMetaspaceRatio:用于控制垃圾回收后元空间剩余容量百分比。

  • -XX:MaxDirectMemorySize:指定直接内存容量上限,不指定默认与-Xmx一致

  • -Xnoclassgc:控制方法区的类是否能被回收

  • -XX:+ThreadClassLoading:product版虚拟机可用,查看类加载和卸载信息

  • -XX:+TraceClassUnLoading:FastDebug版虚拟机可用,也是查看类加载和卸载信息

  • -XX:-OmitStackTraceInFastThrow:jvm堆栈隐藏,这个参数默认打开,打开后报错多次的异常不输出堆栈,使用-XX:-可以关闭这个选项

  • -XX:HeapDumpPath=/tmp系统内存输出

0

评论区