JVM
1.知识储备1.1分派定义:确定执行哪个方法的过程a.疑问有些读者会问,方法的执行不是取决于代码设置中的执行对象吗?为什么还要选择呢?b.回答若一个对象对应于多个方法时,就需要进行选择了读者应该都想到了Java中的特性:多态,即重写&重载。下面我会详细讲解。分类:静态分派&动态分派。下面我将详细讲解。1.2变量的静态类型&动态类型先看下面的代码publicclassTest{staticabstractclassHuman{}staticclassManextendsHuman{}staticclassW
jmap查看内存信息jmaphisto/pid>./log.txt:查看某一进程实例个数,占用内存的字节数,以及所属的类jmap-heap/pid:查看堆信息jmap‐dump:format=b,file=app.hprof/pid通过jvisualvm命令启动jvm可视化管理界面可导入dump文件进行分析:查看类的实例jstack分析死锁:写一段死锁代码publicclassDeadLockTest{privatefinalstaticObjectlock1=newObject();privatefin
1、JVM关闭(1)正常关闭所有非守护线程执行结束System.exit(0)ctrl+ckill-15SIGTERM信号(2)异常关闭RuntimeExcetionOOM(3)强制关闭kill-9SIGKILL信号Runtime.halt()断电系统关机系统crash2、实例publicvoidstart(){Runtime.getRuntime().addShutdownHook(newThread(){publicvoidrun(){try{LogService.this.stop();}catch
1.类加载机制分为加载、验证、准备、解析、初始化、使用、卸载。(1)加载在硬盘上查找并通过IO读入字节码文件,使用到类时才会加载,例如调用类的main()方法,new对象等等,在加载阶段会在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。(2)验证校验字节码文件的正确性。(3)准备给类的静态变量分配内存,并赋予默认值。(4)解析将符号引用替换为直接引用,该阶段会把一些静态方法(符号引用,比如main()方法)替换为指向数据所存内存的指针或句柄等(直接引用
1、魔数所有.class文件的前四个字节都是魔数,魔数的固定值为0xCAFEBABE。魔数放在文件的开头,JVM可以根据文件的开头判断这个文件是否有可能是.class文件。如果是这样的话,之后的操作会继续下去。2、版本号版本号为魔数后的4个字节,前2个字节显示下一个版本号,后2个字节显示主版本号。主版本号后的字节是常量池入口。在常量池中保存两种常量:字面量和符号引用。字面量在代码中声明为Final的常量值,符号引用类别和界面的全局限定名、字段的名称和说明符、方法的名称和说明符。常量池整体分为常量池计数器和
一.JVM内存区域划分JVM为什么要划分出这些区域呢?JVM内存是从操作系统里面申请过来的,而JVM就根据功能需求将这些划分成了一些小的模块,这样一块大的场地就可以划分成一些小的模块,然后每个模块就负责自己的功能就可以了,那接下来看看这些区域的功能到底是什么呢!1.程序计数器程序计数器是内存中最小的区域,这里面主要保存了下一条要执行的指令的地址在哪里(指令就是字节码,一般程序要运行,JVM就需要把字节码加载出来放到内存中,然后程序再把一条一条的指令从内存中取出来放到CPU上去执行,所以必须要记住当前执行到
1、指令系统说明JVM指令系统与其它计算机指令系统极为相似。同时,Java指令还包括操作码和操作数两部分。操作码是一个8位的二进制数字,操作码后面有一个操作数,其长度视需要而定。运算代码用来指定指令操作的性质(这里我们以汇编符号的形式来说明),例如iload表示从存储器中装入一个整数,anewarray表示为新的数组分配空间,iand表示两个整数的"与",ret表示过程控制,从对某个方法的调用中返回。超过8位长度时,操作数被划分为多个字节存储。对于这种情况,JVM采用了“bigendian”的编码方法,即
火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。






