`

【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

 

分享到:
评论

相关推荐

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

    深入JVM系列-逃逸分析、同步省略、栈上分配、标量替换深入JVM系列-逃逸分析、同步省略、栈上分配、标量替换逃逸分析方法逃逸线程逃逸优化同步省略同步省略对性能影

    Android性能优化系列之内存优化

    在Java中,内存的分配是由程序完成的,而内存的释放是由垃圾收集器(GarbageCollection,GC)完成的,程序员不需要通过调用函数来释放内存,但也随之带来了内存泄漏的可能,上篇博客,我介绍了Android性能优化系列之...

    【JVM和性能优化】1.Java内存区域

    文章目录了解的必要性JVM历史JVM数据区域私有区共有区内存区域版本变化1.61.71.8元空间栈跟堆Java中的对象都是在堆中分配吗逃逸分析标量替换栈上分配同步消除JVM对象对象创建过程对象内存布局对象访问方式通过句柄...

    java虚拟机知识点整理

    虚拟机栈和本地方法栈区别 对象定位访问 垃圾收集器GC管理 虚拟机GC垃圾回收收集算法(内存回收方法论) 虚拟机GC垃圾回收收集器(内存回收具体实现) 对象内存分配 虚拟机性能监控与故障处理工具 内存溢出问题及调优 类...

    深入理解_Java_虚拟机 JVM_高级特性与最佳实践

    调优案例分析与实战 / 106 5.1 概述 / 106 5.2 案例分析 / 106 5.2.1 高性能硬件上的程序部署策略 / 106 5.2.2 集群间同步导致的内存溢出 / 109 5.2.3 堆外内存导致的溢出错误 / 110 5.2.4 外部命令导致系统...

    Java进阶教程解密JVM视频教程

    彻底分析 StringTable的相关知识与性能优化,掌握直接内存分配原理和释放手段。 * 在垃圾回收章节,不仅会介绍垃圾回收算法、分代垃圾回收机制,还会重点介绍 G1 垃圾回收器,辨析 Full GC 发生条件,jdk8以来对垃圾...

    Java虚拟机

    5.2.1 高性能硬件上的程序部署策略 5.2.2 集群间同步导致的内存溢出 5.2.3 堆外内存导致的溢出错误 5.2.4 外部命令导致系统缓慢 5.2.5 服务器JVM进程崩溃 5.2.6 不恰当数据结构导致内存占用过大 5.2.7 由...

    JAVA 堆栈内存分析

    如何调优JVM - 优化Java 虚拟机(大全+ 实例) 堆设置 -Xmx3550m :设置JVM 最大堆内存为3550M 。 -Xms3550m :设置JVM 初始堆内存为3550M。此值可以设置与-Xmx 相同,以避免每次垃 圾回收完成后JVM 重新分配内存。 ...

    java 面试题 总结

    内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的...

    Java项目源码_ssm_进销存管理系统.rar

    开发者可以根据自身需求对系统进行功能扩展、界面优化和性能优化等方面的改进,以满足不同场景的应用需求。 需要注意的是,在使用本资源前,需要具备一定的Java开发基础和SSM框架的使用经验,以便更好地理解和应用...

    java_jsp项目源码_移动ssh项目(struts+spring+hibernate+oracle)130222.rar

    移动SSH项目(Struts + Spring + Hibernate + Oracle)是一个基于Java Web技术栈的企业级应用,旨在为企业提供一个高效、灵活且可扩展的解决方案。项目采用了Struts2作为表现层框架,Spring作为依赖注入和管理的核心...

    Java经典入门教程pdf完整版

    的高度优化的Java运行时环境,包括寻呼机、移动电话、可视电话、数字机顶盒和汽车导 航系统。” JE是致丿于消费产品和嵌入式设备的开发人员的最佳选择。尽管早期人们对它看好而 且Java开发人员团体中的热衷人土也不少...

    Java并发编程(学习笔记).xmind

    这是一种两方栅栏,各方在栅栏位置上交换数据。 应用场景:当两方执行不对称的操作(读和取) 线程池 任务与执行策略之间的隐形耦合 线程饥饿死锁 运行时间较长的任务 设置线程池的大小 ...

    深入JVM内核 - 原理、诊断与优化

    栈分配及实例讲解 server与client模式 调试跟踪参数 介绍常用的JVM参数,包括内存分配、堆栈分配、虚拟机运行模式以及调试跟踪参数。 第四课 GC的算法和种类 引用计数 标记清除 复制算法 标记压缩 可触及性 本章是...

    超级有影响力霸气的Java面试题大全文档

    内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的...

    基于SSM的图书管理系统.zip

    性能优化:为了提高系统的性能和响应速度,本系统在以下方面进行了优化:采用缓存技术:利用Redis或Memcached等缓存技术,减轻数据库的压力,提高数据的读取速度。数据库优化:针对数据库表设计、索引策略等方面进行...

    java8集合源码分析-LearningNotes:Java笔记

    java8 集合源码分析 ...运行时数据区域、垃圾收集、内存分配机制、类加载机制、性能调优监控工具 Java 常见的 10 余种设计模式,全 23 种设计模式逐步更新 包含 Servlet & JSP、Spring、SpringMVC、My

    APP界面帧率测试结果

    在堆中分配的内存,由Java虚拟机的自动垃圾回收器(GC)来管理。 静态域(static field): 静态存储区域就是指在固定的位置存放应用程序运行时一直存在的数据,Java在内存中专门划分了一个静态存储区域来管理一些...

    医院住院管理系统(vue+ssm+mysql8)

    医院住院管理系统(Vue+SSM+MySQL8) 是为医疗机构设计的综合性住院管理平台,其核心目的是提高医院住院部门的工作效率,确保患者医疗信息的准确性与安全性,以及优化住院服务流程。该系统集患者信息管理、住院登记、...

Global site tag (gtag.js) - Google Analytics