
【JVM】
文章平均质量分 66
日常学习总结
玉成226
这个作者很懒,什么都没留下…
展开
-
JVM: JDK内置命令 - JPS
如果启动的是类则输出主类的全名称,如果是jar则出jar路径。输出通过文件传递给JVM的参数。只显示PID,不显示其他参数。输出传入main方法的参数。输出主类的全名或jar路径。输出传入JVM的参数。原创 2024-09-13 20:39:51 · 362 阅读 · 0 评论 -
JVM:JIT即时编译器
在Java中,JIT即时编译器是一项用来提升应用程序代码执行效率的技术。字节码指令被Java虚拟机解释执行,如果有一些指令执行频率高,称之为热点代码,这些字节码指令则被JIT即时编译器译成机器码同时进行一些优化,最后保存在内存中,将来执行时直接读取就可以运行在计算机硬件上。在HotSpot中,有三款即时编译器,C1、C2和Graal,其中Graal在GraalVM章节中已经介绍过。C1编译效率比C2快,但是优化效果不如C2.所以C1适合优化一些执行时间较短的代码,C2适合优化服务端程序中长期执行的代码。原创 2024-08-07 13:18:27 · 275 阅读 · 0 评论 -
JVM: 方法调用
invokestatic: 调用静态方法。invokespecial:调用对象的private方法、构造方法,以及使用super关键字调用父类实例的方法、构造方法、以及所实现接口的默认方法。invokevirtual:调用对象的非private方法。invokeinterface:调用接口对象的方法。invokedynamic:用于调用动态方法,主要应用于lambda表达式中,机制极为复杂了解即可。原创 2024-08-02 13:22:09 · 435 阅读 · 0 评论 -
JVM: 堆上的数据存储
标记字段相对比较复杂。在不同的对象状态(有锁、是否处理垃圾回收的标记中)下存放的内容是不同的,同时在64位(又分为是否开启指针压缩)、32位虚拟机中的布局都不同。原创 2024-07-31 13:30:32 · 355 阅读 · 0 评论 -
JVM:栈上的数据存储
Java虚拟机采用的是空间换时间方案,在栈上不存储具体的类型,只根据slot槽进行数据处理,浪费了一些内存空间但是避免不同数据类型不同处理方式带来的时间开销。同时,像long型在64位系统中占用2个slot,使用了16字节空间,但实际上在Hotspot虚拟机中,它的高8个字节没有使用,这样就满足了long型使用8个字节的需要。这里的内存占用,指的是堆上或者数组中内存分配的空间大小,栈上的实现更加复杂。boolean、byte、char、short在栈上是不是存在空间的浪费?原创 2024-07-30 14:02:06 · 350 阅读 · 0 评论 -
JVM: Non-numeric value found - int expected
原因:java版本不一致。原创 2024-07-22 16:33:54 · 736 阅读 · 0 评论 -
JVM:JavaAgent技术
在Java的世界中,除了Java编写的业务系统之外,还有一类程序也需要Java程序员参与编写,这类程序就是Java工具。诊断类工具,如Arthas、VisualVM等。开发类工具,如Idea、Eclipse。APM应用性能监测工具,如Skywalking、Zipkin等。热部署工具,如Jrebel等。原创 2024-07-20 20:58:22 · 512 阅读 · 0 评论 -
JVM:垃圾回收器演进
ZGC是一种可扩展的低延迟垃圾回收器。ZGC在垃圾回收过程中,STW的时间不会超过一豪秒,适合需要低延迟的应用。支持几百兆到16TB的堆大小,堆大小堆STW的时间基本没有影响。Shenandoah是由Red Hat开发的一款低延迟的垃圾收集器,Shenandoah并发执行大部分GC工作,包括并发的整理,堆大小对STW的时间基本没有影响。ZGC降低了停顿时间,能降低接口的最大耗时,提升用户体验。但是吞吐量不佳,所以如果Java服务比较关注OPS(每秒的查询次数)那么G1是比较不错的选择。原创 2024-07-20 19:14:50 · 536 阅读 · 1 评论 -
JVM:GraalVM
GraalVM是Oracle官方推出的一款高性能JDK,使用它享受比OpenJDK或者OracleJDK更好的性能。GraalVM的官网地址:https://www.graalvm.org/官方标语:Build faster,smaller,leaner applications。更低的CPU、内存使用率。原创 2024-07-20 18:43:14 · 439 阅读 · 0 评论 -
JVM:常用工具总结
优点:缺点:原创 2024-07-19 18:44:46 · 433 阅读 · 1 评论 -
JVM:MAT内存泄漏检测原理
MAT提供了称为支配树(Dominator Tree)的对象图。支配树展示的是对象实例间的支配关系。在对象引用图中,所有指向对象B的路径都经过对象A,则认为对象A支配对象B。支配树中对象本身占用的空间称之为浅堆(Shallow Heap)。支配树中对象的子树就是所有被该对象支配的内容,这些内容组成了对象的深堆(Retained Heap),也称为保留集(Retained Set)。深堆的大小表示该对象如果可以被回收,能释放多大的空间。原创 2024-07-18 20:34:30 · 516 阅读 · 0 评论 -
JVM:JVM调优-内存泄漏
在Java中如果不在使用一个对象,但是该对象依然在GC ROOT的引用链上,这个对象就不会被垃圾回收器回收,这种情况就称为内存泄漏。内存溢出绝大多数情况都是由堆内存泄漏引起的,所以后续没有特别说明则讨论的都是堆内存泄漏。但是产生内存溢出并不是只有内存泄漏这一种原因。原创 2024-07-17 14:03:09 · 557 阅读 · 0 评论 -
JVM: Class类中的方法总结
如果此元素上存在指定类型的注释,则返回true,否则返回false。这种方法主要是为了方便地访问标记注释而设计的。此方法返回的真值相当于:getAnnotation(annotationClass)!原创 2024-07-15 19:53:40 · 286 阅读 · 0 评论 -
JVM:垃圾回收器
为什么分代GC算法要把堆分成年轻代和老年代系统中的大部分对象,都是创建出来之后很快就不在使用可以被回收。老年代中会存放长期存活的对象,比如Spring的大部分bean对象,在程序启动之后就不会被回收。在虚拟机的默认设置中,新生代的大小要远小于老年代的大小。分代GC算法将堆分成年轻代和老年代的主要原因可以通过调整年轻代和老年代的比例来适应不同类型的应用程序,提高内存的利用率和性能。原创 2024-07-14 22:32:28 · 576 阅读 · 0 评论 -
JVM:自动垃圾回收
Java为了简化对象释放,引入了自动的垃圾回收(Garbage Collection简称GC)机制。通过垃圾回收器来对不再使用的对象完成自动的回收,垃圾回收器主要负责对堆上的内存进行回收。其他很多现代语言比如C#、Python、Go都拥有自己的垃圾回收器。原创 2024-07-13 23:39:35 · 575 阅读 · 0 评论 -
JVM:运行时数据区
程序计数器(Program Counter Register)也叫PC寄存器,每个线程会通过程序计数器记录当前要执行的字节码指令的地址。在加载阶段,虚拟机将字节码文件中的指令读取到内存之后,会将源文件中的偏移量转换成内存地址。每一条字节码指令都会拥有一个内存地址。在代码执行的过程中,程序计数器会记录下一行字节码指令地址。执行完当前指令之后,虚拟机的执行引擎根据程序计数器执行下一行指令。程序计数器可以控制程序指令的进行,实现分支、跳转、异常等逻辑。原创 2024-07-13 21:21:43 · 735 阅读 · 0 评论 -
JVM:类加载器
类加载器(ClassLoader)是Java虚拟机提供给应用程序去实现获取类和接口字节码数据的技术。类加载器只参与加载过程总的字节码获取并加载到内存这一部分。原创 2024-07-11 15:08:30 · 412 阅读 · 0 评论 -
JVM:SpringBoot TomcatEmbeddedWebappClassLoader
TomcatEmbeddedWebappClassLoader 是 Spring Boot 在其内嵌 Tomcat 容器中使用的一个类加载器(ClassLoader)。在 Spring Boot 应用中,当你选择将应用打包成可执行的 JAR 或 WAR 文件,并希望以内嵌的 Tomcat 服务器来运行这个应用时,TomcatEmbeddedWebappClassLoader 就扮演了关键角色。原创 2024-07-11 13:16:36 · 1325 阅读 · 0 评论 -
JVM:类的生命周期
类的生命周期描述了一个类加载、连接(验证、准备和解析)、初始化、使用、卸载的整个过程。加载(Loading)阶段第一步是类加载器根据类的权限定名通过不同的渠道以二进制的方式获取字节码信息。程序员可以使用Java代码扩展不同的渠道。类加载器在加载完类之后,Java虚拟机会将字节码的信息保存到方法区中。生成一个InstanceKlass对象,保存类的所有信息,里面还包含实现特定功能比如多态的信息。原创 2024-07-09 13:50:01 · 488 阅读 · 0 评论 -
JVM:字节码文件
魔数、字节码文件对应的Java版本号访问标识(public final等等)父类和接口。保存了字符串常量、类或接口名、字段名主要在字节码指令中使用。类的属性、比如源码的文件名内部类的列表等。当前类或接口声明的方法信息字节码指令。当前类或接口声明的字段信息。原创 2024-07-09 09:27:53 · 495 阅读 · 0 评论 -
JVM:介绍
JVM的全称为Java Virtual Machine,Java虚拟机。本质上是一个运行在计算机上的程序,职责是运行Java字节码文件。原创 2024-07-08 10:03:36 · 361 阅读 · 0 评论