java - openjdk

来源:趣味经验馆 1.32W

<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>

java openjdk是什么,让我们一起了解一下?

OpenJDK是JDK的开放原始码版本,以GPL协议的形式放出。OpenJDK还可以运行在其他系统上,特别是那些基于PowerPC的机器上。 

那么 JDK 和 OpenJDK 有什么区别?

1、授权协议的不同。

OpenJDK 采用 GPL V2 协议放出,而 JDK 则采用 JRL 放出。两者协议虽然都是开放源代码的,但是在使用上的不同在于 GPL V2 允许在商业上使用,而 JRL 只允许个人研究使用。

2、OpenJDK 不包含 Deployment(部署)功能。

部署的功能包括:Browser Plugin、Java Web Start、以及 Java 控制皮肤,这些功能在 OpenJDK 中是找不到的。

3、OpenJDK 源代码不完整。

由于 SUN JDK 的一部分源代码因为产权的问题无法开放 OpenJDK 使用,其中最主要的部份就是 JMX 中的可选元件 SNMP 部份的代码。因此这些不能开放的源代码将它作成 plug,以供 OpenJDK 编译时使用,你也可以选择不要使用 plug。而 Icedtea 则为这些不完整的部分开发了相同功能的源代码(OpenJDK6),促使 OpenJDK 更加完整。

java openjdk

4、部分源代码用开源代码替换。

由于产权的问题,很多产权不是 SUN 的源代码被替换成一些功能相同的开源代码,比如说字体栅格化引擎,使用 Free Type 代替。

5、OpenJDK 只包含最精简的 JDK。

OpenJDK 不包含其他的软件包,比如 Rhino Java DB JAXP……,并且可以分离的软件包也都是尽量的分离,但是这大多数都是自由软件,你可以自己下载加入。

openjdk是怎样实现的?

java线程是通过start的方法启动执行的,主要内容在native方法start0中。

openjdk的写jni一般是一一对应的,Thread.java对应的就是Thread.c。

具体实例代码如下:

static JNINativeMethod methods[] = {    {"start0",           "()V",        (void *)&JVM_StartThread},    {"stop0",            "(" OBJ ")V", (void *)&JVM_StopThread},    {"isAlive",          "()Z",        (void *)&JVM_IsThreadAlive},    {"suspend0",         "()V",        (void *)&JVM_SuspendThread},    {"resume0",          "()V",        (void *)&JVM_ResumeThread},    {"setPriority0",     "(I)V",       (void *)&JVM_SetThreadPriority},    {"yield",            "()V",        (void *)&JVM_Yield},    {"sleep",            "(J)V",       (void *)&JVM_Sleep},    {"currentThread",    "()" THD,     (void *)&JVM_CurrentThread},    {"countStackFrames", "()I",        (void *)&JVM_CountStackFrames},    {"interrupt0",       "()V",        (void *)&JVM_Interrupt},    {"isInterrupted",    "(Z)Z",       (void *)&JVM_IsInterrupted},    {"holdsLock",        "(" OBJ ")Z", (void *)&JVM_HoldsLock},    {"getThreads",        "()[" THD,   (void *)&JVM_GetAllThreads},    {"dumpThreads",      "([" THD ")[[" STE, (void *)&JVM_DumpThreads},    {"setNativeName",    "(" STR ")V", (void *)&JVM_SetNativeThreadName},};

热门标签