有资源网

搜索
有资源网 首页 编程语言 查看内容

【深入浅出-JVM】(7):栈上分配

2019-7-26 01:04| 发布者: admin| 查看: 187| 评论: 12

摘要: 概念 对那些作用于不会逃逸出方法的对象,在分配内存时,不在将对象分配在堆内存中,而是将对象属性打散后分配在线程私有栈内存上,如许随着方法调用竣事,栈上分配打散的对象也被采取掉,不在增长 GC 额外压力。 Ja

概念

对那些作用于不会逃逸出方法的对象,在分配内存时,不在将对象分配在堆内存中,而是将对象属性打散后分配在线程私有栈内存上,如许随着方法调用竣事,栈上分配打散的对象也被采取掉,不在增长 GC 额外压力。

Java 对象分配流程

编程语言-免费yoqq【深入浅出-JVM】(7):栈上分配yoqq资源(1)

示例

循环创建1000000000一个对象,制止栈上分配

栈上分配条件:开启逃逸分析 & 开启标量替换

JVM 参数:

  • 弃用逃逸分析(不答应判定对象是否可以逃逸出函数体)

-server -Xmx10m -Xms10m -XX:-DoEscapeAnalysis -XX:+PrintGC

利用 server 模式弃用逃逸分析(-server -XX:-DoEscapeAnalysis),设置堆空间巨细10m,初始空间10m,打印 GC 日志

  • 弃用标量替换(不答应对象打散分配到栈上)

-server -Xmx10m -Xms10m -XX:+PrintGC -XX:-EliminateAllocations

以上二选一

代码:


package com.mousycoder.mycode.happy_jvm;



/**

 * @version 1.0

 * @author: mousycoder

 * @date: 2019-06-11 16:55

 */

public class OnStackTest {



    public static class User{

        public int id = 0;

        public String name = "";

    }



    public static void alloc(){

        User u = new User();

        u.id = 5;

        u.name = "mousycoder";

    }



    public static void main(String[] args) {

        long b = System.currentTimeMillis();

        for (int i = 0; i < 1000000000; i++) {

            alloc();

        }



        long e = System.currentTimeMillis();

        System.out.println(e-b);

    }

}




输出:


[GC (Allocation Failure) 7651K->5603K(9728K), 0.0003680 secs]

[GC (Allocation Failure) 7651K->5603K(9728K), 0.0003829 secs]

[GC (Allocation Failure) 7651K->5603K(9728K), 0.0003809 secs]

[GC (Allocation Failure) 7651K->5603K(9728K), 0.0003731 secs]

[GC (Allocation Failure) 7651K->5603K(9728K), 0.0003286 secs]

VisualGC:

编程语言-免费yoqq【深入浅出-JVM】(7):栈上分配yoqq资源(2)

分析:

本次发生的是 Minor GC,发生 GC 的缘故原由是堆空间没有合适的区域可以或许存放数据结构导致的,堆从7651K 采取到 5603K,


感谢您的耐心阅读,如果您发现文章中有一些没表述清晰的,大概是不对的地方,请给我留言,您的鼓励是作者写作最大的动力。

作 者 : @mousycoder

原文出处 : http://mousycoder.com/thinking-in-jvm/7/


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

路过

雷人

握手

鲜花

鸡蛋

相关阅读

发表评论

最新评论

引用 yoqq 2020-11-26 22:47
转发了!!
引用 郑明明抗皱 2020-11-26 22:47
顶一下!!
引用 DonaldVaw 2020-11-26 22:47
牛逼!!
引用 林志玲 2020-11-26 22:47
不错!!
引用 林志玲 2020-11-26 22:47
支持!!!
引用 朴信惠 2020-11-26 22:47
不错呀!!
引用 wenguzi 2020-11-26 22:47
你好棒!!
引用 陈学冬 2020-11-26 22:47
你历害!!
引用 yoqq 2020-11-26 22:47
赞!赞!!
引用 ascascasc 2020-11-26 22:47
非常好!!
引用 郭德纲 2020-11-26 22:47
太棒了!!
引用 DonaldVaw 2020-11-26 22:47
沙发!!

查看全部评论(12)