Java ?? ?? ????? ?? ???? ?????. Xiaocai? ?? ?? ?? ?? ??? ?? ?? ??? ??? ????.
??: java ??? ????
jvm ?? ??? ??:
???? ???? jvm ?? ????? ??????? ?? ?? ??? ?????. ?? ???? ?????? ?? ?????.
?? ??? ??? jvm? ?? ?? ???? ???? ? ???? ?????.
?? ?? ??? jvm? Java ??? ???? ? ???? ?????.
??? ??? ?? ??, ?? ??, ??? ?? ?? ?????, ?? ??? ? ??? ??? ?? ??? ??? ? ????.
?? ?? ?? JVM? Java ??? ???? ? ???? ????.
Java? ?? ?? ??? ?? ?? ?? ??? ?? ?? ? ?? ??? ????.
?? ?? ?? ?? *.class ??? ?? ?? ????. ??? ??? ?? ?? ???(??) ????? ??? ??? ? ??? ??? ???? ??? ???? ?????. ??? ??.
??? ?? ?? ??, jvm ?? ??? ??? ?? ??? ??? ? ??? ??? ?? ?? ???? ???? ??? ??? ?????. ??? ?? ??? ?? ?? ???? ????. ?? ??? ??? ?? ????.
???? ????? ?? ?? ?? ? ??? ???? ???????.
String s1 = "Hello"; String s2 = "Hello"; String s3 = "Hel" + "lo"; String s4 = "Hel" + new String("lo"); String s5 = new String("Hello"); String s6 = s5.intern(); String s7 = "H"; String s8 = "ello"; String s9 = s7 + s8; System.out.println(s1 == s2); // true System.out.println(s1 == s3); // true System.out.println(s1 == s4); // false System.out.println(s1 == s9); // false System.out.println(s4 == s5); // false System.out.println(s1 == s6); // true
?? Java??? == ???? ?? ???? ???? ?? ??? ?? ? ???? ?? ?????. ??? ????? String.equals()? ?????.
s1 == s2? s1? s2? ?? ??? ? ? ? ??? ???? ?????. ????? ??? ??? ?? ??? ???? ?? ?????. ??? ??? ?? ???? ??? ?? ?? ??? ? s1? s2? ??? ??? ??? ????? ?????.
s1 == s3?? ??? ????. s3? ???? ??? ?????? ??? ??? ?? ??? ??? ??????. ??? ?? ? ??? ????? ????? ?? ?? ????? ?????. ??? String s3 = "Hel" + "lo";? ??? ???? String s3 = "Hello";? ?????? s1 == s3? ?????.
s1 == s4? ?? ???? ????. s4? ???????? new String("lo") ??? ??? ???? ??? ??? ? ?? ?????. ????? ????? ???? ???. ?? ?? s4? ??? ??? ?? ??? ?? ??? ???? ??? ??? ? ???? ??? ??? ???. ????? ??? ?? ?? ??? ?????? ?????.
s1 == s9? ???? ????. ??? ?????. s7? s8? ?? ??? ? ??? ???? ????? s9? ???? s7? s8? ??? ????. ? ?? ??? ?? ??? ? ????. ?? ????? ???? ??? ? ???? ????? ????. ?? ? s7 ? s8? ?? ??? ? ???? ?? ???? ??? ???? ???? ? ????. ??? ??? ?? ?? ?? s1 ??? ?????.
s4 == s5? ? ?? ??? ???? ????. ? ? ?? ??? ??? ????.
s1 == s6 ? ? ?? ???? ???? ?? ???? ?? ?????. s5? ?? ?? ??? Hello???. ?? ???? Hello ???? ?? ?? ???? ?? ??? ?? ?? ????? ?????. ?? ?? ?? Hello ???? ???? ?? ???? ??? ?? ???? s1? ?? ??? ?? ?? ?? ????? s1? s6? ??? ??? ???? ?????.
? ???? ??? ? ?? ?? ??? ??? ?? ? ????.
?? ?? ? ? ????? ??? ?? ??? ??? ???? ???.
??? ?? ?? ??? ????? ? ??? ??? ?? ??? ?????.
????? ?? ?? ? ??? ?? ?? ???? ???? ?? ?(?: ?? ??? ??) jvm? ???? ?? ?? ??? ???? ????.
? ??? ??? ?? ??? ?????. ??? ??? ?? ?, ?? ??? ?? ? ?? ??? ?? ?????. ??? ??? ?? ??? ???? ??? ??? ? ????. ????? ??? ? ?????. ?? ??? ?? ???? ????. ?? ?? ?? ?? ?? ?? ??? -128~127???.
Practice
??? ?? ?? ???? ?? ?? ?? ?? ???????.
?? ????? ??? ???? ?? ?? ?? ????. ? ?? ?? ????? ?? ???? Java ?? ??? ???? ???? ? ?????(? ????? ????? ??? ???). ?? :
String s = "hi";
為了方便起見,就這么簡單,沒錯(cuò)!將代碼編譯成class文件后,用winhex打開二進(jìn)制格式的class文件。如圖:
簡單講解一下class文件的結(jié)構(gòu),開頭的4個(gè)字節(jié)是class文件魔數(shù),用來標(biāo)識這是一個(gè)class文件,說白話點(diǎn)就是文件頭,既:CA FE BA BE。
緊接著4個(gè)字節(jié)是java的版本號,這里的版本號是34,因?yàn)楣P者是用jdk8編譯的,版本號的高低和jdk版本的高低相對應(yīng),高版本可以兼容低版本,但低版本無法執(zhí)行高版本。所以,如果哪天讀者想知道別人的class文件是用什么jdk版本編譯的,就可以看這4個(gè)字節(jié)。
接下來就是常量池入口,入口處用2個(gè)字節(jié)標(biāo)識常量池常量數(shù)量,本例中數(shù)值為00 1A,翻譯成十進(jìn)制是26,也就是有25個(gè)常量,其中第0個(gè)常量是特殊值,所以只有25個(gè)常量。
常量池中存放了各種類型的常量,他們都有自己的類型,并且都有自己的存儲規(guī)范,本文只關(guān)注字符串常量,字符串常量以01開頭(1個(gè)字節(jié)),接著用2個(gè)字節(jié)記錄字符串長度,然后就是字符串實(shí)際內(nèi)容。本例中為:01 00 02 68 69。
接下來再說說運(yùn)行時(shí)常量池,由于運(yùn)行時(shí)常量池在方法區(qū)中,我們可以通過jvm參數(shù):-XX:PermSize、-XX:MaxPermSize來設(shè)置方法區(qū)大小,從而間接限制常量池大小。
假設(shè)jvm啟動參數(shù)為:-XX:PermSize=2M -XX:MaxPermSize=2M,然后運(yùn)行如下代碼:
//保持引用,防止自動垃圾回收 List<String> list = new ArrayList<String>(); int i = 0; while(true){ //通過intern方法向常量池中手動添加常量 list.add(String.valueOf(i++).intern()); }
程序立刻會拋出:Exception in thread "main" java.lang.outOfMemoryError: PermGen space異常。PermGen space正是方法區(qū),足以說明常量池在方法區(qū)中。
在jdk8中,移除了方法區(qū),轉(zhuǎn)而用Metaspace區(qū)域替代,所以我們需要使用新的jvm參數(shù):-XX:MaxMetaspaceSize=2M,依然運(yùn)行如上代碼,拋出:java.lang.OutOfMemoryError: Metaspace異常。同理說明運(yùn)行時(shí)常量池是劃分在Metaspace區(qū)域中。具體關(guān)于Metaspace區(qū)域的知識,請讀者自行搜索。
更多java知識請關(guān)注java基礎(chǔ)教程欄目。
? ??? Java ?? ?? ?? ??? ??? ? ??? ??? ?? ?????. ??? ??? PHP ??? ????? ?? ?? ??? ?????!

