国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 詳解jvm中的標(biāo)量替換

詳解jvm中的標(biāo)量替換

2020-09-30 00:30TomCoding Java教程

這篇文章主要介紹了詳解jvm中的標(biāo)量替換,幫助大家更好的理解和使用Java虛擬機,感興趣的朋友可以了解下

概述

通常在java中創(chuàng)建一個對象,大家都認為是在堆中創(chuàng)建。 在jdk6開始有逃逸分析,標(biāo)量替換等技術(shù),關(guān)于在堆中創(chuàng)建對象不再絕對。

關(guān)于標(biāo)量替換,通過以下幾點進行概述:

  1. 逃逸分析
  2. 標(biāo)量替換是什么
  3. 測試標(biāo)量替換

逃逸分析

逃逸分析是一種分析技術(shù),分析對象的動態(tài)作用域,供其他優(yōu)化措施提供依據(jù)。比如分析一個對象不會逃逸到方法之外或線程之外,其它優(yōu)化措施(棧上分配,標(biāo)量替換等)根據(jù)逃逸程度進行優(yōu)化。

逃逸分析示例

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class EscapeAnalysis {
  public Person p;
  /**
   * 發(fā)生逃逸,對象被返回到方法作用域以外,被方法外部,線程外部都可以訪問
   */
  public void escape(){
    p = new Person(26, "TomCoding escape");
  }
 
  /**
   * 不會逃逸,對象在方法內(nèi)部
   */
  public String noEscape(){
    Person person = new Person(26, "TomCoding noEscape");
    return person.name;
  }
}
 
static class Person {
  public int age;
  public String name;
  
  ... // 省略構(gòu)造方法
}

標(biāo)量替換是什么

標(biāo)量可以理解成一種不可分解的變量,如java內(nèi)部的基本數(shù)據(jù)類型、引用類型等。 與之對應(yīng)的聚合量是可以被拆解的,如對象。
當(dāng)通過逃逸分析一個對象只會作用于方法內(nèi)部,虛擬機可以通過使用標(biāo)量替換來進行優(yōu)化。
比如上述noEscape()方法中person對象只會在方法內(nèi)部,通過標(biāo)量替換技術(shù)得到如下偽碼:

?
1
2
3
4
5
6
7
8
/**
 * 不會逃逸,對象在方法內(nèi)部
 */
public String noEscape(){
  int age = 26;
  String name = "TomCoding noEscape";
  return name;
}

測試標(biāo)量替換

接下來我們通過對noEscape()方法進行測試,主要測試兩種場景:

  1. 不使用標(biāo)量替換
  2. 使用標(biāo)量替換

以下測試是在jdk8中運行(注jdk8默認是開啟逃逸分析,標(biāo)量替換技術(shù)的)

測試代碼如下:

?
1
2
3
4
5
6
7
8
9
10
void testEliminateAllocationsWithNoEscape() {
  int n = 100000000;
  long start = System.currentTimeMillis();
  EscapeAnalysis escapeAnalysis = new EscapeAnalysis();
  for (int i = 0; i < n; i++) {
    // noEscape()不會發(fā)生逃逸
    escapeAnalysis.noEscape();
  }
  System.out.println("耗時:" + (System.currentTimeMillis() - start));
}
  • 不使用標(biāo)量替換

jvm參數(shù)設(shè)置如下:

?
1
2
3
4
-Xms5m 最小堆內(nèi)存5M
-Xmx5m 最大堆內(nèi)存5M
-XX:+PrintGC  打印gc日志
-XX:-EliminateAllocations 關(guān)閉標(biāo)量替換優(yōu)化

運行后在我本機的耗時:3006毫秒,gc發(fā)生2000多次。

  • 使用標(biāo)量替換

將jvm參數(shù)設(shè)置如下:

?
1
2
3
4
-Xms5m 最小堆內(nèi)存5M
-Xmx5m 最大堆內(nèi)存5M
-XX:+PrintGC  打印gc日志
-XX:+EliminateAllocations 關(guān)閉標(biāo)量替換優(yōu)化

運行后在我本機的耗時:20毫秒,gc發(fā)生6次。

再來看看發(fā)生逃逸的對象使用標(biāo)量替換效果

測試代碼如下:

?
1
2
3
4
5
6
7
8
9
10
void testEliminateAllocationsWithEscape() {
  int n = 100000000;
  long start = System.currentTimeMillis();
  EscapeAnalysis escapeAnalysis = new EscapeAnalysis();
  for (int i = 0; i < n; i++) {
    // escape()發(fā)生逃逸
    escapeAnalysis.escape();
  }
  System.out.println("耗時:" + (System.currentTimeMillis() - start));
}

將jvm參數(shù)設(shè)置如下:

?
1
2
3
4
-Xms5m 最小堆內(nèi)存5M
-Xmx5m 最大堆內(nèi)存5M
-XX:+PrintGC  打印gc日志
-XX:+EliminateAllocations 關(guān)閉標(biāo)量替換優(yōu)化

運行后在我本機的耗時:3705毫秒,gc發(fā)生2000多次。

總結(jié)

  1. 可以看到通過逃逸分析與標(biāo)量替換技術(shù)有效的減少了gc次數(shù)(減少了對象在堆中創(chuàng)建的數(shù)量)。
  2. 實際編碼過程中避免對象逃逸情況是一種理想的情況。可以形成一種編碼意識,盡量去減少對象逃逸。

思考

標(biāo)量替換只是利用逃逸分析其中的一種優(yōu)化措施, 還有其它優(yōu)化措施嗎?

以上就是詳解jvm中的標(biāo)量替換的詳細內(nèi)容,更多關(guān)于jvm 標(biāo)量替換的資料請關(guān)注服務(wù)器之家其它相關(guān)文章!

原文鏈接:https://juejin.im/post/6877004782130151438

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久av资源 | 久久久精品日本 | 欧美精品在线一区 | 欧美a级网站 | 日韩电影免费在线观看中文字幕 | 日韩在线精品强乱中文字幕 | 超碰人人操 | 亚洲成人一区二区三区四区 | 亚洲欧美激情精品一区二区 | 亚洲免费在线视频 | 成人自拍视频 | 久久久精品网 | 狠狠操综合网 | 黄色短视频在线观看 | 久久国产综合 | 亚洲激情在线 | 欧美一区二区公司 | 福利视频一区二区三区 | 久久这里只有精品久久 | 国产综合视频 | 日韩视频在线一区二区 | 91精品国产综合久久久久久丝袜 | 国产精品久久电影观看 | 99久久精品免费看国产一区二区三区 | 免费久草 | 日韩欧美网 | 一区二区三区高清不卡 | 国产在线综合网 | 黄色片小视频 | 欧美久久精品 | 久久综合久久综合久久综合 | 国产成人黄色 | 国产精品二区一区二区aⅴ污介绍 | 蜜桃av一区 | 国产精品亚洲一区二区三区在线 | 欧美一性一交 | 黄色av免费在线播放 | 精品天堂 | 黄色片视频免费看 | 亚洲男人的天堂网站 | 天天曰夜夜操 |