1. 程式人生 > >JDK中的native方法原始碼實現

JDK中的native方法原始碼實現

java原始碼中的native方法是不能直接在jdk中看到的,因為jdk不是開源的,要看到的話需要sun授權才行,現在只有openjdk是被sun公司授權,所以要檢視的話,下載完整的OpenJDK原始碼包


接下來裡面解壓後找到jdk目錄(也就是OpenJDK裡的大部分類庫的實現)的內容了。其中 
src/
    share/       平臺無關的實現
    classes/     平臺無關的Java程式碼實現
    native/      平臺無關的native程式碼實現(主要是C)

classes與native目錄的結構就跟Java的包(package)目錄結構一樣,兩邊是對應的。知道這個關係就能很快找到JDK類庫裡Java一側宣告為native的方法在C裡的實現函式。 

相關推薦

JDKnative方法原始碼實現

java原始碼中的native方法是不能直接在jdk中看到的,因為jdk不是開源的,要看到的話需要sun授權才行,現在只有openjdk是被sun公司授權,所以要檢視的話,下載完整的OpenJDK原始碼包; 接下來裡面解壓後找到jdk目錄(也就是OpenJDK裡的大部分類庫的實現)的內容了。其中 src/

JAVAnative方法呼叫C語言實現學習

在java虛擬機器規範的記憶體管理劃分中,對於虛擬機器記憶體空間劃分中專門劃了一塊記憶體叫做“本地方法棧(Native Method Stack)”。本地方法棧是為了java專門用來呼叫native方法而劃分出來的一塊記憶體。 我們平時在閱讀jdk原始碼

javanative方法的使用

cat 語言 pub jvm 配置 his fde 應用程序 nic native關鍵字說明其修飾的方法是一個原生態方法,方法對應的實現不是在當前文件,而是在用其他語言(如C和C++)實現的文件中。Java語言本身不能對操作系統底層進行訪問和操作,但是可以通過JNI接口調用

Copy-On-Write寫時複製機制與JavaCopyOnWriteArrayList容器原始碼實現

Copy-on-Write機制簡稱COW,是一種併發設計策略。其基本思路是多執行緒同時共享同一個內容,當某個執行緒想要修改這個內容的時候,才會真正的把內容copy出去形成一個新的內容然後修改,其它的執行緒繼續讀舊的內容,直到修改完成。這是一種延時懶惰策略。 Copy-on-Write有

JDK註解的底層實現

前提 用Java快三年了,註解算是一個常用的型別,特別是在一些框架裡面會大量使用註解做元件標識、配置或者策略。但是一直沒有深入去探究JDK中的註解到底是什麼,底層是怎麼實現了?於是參考了一些資料,做了一次稍微詳細的分析。 JDK的註解描述 參考JavaSE-8裡面的JLS-9.6對註解的描述如下: 註解的宣

淺析JDKServiceLoader的原始碼

前提 緊接著上一篇《通過原始碼淺析JDK中的資源載入》,ServiceLoader是SPI(Service Provider Interface)中的服務類載入的核心類,也就是,這篇文章先介紹ServiceLoader的使用方式,再分析它的原始碼。 ServiceLoader的使用 這裡先列舉一個經典的例子,

Collectionssort()方法原始碼的簡單分析

Collections的sort方法程式碼: public static <T> void sort(List<T> list, Comparator<? super T> c) { Object[] a = list

Java多執行緒join方法實現

方法join的作用是使所屬的執行緒物件t正常執行run()方法中的任務,而使當前執行緒z進行阻塞,等待t銷燬後再繼續執行z後面的程式碼。 下面貼出join方法的原始碼: public final synchronized void join(long millis)

冷飯新炒:理解JDKUUID的底層實現

## 前提 `UUID`是`Universally Unique IDentifier`的縮寫,翻譯為通用唯一識別符號或者全域性唯一識別符號。對於`UUID`的描述,下面摘錄一下規範檔案`A Universally Unique IDentifier (UUID) URN Namespace`中的一些描述:

Java JDK原始碼解析之:native方法

初次看見native關鍵字是自己在看Scanner類原始碼中傳遞System.in引數實現列印,之後轉到System觀看原始碼時看見native關鍵字,關於native關鍵字筆者表示,是Java與C語言的通訊介面,因為Java語言沒有操作底層的條件,所以Java

Javanative方法實現(Java混用C/C++)

前言 native關鍵字說明其修飾的方法是一個原生態方法,方法對應的實現不是在當前檔案,而是在用其他語言(如C和C++)實現的檔案中。Java語言本身不能對作業系統底層進行訪問和操作,但是可以通過JNI介面呼叫其他語言來實現對底層的訪問。 JNI是Java本

深入理解JDK的Reference原理和原始碼實現

前提 這篇文章主要基於JDK11的原始碼和最近翻看的《深入理解Java虛擬機器-2nd》一書的部分內容,對JDK11中的Reference(引用)做一些總結。值得注意的是,通過筆者對比一下JDK11和JDK8對於java.lang.ref包的相關實現,發現程式碼變化比較大,因此本文的原始碼分析可能並不適合於J

C#單例的實現方法

inter sed .html thumb otto pri www ati code 本文實例講述了C#中單例的實現方法。分享給大家供大家參考。具體實現方法如下: 代碼如下: #region “實現這個窗口類的單例,單例類常用於被主窗口以show()方法打開的窗口

不使用JDK方法自己實現字符串轉整數

for parse 使用 har trim ++ exception int char 暫未考慮正負符號的情況。 public static int parseInt(String str) { if (str == null || str.tri

【並發編程】Future模式及JDK實現

[] 代碼 inter jpg 分離 src span 最終 提高 1.1、Future模式是什麽 先簡單舉個例子介紹,當我們平時寫一個函數,函數裏的語句一行行同步執行,如果某一行執行很慢,程序就必須等待,直到執行結束才返回結果;但有時我們可能並不急著需要其中某行的執行結果

JDK枚舉的底層實現

ati cto 國慶 andro local 同時 父類 one constant 前提 上一篇文章復習介紹了JDK中註解的底層實現,跟註解一樣比較常用,但是底層實現比較神秘的還有枚舉類型。趁著國慶假期的最後兩天,把JDK中枚舉的底層實現也進行一次探究。 通過例子查找本質

反射實現定位Servlet方法

public class BaseServlet extends HttpServlet{ @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws Servlet

graphics2D抽象方法graphics2D.drawString()的實現

我寫這篇博的原因: 首先Graphics2D是抽象類,裡面大部分方法是抽象方法,但是如graphics2D.drawString("Hello",0,200);進行繪圖不需要自己重寫,直接可用,這是為什麼? 先給出結論 總結: 類的繼承關係 1:Graphics->Gra

List去重(資料為物件的情況)及String的equals()方法和hashCode()方法原始碼分析

面試中經常被問到的list如何去重,用來考察你對list資料結構,以及相關方法的掌握,體現你的java基礎學的是否牢固。 我們大家都知道,set集合的特點就是沒有重複的元素。如果集合中的資料型別是基本資料型別,可以直接將list集合轉換成set,就會自動去除重複的元素,這個就相對比較簡單。上一篇

JSbind方法,apply方法,call方法實現

先分析下3個方法的作用 改變this的指向。 傳入引數。 call apply返回函式結果, bind 返回新函式 我們先從call開始 改變this指向 首先我們知道,物件上的方法,在呼叫時,this是指向物件的。 ler 0 =