java8中方法区的内存大小如何设置_从Java8升级到Java11
奇技 · 指南
為什么選擇Java11?
容器環(huán)境支持,GC等領(lǐng)域的增強,僅通過切換到 Java 11 就有 16% 的改進。
進行了瘦身,更輕量級,安裝包體積小。
JDK11 是一個長期支持版。
1Java11相對于Java8的一些新特性
1.變量類型推斷
Var關(guān)鍵字:新版Java引入全新的類型關(guān)鍵字var,用var來定義的變量像python一樣不用寫具體類型,編譯器能根據(jù)實際賦值來自動推斷變量的類型
2.普通局部變量
3.For循環(huán)中使用
4.Var結(jié)合泛型
注意:var不能在類成員變量類型和方法返回值類型使用
5.增強api
6.String 增強
新版本增加了一些更方便的字符串處理的API7.集合增強
增加了一些更加方便的創(chuàng)建和復(fù)制集合類型的API
● of() @since 9
● copyOf() @since 10
8.Stream增強
Java 8 中的流已經(jīng)很強大了,而且只要涉及到 IO,只要涉及到對一系列數(shù)據(jù)進行操作,都會用到流。當(dāng)然了,Java 9對其操作繼續(xù)增強,這次的改進主要是如何設(shè)置停止流的條件上。為此在流的實例上提供了四個方法 takeWhile(Predicate Interface) 、iterate 、ofNullable 和 dropWhile(Predicate Interface)
2
HTTP Client API
新版jdk官方自帶httpClient,支持發(fā)送同步、異步的http請求完全支持Linux容器(包括docker)
許多運行在Java虛擬機中的應(yīng)用程序(包括Apache Spark和Kafka等數(shù)據(jù)服務(wù)以及傳統(tǒng)的企業(yè)應(yīng)用程序)都可以在Docker容器中運行。但是在Docker容器中運行Java應(yīng)用程序一直存在一個問題,那就是在容器中運行JVM程序在設(shè)置內(nèi)存大小和CPU使用率后,會導(dǎo)致應(yīng)用程序的性能下降。這是因為Java應(yīng)用程序沒有意識到它正在容器中運行。隨著Java 10的發(fā)布,這個問題總算得以解決,JVM現(xiàn)在可以識別由容器控制組(cgroups)設(shè)置的約束。可以在容器中使用內(nèi)存和CPU約束來直接管理Java應(yīng)用程序,其中包括:
● 遵守容器中設(shè)置的內(nèi)存限制
● 在容器中設(shè)置可用的CPU
● 在容器中設(shè)置CPU約束
3
升級過程中遇到的一些問題
1. javax.xml.bind 不存在
Java11 刪除了 Java EE modules,其中就包括 java.xml.bind (JAXB)。
啟動時警告:
解決方案:手動添加相關(guān)依賴
<dependency><groupId>javax.xml.bindgroupId><artifactId>jaxb-apiartifactId><version>2.3.0version>dependency><dependency><groupId>com.sun.xml.bindgroupId><artifactId>jaxb-coreartifactId><version>2.3.0version>dependency><dependency><groupId>com.sun.xml.bindgroupId><artifactId>jaxb-implartifactId><version>2.3.0version>dependency>2. 編譯報錯由于JDK11中刪除了sum.misc包,編譯時會報錯:sun.misc.BASE64Encoder、sun.misc.BASE64Decoder找不到類
解決方式:使用java.util.Base64.Encoderjava.util.Base64.Decoder替換3.服務(wù)啟動報錯
① JDK11下使用最新的Greenwich版本的eureka默認情況下必定無法啟動,日志提示內(nèi)嵌的Tomcat沒法啟動
解決方式:加入JAXB依賴
<dependency><groupId>org.glassfish.jaxbgroupId><artifactId>jaxb-runtimeartifactId><version>2.3.2version>dependency>②?JDK9以后的版本,模塊化的概念去除了JAXB(默認沒有加載),需做接入聲明解決方式:加入JAXB依賴
<dependency>?<groupId>javax.xml.bindgroupId>
????????<artifactId>jaxb-apiartifactId>
dependency>
?<dependency>
?????????<groupId>com.sun.xml.bindgroupId>
?????????<artifactId>jaxb-implartifactId>
?????????<version>2.3.0version>
?dependency>
?<dependency>
????????<groupId>org.glassfish.jaxbgroupId>
????????<artifactId>jaxb-runtimeartifactId>
????????<version>2.3.0version>
dependency>
?<dependency>
?????????<groupId>javax.activationgroupId>
?????????<artifactId>activationartifactId>
??????????<version>1.1.1version>
dependency>
4
趨勢
從Java 11開始,OpenJDK major version的發(fā)布間隔差不多是半年,不用全部都要去關(guān)注,都是追趕,但是LTS版本,需要去追趕,去升級,Java11就是最新的LTS版本,下一個或者再一下major version,很可能又是一個LTS版本;雖然目前使用Java 8都挺好的,現(xiàn)實是Java 8的一些特性會被往后移植,但是后續(xù)版本的特性和優(yōu)化不會再被集成到Java 8中了。
往期精彩回顧MongoDB通配符索引
實習(xí)招聘|360云平臺火熱招聘中
360Stack裸金屬服務(wù)器部署實踐
360技術(shù)公眾號
技術(shù)干貨|一手資訊|精彩活動
掃碼關(guān)注我們總結(jié)
以上是生活随笔為你收集整理的java8中方法区的内存大小如何设置_从Java8升级到Java11的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5中3个盒子怎样设置,Web前端
- 下一篇: Java发送邮件(带附件)