diff --git a/Java/05Java文件IO与网络编程/01 Java 标准IO.md b/Java/05JavaIO编程/01 Java 标准IO.md similarity index 100% rename from Java/05Java文件IO与网络编程/01 Java 标准IO.md rename to Java/05JavaIO编程/01 Java 标准IO.md diff --git a/Java/05Java文件IO与网络编程/02 Java NIO.md b/Java/05JavaIO编程/02 Java NIO.md similarity index 100% rename from Java/05Java文件IO与网络编程/02 Java NIO.md rename to Java/05JavaIO编程/02 Java NIO.md diff --git a/Java/05Java文件IO与网络编程/03 Java IO文件.md b/Java/05JavaIO编程/03 Java IO文件.md similarity index 100% rename from Java/05Java文件IO与网络编程/03 Java IO文件.md rename to Java/05JavaIO编程/03 Java IO文件.md diff --git a/Java/05Java文件IO与网络编程/04 Java IO对象.md b/Java/05JavaIO编程/04 Java IO对象.md similarity index 100% rename from Java/05Java文件IO与网络编程/04 Java IO对象.md rename to Java/05JavaIO编程/04 Java IO对象.md diff --git a/Java/05Java文件IO与网络编程/05 Java IO网络.md b/Java/05JavaIO编程/05 Java IO网络.md similarity index 100% rename from Java/05Java文件IO与网络编程/05 Java IO网络.md rename to Java/05JavaIO编程/05 Java IO网络.md diff --git a/Java/05Java文件IO与网络编程/image/2022-11-08-10-51-54.png b/Java/05JavaIO编程/image/2022-11-08-10-51-54.png similarity index 100% rename from Java/05Java文件IO与网络编程/image/2022-11-08-10-51-54.png rename to Java/05JavaIO编程/image/2022-11-08-10-51-54.png diff --git a/Java/05Java文件IO与网络编程/image/2022-11-08-10-54-19.png b/Java/05JavaIO编程/image/2022-11-08-10-54-19.png similarity index 100% rename from Java/05Java文件IO与网络编程/image/2022-11-08-10-54-19.png rename to Java/05JavaIO编程/image/2022-11-08-10-54-19.png diff --git a/Java/05Java文件IO与网络编程/image/2022-11-26-17-31-29.png b/Java/05JavaIO编程/image/2022-11-26-17-31-29.png similarity index 100% rename from Java/05Java文件IO与网络编程/image/2022-11-26-17-31-29.png rename to Java/05JavaIO编程/image/2022-11-26-17-31-29.png diff --git a/Java/05Java文件IO与网络编程/image/2022-11-26-18-03-55.png b/Java/05JavaIO编程/image/2022-11-26-18-03-55.png similarity index 100% rename from Java/05Java文件IO与网络编程/image/2022-11-26-18-03-55.png rename to Java/05JavaIO编程/image/2022-11-26-18-03-55.png diff --git a/Java/05Java文件IO与网络编程/image/2022-11-26-19-20-23.png b/Java/05JavaIO编程/image/2022-11-26-19-20-23.png similarity index 100% rename from Java/05Java文件IO与网络编程/image/2022-11-26-19-20-23.png rename to Java/05JavaIO编程/image/2022-11-26-19-20-23.png diff --git a/Java/05Java文件IO与网络编程/image/2022-11-26-19-31-24.png b/Java/05JavaIO编程/image/2022-11-26-19-31-24.png similarity index 100% rename from Java/05Java文件IO与网络编程/image/2022-11-26-19-31-24.png rename to Java/05JavaIO编程/image/2022-11-26-19-31-24.png diff --git a/Java/05Java文件IO与网络编程/image/2022-11-26-19-40-09.png b/Java/05JavaIO编程/image/2022-11-26-19-40-09.png similarity index 100% rename from Java/05Java文件IO与网络编程/image/2022-11-26-19-40-09.png rename to Java/05JavaIO编程/image/2022-11-26-19-40-09.png diff --git a/Java/05Java文件IO与网络编程/image/2022-11-26-19-40-59.png b/Java/05JavaIO编程/image/2022-11-26-19-40-59.png similarity index 100% rename from Java/05Java文件IO与网络编程/image/2022-11-26-19-40-59.png rename to Java/05JavaIO编程/image/2022-11-26-19-40-59.png diff --git a/Java/05Java文件IO与网络编程/image/2022-11-26-20-24-47.png b/Java/05JavaIO编程/image/2022-11-26-20-24-47.png similarity index 100% rename from Java/05Java文件IO与网络编程/image/2022-11-26-20-24-47.png rename to Java/05JavaIO编程/image/2022-11-26-20-24-47.png diff --git a/Java/05Java文件IO与网络编程/image/2022-11-27-00-08-19.png b/Java/05JavaIO编程/image/2022-11-27-00-08-19.png similarity index 100% rename from Java/05Java文件IO与网络编程/image/2022-11-27-00-08-19.png rename to Java/05JavaIO编程/image/2022-11-27-00-08-19.png diff --git a/Java/05Java文件IO与网络编程/image/2022-11-27-00-33-15.png b/Java/05JavaIO编程/image/2022-11-27-00-33-15.png similarity index 100% rename from Java/05Java文件IO与网络编程/image/2022-11-27-00-33-15.png rename to Java/05JavaIO编程/image/2022-11-27-00-33-15.png diff --git a/Java/05Java文件IO与网络编程/image/2022-11-27-00-33-28.png b/Java/05JavaIO编程/image/2022-11-27-00-33-28.png similarity index 100% rename from Java/05Java文件IO与网络编程/image/2022-11-27-00-33-28.png rename to Java/05JavaIO编程/image/2022-11-27-00-33-28.png diff --git a/Java/05Java文件IO与网络编程/image/2022-11-27-00-33-35.png b/Java/05JavaIO编程/image/2022-11-27-00-33-35.png similarity index 100% rename from Java/05Java文件IO与网络编程/image/2022-11-27-00-33-35.png rename to Java/05JavaIO编程/image/2022-11-27-00-33-35.png diff --git a/Java/05Java文件IO与网络编程/image/2022-11-27-00-33-45.png b/Java/05JavaIO编程/image/2022-11-27-00-33-45.png similarity index 100% rename from Java/05Java文件IO与网络编程/image/2022-11-27-00-33-45.png rename to Java/05JavaIO编程/image/2022-11-27-00-33-45.png diff --git a/Java/05Java文件IO与网络编程/image/2022-11-27-00-33-59.png b/Java/05JavaIO编程/image/2022-11-27-00-33-59.png similarity index 100% rename from Java/05Java文件IO与网络编程/image/2022-11-27-00-33-59.png rename to Java/05JavaIO编程/image/2022-11-27-00-33-59.png diff --git a/Java/05Java文件IO与网络编程/image/2022-11-27-00-48-14.png b/Java/05JavaIO编程/image/2022-11-27-00-48-14.png similarity index 100% rename from Java/05Java文件IO与网络编程/image/2022-11-27-00-48-14.png rename to Java/05JavaIO编程/image/2022-11-27-00-48-14.png diff --git a/Java/05Java文件IO与网络编程/image/2022-11-27-10-06-38.png b/Java/05JavaIO编程/image/2022-11-27-10-06-38.png similarity index 100% rename from Java/05Java文件IO与网络编程/image/2022-11-27-10-06-38.png rename to Java/05JavaIO编程/image/2022-11-27-10-06-38.png diff --git a/Java/05Java文件IO与网络编程/media/007ab35fabcc3bbba6b8e4defa4a37b1.png b/Java/05JavaIO编程/media/007ab35fabcc3bbba6b8e4defa4a37b1.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/007ab35fabcc3bbba6b8e4defa4a37b1.png rename to Java/05JavaIO编程/media/007ab35fabcc3bbba6b8e4defa4a37b1.png diff --git a/Java/05Java文件IO与网络编程/media/028bef0da4c4d8440e13915a126df9ca.png b/Java/05JavaIO编程/media/028bef0da4c4d8440e13915a126df9ca.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/028bef0da4c4d8440e13915a126df9ca.png rename to Java/05JavaIO编程/media/028bef0da4c4d8440e13915a126df9ca.png diff --git a/Java/05Java文件IO与网络编程/media/041cbc2e6105e1571f8c6570b651ab08.png b/Java/05JavaIO编程/media/041cbc2e6105e1571f8c6570b651ab08.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/041cbc2e6105e1571f8c6570b651ab08.png rename to Java/05JavaIO编程/media/041cbc2e6105e1571f8c6570b651ab08.png diff --git a/Java/05Java文件IO与网络编程/media/065a723dabe70a4f55b1e194d9bbf4d2.png b/Java/05JavaIO编程/media/065a723dabe70a4f55b1e194d9bbf4d2.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/065a723dabe70a4f55b1e194d9bbf4d2.png rename to Java/05JavaIO编程/media/065a723dabe70a4f55b1e194d9bbf4d2.png diff --git a/Java/05Java文件IO与网络编程/media/06e9b6a8836c9bea9aa0f49fc2b497e1.png b/Java/05JavaIO编程/media/06e9b6a8836c9bea9aa0f49fc2b497e1.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/06e9b6a8836c9bea9aa0f49fc2b497e1.png rename to Java/05JavaIO编程/media/06e9b6a8836c9bea9aa0f49fc2b497e1.png diff --git a/Java/05Java文件IO与网络编程/media/0795fe05778f83e679a5f7fe70dc292d.png b/Java/05JavaIO编程/media/0795fe05778f83e679a5f7fe70dc292d.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/0795fe05778f83e679a5f7fe70dc292d.png rename to Java/05JavaIO编程/media/0795fe05778f83e679a5f7fe70dc292d.png diff --git a/Java/05Java文件IO与网络编程/media/0a98a46c93fbd1041bdc163970fcad1f.png b/Java/05JavaIO编程/media/0a98a46c93fbd1041bdc163970fcad1f.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/0a98a46c93fbd1041bdc163970fcad1f.png rename to Java/05JavaIO编程/media/0a98a46c93fbd1041bdc163970fcad1f.png diff --git a/Java/05Java文件IO与网络编程/media/0ed020222f07f3d0d0b405b20c9e4199.png b/Java/05JavaIO编程/media/0ed020222f07f3d0d0b405b20c9e4199.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/0ed020222f07f3d0d0b405b20c9e4199.png rename to Java/05JavaIO编程/media/0ed020222f07f3d0d0b405b20c9e4199.png diff --git a/Java/05Java文件IO与网络编程/media/12ae308e42698e5ea0ffac38c42a3484.png b/Java/05JavaIO编程/media/12ae308e42698e5ea0ffac38c42a3484.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/12ae308e42698e5ea0ffac38c42a3484.png rename to Java/05JavaIO编程/media/12ae308e42698e5ea0ffac38c42a3484.png diff --git a/Java/05Java文件IO与网络编程/media/135097b6a32d7be79d3a02754eb5017a.png b/Java/05JavaIO编程/media/135097b6a32d7be79d3a02754eb5017a.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/135097b6a32d7be79d3a02754eb5017a.png rename to Java/05JavaIO编程/media/135097b6a32d7be79d3a02754eb5017a.png diff --git a/Java/05Java文件IO与网络编程/media/13ba18c5d137570035bb5ad25946599b.png b/Java/05JavaIO编程/media/13ba18c5d137570035bb5ad25946599b.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/13ba18c5d137570035bb5ad25946599b.png rename to Java/05JavaIO编程/media/13ba18c5d137570035bb5ad25946599b.png diff --git a/Java/05Java文件IO与网络编程/media/1e605723a237772c2404d1bf6d5248c3.gif b/Java/05JavaIO编程/media/1e605723a237772c2404d1bf6d5248c3.gif similarity index 100% rename from Java/05Java文件IO与网络编程/media/1e605723a237772c2404d1bf6d5248c3.gif rename to Java/05JavaIO编程/media/1e605723a237772c2404d1bf6d5248c3.gif diff --git a/Java/05Java文件IO与网络编程/media/207fbeca9fd31ed3ab75a2b0b9803b4c.png b/Java/05JavaIO编程/media/207fbeca9fd31ed3ab75a2b0b9803b4c.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/207fbeca9fd31ed3ab75a2b0b9803b4c.png rename to Java/05JavaIO编程/media/207fbeca9fd31ed3ab75a2b0b9803b4c.png diff --git a/Java/05Java文件IO与网络编程/media/21202143ea74374015361d25b0455b5f.png b/Java/05JavaIO编程/media/21202143ea74374015361d25b0455b5f.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/21202143ea74374015361d25b0455b5f.png rename to Java/05JavaIO编程/media/21202143ea74374015361d25b0455b5f.png diff --git a/Java/05Java文件IO与网络编程/media/23275a1f62680918e7891389fa9a149f.png b/Java/05JavaIO编程/media/23275a1f62680918e7891389fa9a149f.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/23275a1f62680918e7891389fa9a149f.png rename to Java/05JavaIO编程/media/23275a1f62680918e7891389fa9a149f.png diff --git a/Java/05Java文件IO与网络编程/media/23aa409dbf14d3a002a46df7d8ea5c77.png b/Java/05JavaIO编程/media/23aa409dbf14d3a002a46df7d8ea5c77.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/23aa409dbf14d3a002a46df7d8ea5c77.png rename to Java/05JavaIO编程/media/23aa409dbf14d3a002a46df7d8ea5c77.png diff --git a/Java/05Java文件IO与网络编程/media/26005b0c83224fe160d6cb7658367c2c.png b/Java/05JavaIO编程/media/26005b0c83224fe160d6cb7658367c2c.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/26005b0c83224fe160d6cb7658367c2c.png rename to Java/05JavaIO编程/media/26005b0c83224fe160d6cb7658367c2c.png diff --git a/Java/05Java文件IO与网络编程/media/2602720f7f65ca5d4a9d8af2abcf3569.png b/Java/05JavaIO编程/media/2602720f7f65ca5d4a9d8af2abcf3569.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/2602720f7f65ca5d4a9d8af2abcf3569.png rename to Java/05JavaIO编程/media/2602720f7f65ca5d4a9d8af2abcf3569.png diff --git a/Java/05Java文件IO与网络编程/media/288b81f4a8937847c3e775b86b07eaa3.png b/Java/05JavaIO编程/media/288b81f4a8937847c3e775b86b07eaa3.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/288b81f4a8937847c3e775b86b07eaa3.png rename to Java/05JavaIO编程/media/288b81f4a8937847c3e775b86b07eaa3.png diff --git a/Java/05Java文件IO与网络编程/media/29a9dcc45fcd9a687b53ae6ff8d0e7c2.png b/Java/05JavaIO编程/media/29a9dcc45fcd9a687b53ae6ff8d0e7c2.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/29a9dcc45fcd9a687b53ae6ff8d0e7c2.png rename to Java/05JavaIO编程/media/29a9dcc45fcd9a687b53ae6ff8d0e7c2.png diff --git a/Java/05Java文件IO与网络编程/media/2ba3630488f0f2874f32bc5bd8a236dd.png b/Java/05JavaIO编程/media/2ba3630488f0f2874f32bc5bd8a236dd.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/2ba3630488f0f2874f32bc5bd8a236dd.png rename to Java/05JavaIO编程/media/2ba3630488f0f2874f32bc5bd8a236dd.png diff --git a/Java/05Java文件IO与网络编程/media/310c3e09c44d270fe52c0e360aab83b5.png b/Java/05JavaIO编程/media/310c3e09c44d270fe52c0e360aab83b5.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/310c3e09c44d270fe52c0e360aab83b5.png rename to Java/05JavaIO编程/media/310c3e09c44d270fe52c0e360aab83b5.png diff --git a/Java/05Java文件IO与网络编程/media/32695a79080b5d070d180cd90dc6a60f.png b/Java/05JavaIO编程/media/32695a79080b5d070d180cd90dc6a60f.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/32695a79080b5d070d180cd90dc6a60f.png rename to Java/05JavaIO编程/media/32695a79080b5d070d180cd90dc6a60f.png diff --git a/Java/05Java文件IO与网络编程/media/339890a404ce80ccaad34f1f9f8761ab.png b/Java/05JavaIO编程/media/339890a404ce80ccaad34f1f9f8761ab.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/339890a404ce80ccaad34f1f9f8761ab.png rename to Java/05JavaIO编程/media/339890a404ce80ccaad34f1f9f8761ab.png diff --git a/Java/05Java文件IO与网络编程/media/352644fe8e44bed2bcc5029e19f36a2d.png b/Java/05JavaIO编程/media/352644fe8e44bed2bcc5029e19f36a2d.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/352644fe8e44bed2bcc5029e19f36a2d.png rename to Java/05JavaIO编程/media/352644fe8e44bed2bcc5029e19f36a2d.png diff --git a/Java/05Java文件IO与网络编程/media/3be95dd9e28fc013f1872e48c76e7e72.png b/Java/05JavaIO编程/media/3be95dd9e28fc013f1872e48c76e7e72.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/3be95dd9e28fc013f1872e48c76e7e72.png rename to Java/05JavaIO编程/media/3be95dd9e28fc013f1872e48c76e7e72.png diff --git a/Java/05Java文件IO与网络编程/media/3c2c1fd4f17e7976e8a31c089251f780.png b/Java/05JavaIO编程/media/3c2c1fd4f17e7976e8a31c089251f780.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/3c2c1fd4f17e7976e8a31c089251f780.png rename to Java/05JavaIO编程/media/3c2c1fd4f17e7976e8a31c089251f780.png diff --git a/Java/05Java文件IO与网络编程/media/3d25120fdc157d7eb22f3a1cf36a7885.png b/Java/05JavaIO编程/media/3d25120fdc157d7eb22f3a1cf36a7885.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/3d25120fdc157d7eb22f3a1cf36a7885.png rename to Java/05JavaIO编程/media/3d25120fdc157d7eb22f3a1cf36a7885.png diff --git a/Java/05Java文件IO与网络编程/media/410d4cf19c8273fcf391b4bbcfa7b391.png b/Java/05JavaIO编程/media/410d4cf19c8273fcf391b4bbcfa7b391.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/410d4cf19c8273fcf391b4bbcfa7b391.png rename to Java/05JavaIO编程/media/410d4cf19c8273fcf391b4bbcfa7b391.png diff --git a/Java/05Java文件IO与网络编程/media/41fd9830599e374b63260ae7dece858e.png b/Java/05JavaIO编程/media/41fd9830599e374b63260ae7dece858e.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/41fd9830599e374b63260ae7dece858e.png rename to Java/05JavaIO编程/media/41fd9830599e374b63260ae7dece858e.png diff --git a/Java/05Java文件IO与网络编程/media/421fd9e102576846483b67c53d23f170.png b/Java/05JavaIO编程/media/421fd9e102576846483b67c53d23f170.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/421fd9e102576846483b67c53d23f170.png rename to Java/05JavaIO编程/media/421fd9e102576846483b67c53d23f170.png diff --git a/Java/05Java文件IO与网络编程/media/46764bdc5a287633a25d30b52cf0ae1e.png b/Java/05JavaIO编程/media/46764bdc5a287633a25d30b52cf0ae1e.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/46764bdc5a287633a25d30b52cf0ae1e.png rename to Java/05JavaIO编程/media/46764bdc5a287633a25d30b52cf0ae1e.png diff --git a/Java/05Java文件IO与网络编程/media/46851e91409fb2dce25933f725a3e1ce.png b/Java/05JavaIO编程/media/46851e91409fb2dce25933f725a3e1ce.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/46851e91409fb2dce25933f725a3e1ce.png rename to Java/05JavaIO编程/media/46851e91409fb2dce25933f725a3e1ce.png diff --git a/Java/05Java文件IO与网络编程/media/4f027230571687bae1d7d5fd6c887262.png b/Java/05JavaIO编程/media/4f027230571687bae1d7d5fd6c887262.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/4f027230571687bae1d7d5fd6c887262.png rename to Java/05JavaIO编程/media/4f027230571687bae1d7d5fd6c887262.png diff --git a/Java/05Java文件IO与网络编程/media/51e409b11aa51c150090697429a953ed.gif b/Java/05JavaIO编程/media/51e409b11aa51c150090697429a953ed.gif similarity index 100% rename from Java/05Java文件IO与网络编程/media/51e409b11aa51c150090697429a953ed.gif rename to Java/05JavaIO编程/media/51e409b11aa51c150090697429a953ed.gif diff --git a/Java/05Java文件IO与网络编程/media/53c99757ef646fb19c968c270261f997.png b/Java/05JavaIO编程/media/53c99757ef646fb19c968c270261f997.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/53c99757ef646fb19c968c270261f997.png rename to Java/05JavaIO编程/media/53c99757ef646fb19c968c270261f997.png diff --git a/Java/05Java文件IO与网络编程/media/554c75f84f8e53347e13bc5bfae5c2ed.png b/Java/05JavaIO编程/media/554c75f84f8e53347e13bc5bfae5c2ed.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/554c75f84f8e53347e13bc5bfae5c2ed.png rename to Java/05JavaIO编程/media/554c75f84f8e53347e13bc5bfae5c2ed.png diff --git a/Java/05Java文件IO与网络编程/media/5662bedb45e733ee84d631c05aa45a1b.png b/Java/05JavaIO编程/media/5662bedb45e733ee84d631c05aa45a1b.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/5662bedb45e733ee84d631c05aa45a1b.png rename to Java/05JavaIO编程/media/5662bedb45e733ee84d631c05aa45a1b.png diff --git a/Java/05Java文件IO与网络编程/media/5920ee3aa726049e1d5a905a51614daa.png b/Java/05JavaIO编程/media/5920ee3aa726049e1d5a905a51614daa.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/5920ee3aa726049e1d5a905a51614daa.png rename to Java/05JavaIO编程/media/5920ee3aa726049e1d5a905a51614daa.png diff --git a/Java/05Java文件IO与网络编程/media/5a5e5697905e0cbc15ff7a0e76a0dbfc.png b/Java/05JavaIO编程/media/5a5e5697905e0cbc15ff7a0e76a0dbfc.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/5a5e5697905e0cbc15ff7a0e76a0dbfc.png rename to Java/05JavaIO编程/media/5a5e5697905e0cbc15ff7a0e76a0dbfc.png diff --git a/Java/05Java文件IO与网络编程/media/5c81759ac65a3e108718d187ceb1e24b.png b/Java/05JavaIO编程/media/5c81759ac65a3e108718d187ceb1e24b.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/5c81759ac65a3e108718d187ceb1e24b.png rename to Java/05JavaIO编程/media/5c81759ac65a3e108718d187ceb1e24b.png diff --git a/Java/05Java文件IO与网络编程/media/5cf5dde716475024008c7505ed210def.png b/Java/05JavaIO编程/media/5cf5dde716475024008c7505ed210def.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/5cf5dde716475024008c7505ed210def.png rename to Java/05JavaIO编程/media/5cf5dde716475024008c7505ed210def.png diff --git a/Java/05Java文件IO与网络编程/media/5dbaec9196d3822fbfe811ee7dc3dbd5.png b/Java/05JavaIO编程/media/5dbaec9196d3822fbfe811ee7dc3dbd5.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/5dbaec9196d3822fbfe811ee7dc3dbd5.png rename to Java/05JavaIO编程/media/5dbaec9196d3822fbfe811ee7dc3dbd5.png diff --git a/Java/05Java文件IO与网络编程/media/5e148d9d5712418811886d86b891e823.png b/Java/05JavaIO编程/media/5e148d9d5712418811886d86b891e823.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/5e148d9d5712418811886d86b891e823.png rename to Java/05JavaIO编程/media/5e148d9d5712418811886d86b891e823.png diff --git a/Java/05Java文件IO与网络编程/media/5f4ea984a41d2eb6cd5e2bdb760a0ad9.png b/Java/05JavaIO编程/media/5f4ea984a41d2eb6cd5e2bdb760a0ad9.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/5f4ea984a41d2eb6cd5e2bdb760a0ad9.png rename to Java/05JavaIO编程/media/5f4ea984a41d2eb6cd5e2bdb760a0ad9.png diff --git a/Java/05Java文件IO与网络编程/media/64c795a7d1f06eb3d76e02ae2a301db9.png b/Java/05JavaIO编程/media/64c795a7d1f06eb3d76e02ae2a301db9.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/64c795a7d1f06eb3d76e02ae2a301db9.png rename to Java/05JavaIO编程/media/64c795a7d1f06eb3d76e02ae2a301db9.png diff --git a/Java/05Java文件IO与网络编程/media/661d914f0508cf83bd6b3344bf5d1ad1.png b/Java/05JavaIO编程/media/661d914f0508cf83bd6b3344bf5d1ad1.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/661d914f0508cf83bd6b3344bf5d1ad1.png rename to Java/05JavaIO编程/media/661d914f0508cf83bd6b3344bf5d1ad1.png diff --git a/Java/05Java文件IO与网络编程/media/682155b3d9bb95cf9e0764d21aa398df.png b/Java/05JavaIO编程/media/682155b3d9bb95cf9e0764d21aa398df.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/682155b3d9bb95cf9e0764d21aa398df.png rename to Java/05JavaIO编程/media/682155b3d9bb95cf9e0764d21aa398df.png diff --git a/Java/05Java文件IO与网络编程/media/72d35439798aa9e9411cc9f85e65412d.png b/Java/05JavaIO编程/media/72d35439798aa9e9411cc9f85e65412d.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/72d35439798aa9e9411cc9f85e65412d.png rename to Java/05JavaIO编程/media/72d35439798aa9e9411cc9f85e65412d.png diff --git a/Java/05Java文件IO与网络编程/media/7343332168b1cd6d2398995412c4739b.png b/Java/05JavaIO编程/media/7343332168b1cd6d2398995412c4739b.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/7343332168b1cd6d2398995412c4739b.png rename to Java/05JavaIO编程/media/7343332168b1cd6d2398995412c4739b.png diff --git a/Java/05Java文件IO与网络编程/media/74d89c3525a5fb85f03cbb3fdea9ac0b.png b/Java/05JavaIO编程/media/74d89c3525a5fb85f03cbb3fdea9ac0b.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/74d89c3525a5fb85f03cbb3fdea9ac0b.png rename to Java/05JavaIO编程/media/74d89c3525a5fb85f03cbb3fdea9ac0b.png diff --git a/Java/05Java文件IO与网络编程/media/7f69ee69093961598550e28f7e25719a.png b/Java/05JavaIO编程/media/7f69ee69093961598550e28f7e25719a.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/7f69ee69093961598550e28f7e25719a.png rename to Java/05JavaIO编程/media/7f69ee69093961598550e28f7e25719a.png diff --git a/Java/05Java文件IO与网络编程/media/8b63587275597554721b193b36793bdd.png b/Java/05JavaIO编程/media/8b63587275597554721b193b36793bdd.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/8b63587275597554721b193b36793bdd.png rename to Java/05JavaIO编程/media/8b63587275597554721b193b36793bdd.png diff --git a/Java/05Java文件IO与网络编程/media/946ac67c66320b025c977140449f2726.png b/Java/05JavaIO编程/media/946ac67c66320b025c977140449f2726.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/946ac67c66320b025c977140449f2726.png rename to Java/05JavaIO编程/media/946ac67c66320b025c977140449f2726.png diff --git a/Java/05Java文件IO与网络编程/media/999fffbe3d46bc883b98ea7b5769a7da.png b/Java/05JavaIO编程/media/999fffbe3d46bc883b98ea7b5769a7da.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/999fffbe3d46bc883b98ea7b5769a7da.png rename to Java/05JavaIO编程/media/999fffbe3d46bc883b98ea7b5769a7da.png diff --git a/Java/05Java文件IO与网络编程/media/a332ee101f4e360193d878fcf2bdb926.png b/Java/05JavaIO编程/media/a332ee101f4e360193d878fcf2bdb926.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/a332ee101f4e360193d878fcf2bdb926.png rename to Java/05JavaIO编程/media/a332ee101f4e360193d878fcf2bdb926.png diff --git a/Java/05Java文件IO与网络编程/media/a984c00d0f7846158558aa25291e6a83.png b/Java/05JavaIO编程/media/a984c00d0f7846158558aa25291e6a83.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/a984c00d0f7846158558aa25291e6a83.png rename to Java/05JavaIO编程/media/a984c00d0f7846158558aa25291e6a83.png diff --git a/Java/05Java文件IO与网络编程/media/ab38369f8043d690b448fe8e8004a755.png b/Java/05JavaIO编程/media/ab38369f8043d690b448fe8e8004a755.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/ab38369f8043d690b448fe8e8004a755.png rename to Java/05JavaIO编程/media/ab38369f8043d690b448fe8e8004a755.png diff --git a/Java/05Java文件IO与网络编程/media/ac2af137ab9c52245d2e72ceafffee76.png b/Java/05JavaIO编程/media/ac2af137ab9c52245d2e72ceafffee76.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/ac2af137ab9c52245d2e72ceafffee76.png rename to Java/05JavaIO编程/media/ac2af137ab9c52245d2e72ceafffee76.png diff --git a/Java/05Java文件IO与网络编程/media/b24ac0390788e8547c3f60daee9eaacf.jpeg b/Java/05JavaIO编程/media/b24ac0390788e8547c3f60daee9eaacf.jpeg similarity index 100% rename from Java/05Java文件IO与网络编程/media/b24ac0390788e8547c3f60daee9eaacf.jpeg rename to Java/05JavaIO编程/media/b24ac0390788e8547c3f60daee9eaacf.jpeg diff --git a/Java/05Java文件IO与网络编程/media/b2c4e7c54fc6c246e437b80f8752b75d.png b/Java/05JavaIO编程/media/b2c4e7c54fc6c246e437b80f8752b75d.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/b2c4e7c54fc6c246e437b80f8752b75d.png rename to Java/05JavaIO编程/media/b2c4e7c54fc6c246e437b80f8752b75d.png diff --git a/Java/05Java文件IO与网络编程/media/b8e04854836dbd4d12d08351c1e70332.png b/Java/05JavaIO编程/media/b8e04854836dbd4d12d08351c1e70332.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/b8e04854836dbd4d12d08351c1e70332.png rename to Java/05JavaIO编程/media/b8e04854836dbd4d12d08351c1e70332.png diff --git a/Java/05Java文件IO与网络编程/media/b9541e310983abc3936b385e852c23b0.png b/Java/05JavaIO编程/media/b9541e310983abc3936b385e852c23b0.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/b9541e310983abc3936b385e852c23b0.png rename to Java/05JavaIO编程/media/b9541e310983abc3936b385e852c23b0.png diff --git a/Java/05Java文件IO与网络编程/media/bf6e89db6228034cd1d1f820a54d9332.png b/Java/05JavaIO编程/media/bf6e89db6228034cd1d1f820a54d9332.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/bf6e89db6228034cd1d1f820a54d9332.png rename to Java/05JavaIO编程/media/bf6e89db6228034cd1d1f820a54d9332.png diff --git a/Java/05Java文件IO与网络编程/media/c0987f0a7d6c303402b2dceb1d8d6f13.png b/Java/05JavaIO编程/media/c0987f0a7d6c303402b2dceb1d8d6f13.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/c0987f0a7d6c303402b2dceb1d8d6f13.png rename to Java/05JavaIO编程/media/c0987f0a7d6c303402b2dceb1d8d6f13.png diff --git a/Java/05Java文件IO与网络编程/media/dca5742acd83b6d3f86f5b3af9cf1fcb.png b/Java/05JavaIO编程/media/dca5742acd83b6d3f86f5b3af9cf1fcb.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/dca5742acd83b6d3f86f5b3af9cf1fcb.png rename to Java/05JavaIO编程/media/dca5742acd83b6d3f86f5b3af9cf1fcb.png diff --git a/Java/05Java文件IO与网络编程/media/e9ef17fc1494294fd805ec482f8fe2cc.png b/Java/05JavaIO编程/media/e9ef17fc1494294fd805ec482f8fe2cc.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/e9ef17fc1494294fd805ec482f8fe2cc.png rename to Java/05JavaIO编程/media/e9ef17fc1494294fd805ec482f8fe2cc.png diff --git a/Java/05Java文件IO与网络编程/media/eaac8b5cec8dde91bba8c2d0ebf4df12.png b/Java/05JavaIO编程/media/eaac8b5cec8dde91bba8c2d0ebf4df12.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/eaac8b5cec8dde91bba8c2d0ebf4df12.png rename to Java/05JavaIO编程/media/eaac8b5cec8dde91bba8c2d0ebf4df12.png diff --git a/Java/05Java文件IO与网络编程/media/f28b2b1dc1614e898cb4255e41d37d00.png b/Java/05JavaIO编程/media/f28b2b1dc1614e898cb4255e41d37d00.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/f28b2b1dc1614e898cb4255e41d37d00.png rename to Java/05JavaIO编程/media/f28b2b1dc1614e898cb4255e41d37d00.png diff --git a/Java/05Java文件IO与网络编程/media/f2f880588756d88cbf5083a94fbd41ae.jpeg b/Java/05JavaIO编程/media/f2f880588756d88cbf5083a94fbd41ae.jpeg similarity index 100% rename from Java/05Java文件IO与网络编程/media/f2f880588756d88cbf5083a94fbd41ae.jpeg rename to Java/05JavaIO编程/media/f2f880588756d88cbf5083a94fbd41ae.jpeg diff --git a/Java/05Java文件IO与网络编程/media/f4495b0ffb8c7fa60db31e6bfad35328.png b/Java/05JavaIO编程/media/f4495b0ffb8c7fa60db31e6bfad35328.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/f4495b0ffb8c7fa60db31e6bfad35328.png rename to Java/05JavaIO编程/media/f4495b0ffb8c7fa60db31e6bfad35328.png diff --git a/Java/05Java文件IO与网络编程/media/f5953ff98bf276f97b08461d9460e10b.png b/Java/05JavaIO编程/media/f5953ff98bf276f97b08461d9460e10b.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/f5953ff98bf276f97b08461d9460e10b.png rename to Java/05JavaIO编程/media/f5953ff98bf276f97b08461d9460e10b.png diff --git a/Java/05Java文件IO与网络编程/media/f658002b86035d44ed08b7e2dbd4fffc.png b/Java/05JavaIO编程/media/f658002b86035d44ed08b7e2dbd4fffc.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/f658002b86035d44ed08b7e2dbd4fffc.png rename to Java/05JavaIO编程/media/f658002b86035d44ed08b7e2dbd4fffc.png diff --git a/Java/05Java文件IO与网络编程/media/f837ce408bd2404325047c0762c206db.png b/Java/05JavaIO编程/media/f837ce408bd2404325047c0762c206db.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/f837ce408bd2404325047c0762c206db.png rename to Java/05JavaIO编程/media/f837ce408bd2404325047c0762c206db.png diff --git a/Java/05Java文件IO与网络编程/media/f8f1212105e495ccfca7866fb6baaf26.png b/Java/05JavaIO编程/media/f8f1212105e495ccfca7866fb6baaf26.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/f8f1212105e495ccfca7866fb6baaf26.png rename to Java/05JavaIO编程/media/f8f1212105e495ccfca7866fb6baaf26.png diff --git a/Java/05Java文件IO与网络编程/media/f9577fd8236c564d81c08514aaa46e3c.png b/Java/05JavaIO编程/media/f9577fd8236c564d81c08514aaa46e3c.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/f9577fd8236c564d81c08514aaa46e3c.png rename to Java/05JavaIO编程/media/f9577fd8236c564d81c08514aaa46e3c.png diff --git a/Java/05Java文件IO与网络编程/media/fb087dd562da5b0cebc1224cb5c0e3ac.png b/Java/05JavaIO编程/media/fb087dd562da5b0cebc1224cb5c0e3ac.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/fb087dd562da5b0cebc1224cb5c0e3ac.png rename to Java/05JavaIO编程/media/fb087dd562da5b0cebc1224cb5c0e3ac.png diff --git a/Java/05Java文件IO与网络编程/media/fde4f0671aec53278e9e0cdf7c6f9b6d.png b/Java/05JavaIO编程/media/fde4f0671aec53278e9e0cdf7c6f9b6d.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/fde4f0671aec53278e9e0cdf7c6f9b6d.png rename to Java/05JavaIO编程/media/fde4f0671aec53278e9e0cdf7c6f9b6d.png diff --git a/Java/05Java文件IO与网络编程/media/fdff5669c899369c5ac4faa37e6a2df3.png b/Java/05JavaIO编程/media/fdff5669c899369c5ac4faa37e6a2df3.png similarity index 100% rename from Java/05Java文件IO与网络编程/media/fdff5669c899369c5ac4faa37e6a2df3.png rename to Java/05JavaIO编程/media/fdff5669c899369c5ac4faa37e6a2df3.png diff --git a/Java/05Java文件IO与网络编程/附录1:分布式计算.md b/Java/05JavaIO编程/附录1:分布式计算.md similarity index 100% rename from Java/05Java文件IO与网络编程/附录1:分布式计算.md rename to Java/05JavaIO编程/附录1:分布式计算.md diff --git a/Java/05Java文件IO与网络编程/附录2:流的选择.md b/Java/05JavaIO编程/附录2:流的选择.md similarity index 100% rename from Java/05Java文件IO与网络编程/附录2:流的选择.md rename to Java/05JavaIO编程/附录2:流的选择.md diff --git a/Java/05Java文件IO与网络编程/附录3:IO、网络编程与web开发的关系.md b/Java/05JavaIO编程/附录3:IO、网络编程与web开发的关系.md similarity index 100% rename from Java/05Java文件IO与网络编程/附录3:IO、网络编程与web开发的关系.md rename to Java/05JavaIO编程/附录3:IO、网络编程与web开发的关系.md diff --git a/Java/06Java生态库/apa b/Java/06Java生态库/apa deleted file mode 100644 index e69de29b..00000000 diff --git a/Java/06Java生态库/apache-httpcomponents.md b/Java/06Java生态库/apache-httpcomponents.md deleted file mode 100644 index cfc6c541..00000000 --- a/Java/06Java生态库/apache-httpcomponents.md +++ /dev/null @@ -1 +0,0 @@ -https://hc.apache.org/ \ No newline at end of file diff --git a/Java/06Java生态库/caffeine.md b/Java/06Java生态库/caffeine.md index 0dc898a4..9df61d2f 100644 --- a/Java/06Java生态库/caffeine.md +++ b/Java/06Java生态库/caffeine.md @@ -1,4 +1,4 @@ -Caffeine本地缓存详解 +# Caffeine本地缓存详解 ## 1 概述 diff --git a/Java/07JVM编译原理/02 Java内存区域与内存溢出.md b/Java/07JVM编译原理/02 Java内存区域与内存溢出.md index f832a3a9..54694eab 100644 --- a/Java/07JVM编译原理/02 Java内存区域与内存溢出.md +++ b/Java/07JVM编译原理/02 Java内存区域与内存溢出.md @@ -54,9 +54,79 @@ Java程序通过栈上的reference数据来操作堆上的具体对象。 ## 2.4 OOM +### 1.什么是OOM? + +OOM,全称“Out Of Memory”,翻译成中文就是“内存用完了”,来源于java.lang.OutOfMemoryError。看下关于的官方说明: Thrown when the Java Virtual Machine cannot allocate an object because it is out of memory, and no more memory could be made available by the garbage collector. 意思就是说,当JVM因为没有足够的内存来为对象分配空间并且垃圾回收器也已经没有空间可回收时,就会抛出这个error(注:非exception,因为这个问题已经严重到不足以被应用处理)。 + +### 2.为什么会OOM? + +为什么会没有内存了呢?原因不外乎有两点: + +* 1)分配的少了:比如虚拟机本身可使用的内存(一般通过启动时的VM参数指定)太少。 +* 2)应用用的太多,并且用完没释放,浪费了。此时就会造成内存泄露或者内存溢出。主要分为以下两种情况: + * **内存泄露**:申请使用完的内存没有释放,导致虚拟机不能再次使用该内存,此时这段内存就泄露了,因为申请者不用了,而又不能被虚拟机分配给别人用。 + * **内存溢出**:申请的内存超出了JVM能提供的内存大小,此时称之为溢出。 + +在之前没有垃圾自动回收的日子里,比如C语言和C++语言,我们必须亲自负责内存的申请与释放操作,如果申请了内存,用完后又忘记了释放,比如C++中的new了但是没有delete,那么就可能造成内存泄露。偶尔的内存泄露可能不会造成问题,而大量的内存泄露可能会导致内存溢出。 + +而在Java语言中,由于存在了垃圾自动回收机制,所以,我们一般不用去主动释放不用的对象所占的内存,也就是理论上来说,是不会存在“内存泄露”的。但是,如果编码不当,比如,将某个对象的引用放到了全局的Map中,虽然方法结束了,但是由于垃圾回收器会根据对象的引用情况来回收内存,导致该对象不能被及时的回收。如果该种情况出现次数多了,就会导致内存溢出,比如系统中经常使用的缓存机制。Java中的内存泄露,不同于C++中的忘了delete,往往是逻辑上的原因泄露。 + + + +### 3.OOM类型 + +JVM内存模型: + +按照JVM规范,JAVA虚拟机在运行时会管理以下的内存区域: + +- 程序计数器:当前线程执行的字节码的行号指示器,线程私有 +- JAVA虚拟机栈:Java方法执行的内存模型,每个Java方法的执行对应着一个栈帧的进栈和出栈的操作。 +- 本地方法栈:类似“ JAVA虚拟机栈 ”,但是为native方法的运行提供内存环境。 +- JAVA堆:对象内存分配的地方,内存垃圾回收的主要区域,所有线程共享。可分为新生代,老生代。 +- 方法区:用于存储已经被JVM加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。Hotspot中的“永久代”。 +- 运行时常量池:方法区的一部分,存储常量信息,如各种字面量、符号引用等。 +- 直接内存:并不是JVM运行时数据区的一部分, 可直接访问的内存, 比如NIO会用到这部分。 + +按照JVM规范,除了程序计数器不会抛出OOM外,其他各个内存区域都可能会抛出OOM。 + + 最常见的OOM情况有以下三种: + +- java.lang.OutOfMemoryError: Java heap space ------>java堆内存溢出,此种情况最常见,一般由于内存泄露或者堆的大小设置不当引起。对于内存泄露,需要通过内存监控软件查找程序中的泄露代码,而堆大小可以通过虚拟机参数-Xms,-Xmx等修改。 + +- java.lang.OutOfMemoryError: PermGen space ------>java永久代溢出,即方法区溢出了,一般出现于大量Class或者jsp页面,或者采用cglib等反射机制的情况,因为上述情况会产生大量的Class信息存储于方法区。此种情况可以通过更改方法区的大小来解决,使用类似-XX:PermSize=64m -XX:MaxPermSize=256m的形式修改。另外,过多的常量尤其是字符串也会导致方法区溢出。 + +- java.lang.StackOverflowError ------> 不会抛OOM error,但也是比较常见的Java内存溢出。JAVA虚拟机栈溢出,一般是由于程序中存在死循环或者深度递归调用造成的,栈大小设置太小也会出现此种溢出。可以通过虚拟机参数-Xss来设置栈的大小。 + 各种触发OOM的方式 -1. OOM:Java heap Space:不断地创建新的对象 -Xms20m -Xmx20m +1. OOM:Java heap Space:在循环中不断地创建新的对象 -Xms20m -Xmx20m 2. 虚拟机栈和本地方法栈:无限制递归、不断创建线程执行方法 3. 方法区和常量池:不断执行String::intern()、使用CGlib不断创建类 -XX:MaxMetaspaceSize -XX:MaxPermSize 4. 本机直接内存溢出:Usafe不断直接分配内存空间 -XX:MaxDirectMemorySize +### 4.OOM分析--heapdump + +要dump堆的内存镜像,可以采用如下两种方式: + +- 设置JVM参数-XX:+HeapDumpOnOutOfMemoryError,设定当发生OOM时自动dump出堆信息。不过该方法需要JDK5以上版本。 +- 使用JDK自带的jmap命令。"jmap -dump:format=b,file=heap.bin " 其中pid可以通过jps获取。 + +dump堆内存信息后,需要对dump出的文件进行分析,从而找到OOM的原因。常用的工具有: + +- mat: eclipse memory analyzer, 基于eclipse RCP的内存分析工具。详细信息参见:http://www.eclipse.org/mat/,推荐使用。 +- jhat:JDK自带的java heap analyze tool,可以将堆中的对象以html的形式显示出来,包括对象的数量,大小等等,并支持对象查询语言OQL,分析相关的应用后,可以通过http://localhost:7000来访问分析结果。不推荐使用,因为在实际的排查过程中,一般是先在生产环境 dump出文件来,然后拉到自己的开发机器上分析,所以,不如采用高级的分析工具比如前面的mat来的高效。 + +这个链接:http://www.ibm.com/developerworks/cn/opensource/os-cn-ecl-ma/index.html中提供了一个采用mat分析的例子 。 + +注意:因为JVM规范没有对dump出的文件的格式进行定义,所以不同的虚拟机产生的dump文件并不是一样的。在分析时,需要针对不同的虚拟机的输出采用不同的分析工具(当然,有的工具可以兼容多个虚拟机的格式)。IBM HeapAnalyzer也是分析heap的一个常用的工具。 + +### 5.小结 + +涉及到的虚拟机的技术或者工具,往往需要考虑到虚拟机规范以及不同的虚拟机实现。尤其是针对虚拟机调优时,往往需要针对虚拟机在某些方面的实现策略来考虑,比如,不同的虚拟机的垃圾回收算法是不一样的,而这直接影响了虚拟机某些参数的设置,以达到虚拟机的最佳性能。 + +而针对JVM运行时的分析与诊断,则需要掌握分析基本方法,针对具体情况,运用虚拟机的原理,具体分析。一句话,水很深啊。 + + +### 6. Mat使用简介 + +MAT,全称Memory Analysis Tools,是一款分析Java堆内存的工具,可以快速定位到堆内泄漏问题。该工具提供了两种使用方式,一种是插件版,可以安装到Eclipse使用,另一种是独立版,可以直接解压使用。 + diff --git a/Java/07JVM编译原理/03 Java垃圾收集和内存分配.md b/Java/07JVM编译原理/03 Java垃圾收集和内存分配.md index b8248503..95d1c4c6 100644 --- a/Java/07JVM编译原理/03 Java垃圾收集和内存分配.md +++ b/Java/07JVM编译原理/03 Java垃圾收集和内存分配.md @@ -195,7 +195,7 @@ ![Serial收集器](image/2025-09-02T14:10:34.665Z.png) -算法对年轻一代使用mark-copy ,对老一代使用mark-sweep-compact 。 它在单个线程上工作。 执行时,它将冻结所有其他线程,直到垃圾回收操作结束。由于串行垃圾回收具有线程冻结特性,因此仅适用于非常小的程序。要使用串行GC,请使用以下JVM参数: +主要包括两个算法。算法对年轻一代使用mark-copy,称为Serial收集器;对老一代使用mark-sweep-compact,成为Serial Old收集器。 它在单个线程上工作。 执行时,它将冻结所有其他线程,直到垃圾回收操作结束。由于串行垃圾回收具有线程冻结特性,因此仅适用于非常小的程序。要使用串行GC,请使用以下JVM参数: ```java -XX:+UseSerialGC ``` @@ -214,42 +214,37 @@ ![Parallel](image/2025-09-02T14:19:00.028Z.png) -与串行GC相似,它在年轻代中使用mark-copy ,在老年代中使用mark-sweep-compact 。 多个并发线程用于标记和复制/压缩阶段。 您可以使用-XX:ParallelGCThreads=N选项配置线程数。如果您的主要目标是通过有效利用现有系统资源来提高吞吐量,那么Parallel Garbage Collector将适用于多核计算机。 使用这种方法,可以大大减少GC循环时间。 +主要包括两个算法。与串行GC相似,它在年轻代中使用mark-copy,称为Parallel Scavenge;在老年代中使用mark-sweep-compact,称为Parallel Old收集器。与串行GC最大的不同,就是使用多个并发线程用于标记和复制/压缩阶段。 + +可以使用-XX:ParallelGCThreads=N选项配置线程数。如果您的主要目标是通过有效利用现有系统资源来提高吞吐量,那么Parallel Garbage Collector将适用于多核计算机。 使用这种方法,可以大大减少GC循环时间。 ```java -XX:+UseParallelGC ``` 可以使用一下两个参数精确的控制吞吐量 -``` +```sh -XX:MaxGCPauseMills:最大 GC 停顿的秒数; -XX:GCTimeRatio 用户期望虚拟机消耗在GC上的时间不超过程序运行时间的1/(1+N),默认值为99。 -XX:+UseAdaptiveSizePolicy:一个开关参数,打开后就无需手工指定 -Xmn,-XX:SurvivorRatio 等参数了,虚拟机会根据当前系统的运行情况收集性能监控信息,自行调整。 ``` 特点: -* 吞吐量优先。,其他收集器关注于尽可能缩短垃圾收集时用户线程的停顿时间,而 Parallel Scavenge 收集器的目的是达到一个可控的吞吐量。 +* 吞吐量优先。其他收集器关注于尽可能缩短垃圾收集时用户线程的停顿时间,而 Parallel Scavenge 收集器的目的是达到一个可控的吞吐量。 吞吐量 = 运行用户代码时间 / ( 运行用户代码时间 + 垃圾收集时间 ) -适用场景 +适用场景: * Parallel Scavenge 收集器不管是新生代还是老年代都是多个线程同时进行垃圾收集,十分适合于应用在注重吞吐量以及 CPU 资源敏感的场合。 ### ParNew+CMS收集器 - +这两个收集器经常配合使用。 ![Parnew young](image/2025-09-02T14:15:02.924Z.png) -ParNew收集器支持多线程并行,同时使用多条线程进行垃圾收集。一般搭配在服务端使用。 - -特点: -* 标记复制算法。 - - +ParNew收集器采用标记复制算法,支持多线程并行,同时使用多条线程进行垃圾收集。一般搭配CMS在服务端使用。 ![总结](image/2025-09-02T14:49:03.392Z.png) - - CMS垃圾回收实质上是一种升级的标记-清除方法。 它using multiple threads扫描堆内存。 对其进行了修改,以利用更快的系统并增强了性能。它尝试通过与应用程序线程concurrently执行大多数垃圾回收工作来最大程度地减少由于垃圾回收导致的​​暂停。 它在年轻一代中使用并行的世界停止mark-copy算法,而在老一代中使用大多数并发的mark-sweep算法。 ```java -XX:+UseConcMarkSweepGC @@ -317,7 +312,7 @@ G1(垃圾优先)垃圾收集器已在Java 7中提供,旨在长期替代CMS ``` ## 3.6 更高效的收集器 -### ZGC +### ZGC收集器 1. 内存占用、吞吐量、延迟不可能三角。 diff --git a/Java/Java问题排查和性能优化/01 问题排查和性能优化简介.md b/Java/07JVM编译原理/04 虚拟机性能监控与故障处理工具.md similarity index 60% rename from Java/Java问题排查和性能优化/01 问题排查和性能优化简介.md rename to Java/07JVM编译原理/04 虚拟机性能监控与故障处理工具.md index 89c65211..16aaeb99 100644 --- a/Java/Java问题排查和性能优化/01 问题排查和性能优化简介.md +++ b/Java/07JVM编译原理/04 虚拟机性能监控与故障处理工具.md @@ -1,16 +1,12 @@ # 生产环境如何排除和优化 JVM? https://cloud.tencent.com/developer/article/2177482 -通过前面几个课时的学习,相信你对 JVM 的理论及实践等相关知识有了一个大体的印象。而本课时将重点讲解 JVM 的排查与优化,这样就会对 JVM 的知识点有一个完整的认识,从而可以更好地应用于实际工作或者面试了。 - -我们本课时的面试题是,生产环境如何排查问题? - -## 典型回答 +## 问题排查工具有哪些 如果是在生产环境中直接排查 JVM 的话,最简单的做法就是使用 JDK 自带的 6 个非常实用的命令行工具来排查。它们分别是:jps、jstat、jinfo、jmap、jhat 和 jstack,它们都位于 JDK 的 bin 目录下,可以使用命令行工具直接运行,其目录如下图所示: -![](https://gitee.com/krislin_zhao/IMGcloud/raw/master/img/20200620130932.png) +![问题排查示意图](image/2025-09-14T07:02:42.228Z.png) -### 1. jps(虚拟机进程状况工具) +## 1. jps(虚拟机进程状况工具) jps(JVM Process Status tool,虚拟机进程状况工具)它的功能和 Linux 中的 ps 命令比较类似,用于列出正在运行的 JVM 的 LVMID(Local Virtual Machine IDentifier,本地虚拟机唯一 ID),以及 JVM 的执行主类、JVM 启动参数等信息。语法如下: ```bash @@ -24,44 +20,302 @@ jps [options] [hostid] * -m:用于输出虚拟机启动时传递给主类 main() 方法的参数; * -v:用于输出启动时的 JVM 参数。 -### 2. jstat(虚拟机统计信息监视工具) +## 2. jstat(虚拟机统计信息监视工具) +> 参考文献https://blog.csdn.net/javalingyu/article/details/124800644 +### 概述 jstat(JVM Statistics Monitoring Tool,虚拟机统计信息监视工具)用于监控虚拟机的运行状态信息。 -例如,我们用它来查询某个 Java 进程的垃圾收集情况,示例如下: +Jstat名称:Java Virtual Machine statistics monitoring tool + +官方文档: +https://docs.oracle.com/javase/1.5.0/docs/tooldocs/share/jstat.html + + +功能介绍: +Jstat是JDK自带的一个轻量级小工具。它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。 +### 使用说明 -```bash -➜  jstat -gc 43704 - S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT    CGC    CGCT     GCT -10752.0 10752.0  0.0    0.0   65536.0   5243.4   175104.0     0.0     4480.0 774.0  384.0   75.8       0    0.000   0      0.000   -          -    0.000 ``` -参数说明如下表所示: +C:\Users\Administrator>jstat -help +Usage: jstat -help|-options + jstat -