`

【Java性能优化】栈上分配

    博客分类:
  • Java
 
阅读更多

环境:Windows10

Java版本:1.8

 

栈上分配是Java虚拟机提供的一种优化技术,基本思想是对于那些线程私有的对象(指的是不可能被其他线程访问的对象),可以将它们直接分配在栈上,而不是分配在堆上。分配在栈上的好处:可以在函数调用结束后自行销毁,而不需要垃圾回收器的介入,减轻GC压力,从而提升系统的性能

 

使用场景:对于大量的零散小对象,栈上分配提供了一种很好的对象分配策略,栈上分配的速度快,并且可以有效地避免垃圾回收带来的负面的影响,但由于和堆空间相比,栈空间比较小,因此对于大对象无法也不适合在栈上进行分配。

 

/**
 * @author: Chaser
 * @desc: 栈上分配示例
 * @date: Created in 2018/8/13 10:30
 */
public class OnStackTest {
    public static void main(String[] args) {
        long start = System.currentTimeMillis();
        for (int index = 0; index < 100000000; index++) {
            allocate();
        }
        long end = System.currentTimeMillis();
        System.out.println(end - start);
    }

    public static void allocate() {
        byte[] bytes = new byte[2];
        bytes[0] = 1;
        bytes[1] = 1;
    }
}

 

情况1:指定使用栈上分配(默认打开),-XX:+DoEscapeAnalysis表示启用逃逸分析,栈上分配依赖于JVM逃逸分析结果。

-server -Xmx10m -Xms10m 
-XX:+DoEscapeAnalysis -XX:+PrintGC
[GC (Allocation Failure)  2048K->854K(9728K), 0.0007680 secs]
[GC (Allocation Failure)  2902K->950K(9728K), 0.0008380 secs]
[GC (Allocation Failure)  2998K->1014K(9728K), 0.0007818 secs]
4

 

情况2:禁止使用栈上分配,-XX:-DoEscapeAnalysis表示禁用逃逸分析。

-server -Xmx10m -Xms10m 
-XX:-DoEscapeAnalysis -XX:+PrintGC 
......
[GC (Allocation Failure)  3026K->978K(9728K), 0.0005297 secs]
[GC (Allocation Failure)  3026K->978K(9728K), 0.0004023 secs]
[GC (Allocation Failure)  3026K->978K(9728K), 0.0002665 secs]
851

 

分享到:
评论

相关推荐

    4本高清中文版Java性能优化经典书籍

    Java性能优化是IT行业中至关重要的一个领域,尤其是在大型企业级应用和互联网服务中,高效的Java代码能够显著提升系统运行效率,降低服务器资源消耗。以下是对这四本经典书籍中的核心知识点的详细介绍: 1. **...

    Java 性能优化实战 21 讲

    在Java性能优化实战的21讲中,涵盖了Java开发中至关重要的性能调优技术,旨在提升应用程序的效率、稳定性和可扩展性。以下是对这些关键知识点的详细解析: 1. **JVM内存模型**:理解Java虚拟机(JVM)的内存结构是...

    java性能优化java性能优化

    Java性能优化是提升Java应用程序效率...以上只是Java性能优化的一部分内容,实际上还包括垃圾回收、内存泄漏检测、线程池管理、数据库连接优化等多个方面。深入理解和实践这些技巧,可以有效地提升Java应用的运行效率。

    Java性能优化的45个细节

    Java性能优化是提升系统效率的关键环节,涉及到代码编写、内存管理、并发处理等多个方面。以下是对"Java性能优化的45个细节"的详细解读: 1. **选择正确的数据结构**:根据业务需求,合理选用ArrayList、LinkedList...

    Java中堆内存与栈内存分配浅析

    ### Java中堆内存与栈内存分配浅析 #### 一、引言 在Java编程语言中,内存管理是一项至关重要的技术。程序运行时所使用的内存主要分为两类:堆内存(Heap Memory)和栈内存(Stack Memory)。理解这两种内存类型的...

    Java程序性能优化 让你的Java程序更快、更稳定pdf文档视频资源

    Java程序性能优化是每个开发人员都需要关注的重要领域,特别是在企业级应用中,高效稳定的Java程序能够带来显著的业务优势。本资源包含一个PDF文档和相关的视频教程,旨在帮助你提升Java程序的速度和稳定性。 首先...

    Java程序性能优化.rar

    - **逃逸分析**:通过逃逸分析优化栈上分配,减少内存分配。 5. **磁盘I/O和网络优化** - **流式操作**:使用BufferedReader、BufferedWriter等提高文件读写效率。 - **NIO**:非阻塞I/O可以提高网络通信性能,...

    Java程序性能优化.葛一鸣.2012.10.第1版

    《Java程序性能优化》是葛一鸣在2012年10月出版的第一版专著,这本书深入探讨了如何提升Java应用程序的运行效率和性能。在Java开发中,性能优化是一个关键领域,它涉及到代码的高效编写、内存管理、线程调度、数据库...

    Java性能优化

    ### Java性能优化关键知识点 #### 一、合理运用单例模式 **单例模式**是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。在Java性能优化中,合理使用单例模式可以带来以下优势: 1. **...

    Java性能优化技巧集锦.pdf

    标题所指的“Java性能优化技巧集锦”表明文档内容将围绕如何提升Java程序运行效率的各种技巧。从标题中我们可以推测,内容会涵盖Java的多个版本(如Java 1.1, Java 1.2, Java 1.3, Java 1.4, Java 1.5, Java 1.6, ...

    深入JVM系列-逃逸分析、同步省略、栈上分配、标量替换1

    总的来说,逃逸分析是JVM为了提升程序运行效率而采用的一种智能分析技术,它通过对对象的使用范围进行分析,实现同步优化、栈上分配和标量替换等策略,以减少不必要的同步开销和内存分配。理解并掌握逃逸分析,对于...

    Java性能优化技巧集锦

    【Java性能优化技巧集锦】 Java性能优化是一个关键的话题,对于提升应用程序的效率和响应速度至关重要。以下是一些通用和特定领域的性能优化技巧。 一、通用篇 1.1 不用 new 关键词创建类的实例 使用`new`创建...

    详解java堆和栈

    掌握这些基础知识有助于更好地理解和优化程序的性能。 在实际开发过程中,合理利用堆和栈的特点能够有效提升程序的运行效率和资源利用率。例如,在需要频繁创建和销毁对象的情况下,可以考虑使用栈来提高访问速度;...

    JAVA性能优化之路(一).docx

    Java性能优化是一个复杂而深入的主题,它涉及到多个层面,包括操作系统、Java应用程序、垃圾收集机制、数据库以及缓存等。本文将围绕这些方面展开,详细阐述优化策略和实践方法。 首先,性能诊断是优化的第一步。在...

    java 程序性能优化-pdf +源码

    它结合了理论与实践,不仅深入解析了Java性能优化的各种策略和技术,还提供了丰富的源代码实例,帮助读者更好地理解和应用这些知识。这本书特别适合初级到中级水平的Java程序员阅读,无论是在面试准备还是日常开发...

    实战JAVA虚拟机 JVM故障诊断与性能优化

    《实战JAVA虚拟机—JVM故障诊断与性能优化》是一本深入探讨Java虚拟机(JVM)技术的书籍,旨在帮助开发者和系统管理员诊断并优化JVM相关的性能问题。本书内容丰富,涵盖了大量的实践案例,使得即便是初学者也能理解...

    java性能的优化编程资料

    综上所述,Java性能优化涉及多个方面,从程序设计之初就应当考虑到性能问题。通过对程序设计模式、Java部署环境、应用程序实现以及硬件资源的合理配置,可以有效提升Java程序的性能。此外,持续监测和调整也是保持高...

    Java程序性能优化 让你的Java程序更快、更稳定

    在内存管理方面,了解Java的内存模型,包括堆内存、栈内存、方法区和本地方法栈,理解对象的生命周期和内存分配策略,可以帮助我们有效地控制内存消耗,防止内存泄漏。 日志和异常处理也是性能优化的一部分。合理的...

Global site tag (gtag.js) - Google Analytics