<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      GraalVM & Spring Boot初體驗

      前言

      這兩天封在家里,一直在琢磨想去把這個博客項目改成微服務的形式。不過就目前而言我的服務器內(nèi)存放好幾個Java進程是吃不消的,原因在于一個獨立的JVM所占用的內(nèi)存資源太吃內(nèi)存。不過在云原生時代,使用容器化部署,每個服務單獨享受一整塊邏輯的內(nèi)存空間,實際上對Java是非常不利的。而且即便有的應用功能非常簡單,但是占用的內(nèi)存和功能完全不在一個量級,這可能也是Java常常為人詬病的一點。不過現(xiàn)在有了GraalVM,似乎一切都變得不一樣了。

      配置

      我下載的版本是GraalVM Community Edition 22.3.0,目前的最新版。大多數(shù)人其實更關心Spring項目如何整合這個JVM。根據(jù)官網(wǎng)配置,首先應該按照https://www.graalvm.org/22.3/docs/getting-started/macos/進行一些配置,接著在https://www.graalvm.org/22.3/reference-manual/native-image/下載GraalVM的一個組件Native Image:

      gu install native-image
      

      下載安裝完以后,其實配置就可以了。現(xiàn)在需要到Spring官網(wǎng)https://start.spring.io/去生成一個Demo,注意把GraalVM Native Support DEVELOPER TOOLS這個依賴給選上,最終我的依賴文件長這個樣子:

      plugins {
      	id 'org.springframework.boot' version '2.7.5'
      	id 'io.spring.dependency-management' version '1.0.15.RELEASE'
      	id 'java'
      	id 'org.springframework.experimental.aot' version '0.12.1'
      }
      
      group = 'com.example'
      version = '0.0.1-SNAPSHOT'
      sourceCompatibility = '17'
      
      repositories {
      	maven { url 'https://repo.spring.io/release' }
      	mavenCentral()
      }
      
      dependencies {
      	implementation 'org.springframework.boot:spring-boot-starter-web'
      	implementation 'org.springframework.boot:spring-boot-starter-aop'
      	implementation 'org.projectlombok:lombok:1.18.22'
      	annotationProcessor 'org.projectlombok:lombok:1.18.22'
      	testImplementation 'org.springframework.boot:spring-boot-starter-test'
      }
      
      tasks.named('test') {
      	useJUnitPlatform()
      }
      
      tasks.named('bootBuildImage') {
      	builder = 'paketobuildpacks/builder:tiny'
      	environment = ['BP_NATIVE_IMAGE': 'true']
      }
      

      也不需要你去做什么,基本都自動生成了。我這里用的Spring Boot版本是2.7.5。

      當GraalVM把項目構建完以后,在IDEA的Gradle插件的build下面選擇nativeCompile

      然后開啟漫長的編譯過程:

      編譯成功然后在build文件夾下就會有這么一個二進制可執(zhí)行文件demo:

      這個文件可以直接雙擊啟動:

      啟動用時52毫秒,非常的可以了。

      而內(nèi)存占用呢:

      不可能不心動。Java直接變成go了。

      補充

      如果需要在項目里使用動態(tài)代理,需要顯示指定需要代理的類,如:

      @SpringBootApplication
      @AotProxyHint(targetClass=com.example.demo.controller.TestController.class, proxyFeatures = ProxyBits.IS_STATIC)
      public class DemoApplication {
      
      	public static void main(String[] args) {
      		SpringApplication.run(DemoApplication.class, args);
      	}
      }
      
      

      本質(zhì)是對這個切面的配置:

      @Aspect
      @Component
      @Slf4j
      public class TestAspect {
      
          @Pointcut("execution(* com.example.demo.controller..*.*(..))")
          public void pt() {}
      
          @SneakyThrows
          @Before("pt()")
          public void before(JoinPoint jp) {
              log.info("java");
          }
      }
      
      

      不顯示聲明的話啟動會報錯。原因在于JVM的設計是一個開放的系統(tǒng),有些類是在運行時加載到虛擬機里的,這個就涉及了Java動態(tài)代理的原理。如果把程序編譯成二進制的文件脫離了JVM,就喪失了這種開放性,所以只能用這種沒有辦法的辦法將所有需要被代理的類枚舉式的聲明出來,在構建二進制文件的時候就把這些類提前的構建出來。

      posted @ 2022-11-06 16:56  imissinstagram  Views(2618)  Comments(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲精品国模一区二区| 人人妻人人澡人人爽人人精品av| 亚洲第一香蕉视频啪啪爽| 国产精品视频免费一区二区三区| 好男人社区影视在线WWW| 欧洲熟妇色xxxx欧美老妇多毛网站| 一区二区三区四区激情视频| 亚洲国产成人精品女久久| 日韩秘 无码一区二区三区 | 国产性色的免费视频网站| 国产永久免费高清在线| 国产成人精品亚洲资源| 免费看欧美全黄成人片| 永久免费av网站可以直接看的| 无码成人精品区在线观看| 亚洲护士一区二区三区| 粉嫩国产一区二区三区在线| 极品人妻少妇一区二区三区| 天堂va蜜桃一区二区三区| 人妻饥渴偷公乱中文字幕| 人妻中文字幕一区二区三| 久久精品午夜视频| 亚洲精品电影院| 亚洲一区二区三区18禁| av在线播放无码线| 资源新版在线天堂偷自拍| 人妻丰满熟妇av无码区| 中文字幕在线无码一区二区三区| 亚洲精品一区二区在线播| 亚洲婷婷综合色高清在线| 乱中年女人伦av三区| 国产一区二区一卡二卡| 精品精品亚洲高清a毛片| 中文字日产幕码三区国产| 国产在线中文字幕精品| 日本亚洲一区二区精品久久| 无人区码一码二码三码区| 国产福利酱国产一区二区| 国产专区一va亚洲v天堂| 人妻体内射精一区二区三区| 欧美一区二区三区欧美日韩亚洲|