? AI ??

Undress AI Tool
??? ???? ??

Undresser.AI Undress
???? ?? ??? ??? ?? AI ?? ?

AI Clothes Remover
???? ?? ???? ??? AI ?????.

Clothoff.io
AI ? ???

Video Face Swap
??? ??? AI ?? ?? ??? ???? ?? ???? ??? ?? ????!

?? ??

??? ??

???++7.3.1
???? ?? ?? ?? ???

SublimeText3 ??? ??
??? ??, ???? ?? ????.

???? 13.0.1 ???
??? PHP ?? ?? ??

???? CS6
??? ? ?? ??

SublimeText3 Mac ??
? ??? ?? ?? ?????(SublimeText3)

JDBC ????? ???? ????? ?? ?? ?? ??? ?? ?? ??? ?? ? ?? ??? ?? ?? ?? ??? ???????. 1. ????? ????? Conn.SetAutoCommit (False)?? ??????. 2. ??? ? ????? ?? ?? SQL ??? ?????. 3. ?? ??? ??? ?? Conn.commit ()?? ???? ??? ???? ???? ?? ??? ???? Conn.Rollback ()?? ??????. ???, ? ??? ???? ????, ??? ???? ????, ?? ??? ??? ?? ??? ??? ???? ? ???????. ?? ?? ?? ???? ????? ??? ???? ?? ?? ???? ???? ??? ????? ?? ??? ??? ? ?? ???? ?? ????.

