跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Spring Boot 启动后为什么还会读取磁盘上的 jar, 还有为什么一个 jar 为什么会被读取多遍? 跪求大佬解答
未分類
6 1 月 2021

Spring Boot 启动后为什么还会读取磁盘上的 jar, 还有为什么一个 jar 为什么会被读取多遍? 跪求大佬解答

Spring Boot 启动后为什么还会读取磁盘上的 jar, 还有为什么一个 jar 为什么会被读取多遍? 跪求大佬解答

資深大佬 : Fangs123 0

根据 java 的 pid, 使用 pstree -p 命令, 得到共有 78 个相关线程.

然后使用 lsof 查看对应程序打开的句柄情况, 发现 jar 包或者目录有多条记录, 例如: spring-webmvc-5.0.5.RELEASE.jar 这个 jar 包就有 153 条, 并且有一半不是 mem, 而是文件标识符

另外 lsof -p 和 lsof -n |awk ‘{print $2}’|sort|uniq -c |sort -nr|more 统计的结果有什么不同?? lsof -p 统计出句柄是一千多, 后面脚本统计出来是七万多….

大佬有話說 (5)

  • 資深大佬 : qwerthhusn

    我理解这些 jar 包应该不会一下子全部加载到内存里面去,不然这起一下几百兆没了

    应该是读取个索引,后面需要加载类的时候再去一次次读取,

  • 資深大佬 : php8

    class 是 lazy load 的,首次使用时读入内存,然后不会再读。getResourceAsStream 获取的资源是不做 cache 的,每次使用都从 jar 文件里读。

  • 主 資深大佬 : Fangs123

    @php8 可是也不应该调用这么多次的 getResourceAsStream 啊, 并且不是几个 jar 包, 是许多 jar 包都有这种情况

  • 資深大佬 : php8

    @Fangs123 classloader 首次读取 jar 的时候已经打开了,关闭 classloader 的时候才会关闭 jar 文件

  • 資深大佬 : zoharSoul

    Java 句柄是什么意思?

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具