文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

面试官:什么是JIT、逃逸分析、锁消除、栈上分配和标量替换?

2024-11-30 02:06

关注

JVM(Java 虚拟机)优化手段是指在运行 Java 程序时,通过对字节码的编译和执行过程进行优化,以提升程序的性能和效率。

JVM 优化手段主要有以下几个:

  1. 栈上分配:如果编译器可以确定一个对象不会逃逸出方法,它可以将对象分配在栈上而不是堆上。在栈上分配的对象在方法返回后就会自动销毁,不需要进行垃圾回收,提高了程序的执行效率。
  2. 锁消除:如果对象只在单线程中使用,那么同步锁可能会被消除,提高程序性能。
  3. 标量替换:将原本需要分配在堆上的对象拆解成若干个基础数据类型存储在栈上,进一步减少堆空间的使用。

1、JIT优点和热点代码

JIT 优点包含以下两个:

什么是热点代码?

在 HotSpot 虚拟机中,热点代码(Hot Code)是指那些被频繁执行的代码。热点代码的执行次数在不同的 JDK 版本和不同的 JVM 中是不同的,例如,它在 JDK 21 Client 模式下为 1500 次,Server 模式下为 10000 次,这个值可以通过 JVM 参数设置。通常来说,热点代码的识别基于以下两种策略:

可以使用 java -XX:+PrintFlagsFinal -version 命令查看 JVM 默认配置。

2、栈上分配 VS 标量替换

栈上分配和标量替换是编译器的两种优化技术,它们虽然有一些相似之处,但并不完全相同。

也就是说栈上分配,只是将对象从堆上分配到栈上了;而标量替换是更进一步的优化技术,将对象拆解成基本类型分配到栈上了。

(1)锁消除代码演示

锁消除(Lock Elimination)也叫做同步消除,是一种编译器优化技术,它可以消除对于变量的不必要的锁定操作。锁消除的目的是减少锁的开销,提高程序的性能。例如以下代码:

public void method() {
    Object lock = new Object();
    synchronized(lock){
        System.out.println("www.javacn.site");
    }
}

而锁消除之后的代码如下:

public void method(){
    System.out.println("www.javacn.site");
}

(2)标量替换代码演示

未优化前的代码如下:

private static class Point {
    private int x;
    private int y;
}
public static void main(String[] args) {
    Point point = createPoint(10, 20);
    int sum = point.x + point.y;
    System.out.println("Sum: " + sum);
}
private static Point createPoint(int x, int y) {
    Point point = new Point();
    point.x = x;
    point.y = y;
    return point;
}

标量替换优化后的代码如下:

public static void main(String[] args) {
    int x = 10;
    int y = 20;
    int sum = x + y;
    System.out.println("Sum: " + sum);
}

通过逃逸分析的优化能够减少垃圾回收的压力、减少内存分配和释放带来的性能损耗,并且有可能减少对锁的依赖,以及实现标量替换等,从而整体上提升了应用程序的运行效率。

来源:Java中文社群内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