JDK调优命令行工具 jps查看java进程的工具 参数 说明 -q 只输出进程ID -m 输出传递给Java进程(主函数)的参数 -l 输出主函数的完整路径 -v 显示传递给Java虚拟的参数 jstat查看Java程序运⾏时相关信 2022-02-17 JIT编译器优化 虚拟机针对JIT编译器做了很多优化,其中有几项比较重要且有代表性的优化措施 公共子表达式消除公共子表达式消除就是对一个表达式中重复计算的子表达式进行缓存替换。 例如一个表达式: int d = (c * b) * 12 + a + (a + 2022-01-15 解释器与编译器 方法执行过程Java中方法的执行由解释器解释执行,所谓解释执行就是针对方法的字节码逐行解释,逐行执行。 解释器进行解释执行虽然比较快,但热点代码没必要每次都重复解释,因此即时编译器将热点代码编译成机器码做个缓存,速度可以大大提升。 比如有一 2022-01-15 对象创建与内存分配 对象创建过程当我们执行以下代码时: Apple apple = new Apple(); 大致经过三个步骤: 堆内存中为Apple对象开辟一块空间 初始化对象(成员变量赋值等) apple变量指向堆内存中的Apple对象的地址 其中第 2021-12-22 常量池与String.intern()方法 常量池其实是一个统称,具体可以分为: class文件常量池,参考精通JVM(一):class文件详解 运行时常量池 字符串常量池 运行时常量池JDK1.7版本开始运行时常量池从方法区迁移到了堆中。 要了解运行时常量池,首先得从class 2021-12-20 运行时数据区 概述这部分是JVM中最为重要的部分。我们研究JVM主要的目的就是为了对JVM进行调优,本质上就是针对运行时数据区进行调优。 所谓运行时数据区,其实就是JVM对内存的使用 运行时数据区大致分为: 线程共享区域 方法区 堆 线程独享区域 2021-12-17 类加载器与双亲委派机制 类加载器分类类加载器主要有以下几种: 类加载器 加载范围 启动类加载器(Bootstrap ClassLoader) 1. 加载%JAVA_HOME%/lib下的jar包2. _Xbootclasspath参数指定路径的jar( 2021-11-27 类加载机制 类什么时候加载?当虚拟机启动时,会先加载main方法所在的主类 除此之外,以下几种情况将触发类加载: 调用类的静态方法 new对象 使用反射实例化对象 简单来说,就是需要用到类时就加载类 加载一个类时,如果其父类尚未加载,则会先加载父类 2021-11-25 class文件详解 class文件结构使用sublime text等可以查看16进制文件的工具,打开任意一个.class文件,可以看到如下内容: 其中大部分内容都是看不懂的,唯一能看懂的就是最开始的8个字母cafe babe,这个叫做“魔数”。 魔数是用来标 2021-11-17