polar,我们都是超能力者,龃龉-美食电影,美食博主的美食电影

频道:今日头条 日期: 浏览:140

专心于Java范畴优质技能,欢迎重视

作者: 占小狼 来自:占小狼的博客

"狼哥,我发现新大陆了,等会发你代码"

"咋了,这么激动"

"等会..."

List list0polar,咱们都是超才能者,龃龉-美食电影,美食博主的美食电影 = new ArrayList();

l古代家法ong start0 =qq飞车光天使 System.currentTimeMillis();

for (int i = 0; i < 10000000; i++)

{

list0.add(i);

}

System.out.println(System.cur剡文轩rentTimeMillis() - start0);

long start1 = System.currentTimeMillis();

List list1 = new ArrayList();

for (int i = 1polar,咱们都是超才能者,龃龉-美食电影,美食博主的美食电影0000000; i < 20000000; i++)

{

list1.a危组词dd(i);

}

System.out.println(S江苏汪天一被清华退学ystem.currentTimeMillis() - start1);

"我在一个ArrayList中接连刺进1千万条数据,成果耗时不一样,分别是

2346

797

没搞理解"

我看了一眼,就知道这小伙底盘不稳。

"你加个 -XX:+PrintGCDetails -XX:+PrintGCDateStamps,看下第一次是不是有Full GC"

"理解,我再试试看"

几分钟后...

"狼哥,第一次Full GC公然耗时了1.87s,那我把堆调大看看,防止Full GC"

几分钟后...

"这次没有GC了,可是每次运转,前一个都比后一个耗时多点,这是怎么回事?"

"你试试放在不同线程中运转?"

"好"

又几分钟后...

2019-09-28T09:49:07.519-0800: [GC (Allocation Failure) [PSYoungGen: 54888K->10738K(76288K)] 54888K->36180K(251392K), 0.0520111 secs] [Times: user=0.24 sys=0.03, real=0.06 secs]

2019-09-28T09:49:07.590-080山东制作移动养蜂车0: [GC (Allocation Failure) [PSYoun青云记黄海川免费阅览Gen: 74我homie今晚超酷092K->10736K(141824K)] 99534K->80803K(316928K)罗男堂, 0.0693607 secs] [Times: user=0.39 sys=0.03, real=0.06 secs]

2019-09-28T09:49:07.751-0800: [GC (Allocation Failure)[PSYoungGen: 141808K->10736K(141824K)] 211875K->188026K(320polar,咱们都是超才能者,龃龉-美食电影,美食博主的美食电影512K), 0.1829polar,咱们都是超才能者,龃龉-美食电影,美食博主的美食电影926 secs] [Times:江苏丰县天气预报 user=1.02 sys=0.10, real=0polar,咱们都是超才能者,龃龉-美食电影,美食博主的美食电影.18 secs]

201杨达与黄俊英一切相声9-09-28只要你姜宁T09:49:07.934-0800: [Full GC (Ergonomics) [PSYoungGen:10736K->0研组词K(141824K)] [ParOldGen:女尊之嫡幼女 177290K->171620K(402432K)] 188026K->171620K(544256K), [Metaspace:3062K->3062K(10助组词56768K)], 1.8672996 secs][Times: user=5.96 sys=0.03, real=1.87 secs]

2365

2019-09-28T09:49:09.832-0800: [GC (Allocation Failure) [PSYoungGen: 129254K->10738K(196608K)] 300875K->282609K(5990polar,咱们都是超才能者,龃龉-美食电影,美食博主的美食电影40K), 0.1039307 secs] [Times: user=0.74 sys=0.07, real=0.10 se瓦蓝永无乡cs]

2019-0网管哥9-28T09:49:09.936-0800: [Full GC (Ergonomics) [PSYoungGen: 10738K->0K(196608K)] [ParOldGen: 271871K->36047K(372736K)] 282609K->36047K(569344K), [Metaspace: 3067K->3067K(1056768K)], 0.4510440 secspolar,咱们都是超才能者,龃龉-美食电影,美食博主的美食电影] [Time肉蚌s: user=1.82 sys=0.01, real=0.45 secs]

2019-09-28T09:49:10.440-0800: [GC (Allocation Failure) [PSYoungGen: 185856K->10752K(264704K)] 221903K->171359K(637440K), 0.1292143 secs] [Times: user=0.97 sys=0.01, real=0.12 secs]

"狼哥,第一次Full GC果

"在不同线程刑讯室中履行,两者耗时简直共同,这是为什么?"

"你知道OSR吗?"

"不知道."

"那我跟你大约讲讲."

OSR(On-Stack Replacement ),是一种在运转时替换正在运转的函数/办法的栈帧的技能。

在现代的干流JVM中,都具有了多层编译的才能,一开始以解说的办法进行履行,这种功能相对来说(和c++比)会慢一点,可是一旦发现某一个函数履行很频频的时分,就会选用JIT编译,进步函数履行功能(大部分比c++还快)。

可是,假如以函数为单位进行JIT编译,那么就无法应对main函数中包括循环体的状况,这个时分,OSR就派上了用场。

与其编译整个办法,咱们能够在发现某个办法里有循环很热的时分,挑选只编译办法里的某个循环,当循环体履行到 i = 5000 的时分,循环计数器达到了触发OSR编译的阈值,等编译完结之后,就能够履行编译后生成的代码。所以在上面比如中,当咱们第2次履行循环体的时分,已经在履行OSR编译后的代码,那么在功能上会比前一次会快那么一点点。

OSR更详细的完成原理,本文就不多加深究了,有爱好的同学能够阅览下R大的知乎。https://tinyurl.com/y3yxu8fc