# Java 進階知識

MarlonBrando1998 2022-01-08 04:56:07 阅读数:76

java

Java 程序執行原理

  • 編寫Java源文件,.java文件
  • javac編譯java源文件,編譯生成.class的字節碼文件
  • JVM將字節碼文件翻譯為機器碼(0,1)二進制
    在這裏插入圖片描述

Jvm 加載Class 文件

jvm類加載見地址 https://blog.csdn.net/qq_37248504/article/details/106302662

加載、連接(驗證、准備、解析)、初始化

加載:找到類對應class文件,讀入到內存中。

ClassLoader 雙親委托機制

​ 當一個類加載的時候會先委托給自己的父類去加載,所有的類加載鬥湖i委托給頂層的父類去加載,保證了Java核心庫的安全。

  • 啟動類加載器(Bootstrap Classloader):加載jdk 中rt.jar中java 下面的類
  • 擴展類加載器(Extension Classloader):加載 javahome下/lib/ext中的類
  • 應用程序類加載器(Application Classloader):加載用戶路徑自己編寫的以及應用的第三方jar包中的類
  • 自定義加載器(Custom Classloader):特殊類的加載
    在這裏插入圖片描述

連接:內存中生成的原始class對象

驗證字節碼文件的合法性、為對象和變量分配內存、將類中的符號引用轉為直接引用

初始化:調用<·Clinit>方法

  • 類的靜態變量、靜態方法的初始化

  • 先初始化該類的父類,如果類中有初始化語句,按照順序依次初始化語句

初始化的條件
  • 訪問類的靜態變量、靜態方法;

  • Class.forName()

  • 創建類的實例new一個對象;


Java IO、NIO

IO

Java IO 詳見博客:https://blog.csdn.net/qq_37248504/article/details/112207741

Java中IO是以流為基礎進行輸入輸出的,所有數據被串行化寫入輸出流,或者從輸入流讀入。

NIO

​ java.nio全稱java non-blocking IO,是指jdk1.4 及以上版本裏提供的新api(New IO) ,為所有的原始類型(boolean類型除外)提供緩存支持的數據容器,使用它可以提供非阻塞式的高伸縮性網絡。

  • JavaIO的流是阻塞的,當一個線程調用read() wirte()時改線程被阻塞,只到數據被讀取或寫入。
  • Java NIO非阻塞模式,當如果讀不到數據時候不阻塞,再此期間可以去幹別的事。
API的使用
  • 數據必須先讀入緩沖區再處理。

。。。有點難等後面再學。


Java 內存模型(JMM)

​ 內存模型描述了程序中各個變量(實例域、靜態域和數組元素)之間的關系,以及在實際計算機系統中將變量存儲到內存和從內存中取出變量這樣的底層細節。是一種虛擬機規範。

特點

可見性
  • 當使用synchronized給代碼加同步互斥鎖的時候,其它的線程不能訪問加鎖的資源,使內存不可見。
  • 可見性就是在多核或者多線程運行過程中內存的一種共享模式,在JMM模型裏面,通過並發線程修改變量值的時候,必須將線程變量同步回主存過後,其他線程才可能訪問到。
可排序性
  • 而在Java多線程程序裏面,JMM通過volatile來保證內存的有序訪問。
  • 從操作線程的角度看來,如果所有的指令執行都是按照普通順序進行,那麼對於一個順序運行的程序而言,可排序性也是順序的。

改圖來自百度:
在這裏插入圖片描述

。。。未完待續

版权声明:本文为[MarlonBrando1998]所创,转载请带上原文链接,感谢。 https://gsmany.com/2022/01/202201080456074059.html