?? ?? ? ?? ???? ???? ?? Java.Time ???? ???? ??????. 2. LocalDate, LocalDateTime ? LocalTime? ?? ?? ??? ??? ?????. 3. () ???? ???? ?? ??? ??? ????. 4. ???/???? ??? ???? ??? ????? ??? ??????. 5. ZonedDateTime ? Zoneid? ???? ???? ??????. 6. DateTimeFormatter? ?? ?? ? ?? ?? ?? ???; 7. ??? ?? ?? ?? ??? ????? ?? ??????. ?? Java? ?? ??? ???? ??? ??? ???? Java.Timeapi ??? ?? ??? ???????.

Pre-FormancetArtUptimeMoryUsage, Quarkusandmicronautleadduetocompile-timeprocessingandgraalvsupport, withquarkusoftenperforminglightbetterine serverless sinarios.2.thyvelopecosyste,

NetworkPortSandfirewallsworkTogetToenableCommunication whileensuringsecurity.1.networkportSarevirtualendpointsnumbered0–65535, Withwell-nownports like80 (http), 443 (https), 22 (ssh) ? 25 (smtp) ?? (specservices

Java 's Garbage Collection (GC)? ???? ???? ???? ??????, ?? ? ??? ??? ? ??? ??? ??? ??? ????. 1.GC? ?? ?? (? : ?? ??, ?? ???, ?? ?? ?)?? ??? ???? ????, ?? ? ??? ??? ???? ?????. 2. ?? ???? ????? ????, ?? ?? ??? ??? ???? ?? ??? ??????. 3. ?? ?? ?? ?? : ??? ?? (Eden, S0, S1)? ?? ????? ?????. ??? ??? ?? ? MajorGC? ???? ? ??? ? ????. Metaspace? ??? ?? ???? ?????. 4. JVM? ??? GC ??? ?????. SerialGC? ??? ?? ????? ?????. ParallelGC? ???? ??????. CMS? ?? ???

??? htmlinput ??? ???? ??? ???? ????? ??? ??? ?? ??? ???? ???? ? ????. 1. ???, ???, ??, ?? ? ??? ?? ??? ??? ?? ?? ?? ??? ???? ???? ??? ? ???? ??? ? ????. 2. HTML5? ?????? ??? ? ?? ?? ??? ?? ? ??? URL, ??, ?? ? ??? ?? ??? ??? ??????. 3. ?? ?? ? ? ??? ??? ???? ?? ??? ???? ???? ?? ???? ?? ???? ???? ?? ? ? ??? ?? ???????.

GradleisBetTerChoiceFormostNewProjectSduetoitssuperiorflexible, Performance, and ModernToolingsupport.1.Gradle'Sgroovy/kotlindslismoreConcisENDEXPRESSIVETHANMAVEN'SVOSEXML.2.GradleOutsMaveninbuildweedweedweedweedweedweedweedweedweedweedweedweedweedweede

DEFER? ??? ???? ?? ??? ??? ???? ? ?????. ?? ??? ?? ? ? ?? ????, ??? ??? ? ?? ?? (LIFO)? ??? ?????. 1. ?? ??? ??? ? ??? ?????. 2. ?? ??? ?? ??? ??? ????? ?????. 3. ?? ? ?? ?? ??? ? ????. 4. ??? ?????? ??? ??? ???? ?????. 5. ?? ??? ???? ?? ??? ?? ??? ?????. ??? ??? ?? ?? ? ???? ???? ? ????.
