JBD源代码分析
- 格式:pdf
- 大小:543.12 KB
- 文档页数:87


jdk源码剖析⼀:OpenJDK-Hotspot源码包⽬录结构
开启正⽂之前,先说⼀下源码剖析这⼀系列,就以“死磕到底”的精神贯彻始终,JDK--》JRE--》JVM(以openJDK代替)
最近想看看JDK8源码,但JDK中JVM(安装在本地C:\Program Files\Java\jdk1.8.0_121\jre\bin\server下jvm.dll)本⾝并不开源,只能找来openJDK来看(说是和JDK相似度很⾼)。源码包下载飞机票:
下载完后发现⽬录结构很多,⼤体如下:
⼀、OpenJDK 源码的⽬录结构
openjdk
—— corba:不流⾏的多语⾔、分布式通讯接⼝
—— hotspot:Java 虚拟机
—— jaxp:XML 处理
—— jaxws:⼀组 XML web services 的 API
—— jdk:java 开发⼯具包
—— —— 针对的部分
—— —— share:与平台⽆关的实现
—— langtools:Java 语⾔⼯具
—— nashorn:JVM 上的 运⾏时
其中Hotspot就是我们要看的JVM包
Hotspot:全称 Java HotSpot Performance Engine,是 Java 虚拟机的⼀个实现,包含了服务器版和桌⾯应⽤程序版。利⽤ JIT 及⾃适应优化技术(⾃动查找性能热点并进⾏动
态优化)来提⾼性能。
使⽤ java -version 可以查看 Hotspot 的版本。
⼆、Hotspot的⽬录结构
├─agent Serviceability Agent的客户端实现
├─make ⽤来build出HotSpot的各种配置⽂件
├─src HotSpot VM的源代码
│ ├─cpu CPU相关代码(汇编器、模板解释器、ad⽂件、部分runtime函数在这⾥实现)
│ ├─os 操作系相关代码
│ ├─os_cpu 操作系统+CPU的组合相关的代码
│ └─share 平台⽆关的共通代码
Java--基于JDK1.8的LinkedList源码分析
1,上周末我们⼀起分析了ArrayList的源码并进⾏了⼀些总结,因为最近在看Collection这⼀块的东西,下⾯的图也是⼤致的总结了
Collection⾥⾯重要的接⼝和类,如果没有意外的话后⾯基本上每⼀个都会和⼤家⼀起学习学习,所以今天也就和⼤家⼀起来看看LinkedList吧!
哦,不对,放错图了,是下⾯的图,嘿嘿嘿。。。
2,记得⾸次接触LinkedList还是在⼤学Java的时候,当时说起LinkedList的特性和应⽤场景:LinkedList基于双向链表适⽤于增删频繁且查
询不频繁的场景,线程不安全的且适⽤于单线程(这点和ArrayList很像)。然后还记得⼀个很深刻的是可以⽤LinkedList来实现栈和队列,
那让我们⼀起看⼀看源码到底是怎么来实现这些特点的
2.1 构造函数
public class LinkedList
extends AbstractSequentialList
implements List, Deque, Cloneable, java.io.Serializable
{
transient int size = 0;
transient Node first;
transient Node last;
public LinkedList() {
}
public LinkedList(Collection c) {
this();
addAll(c);
}
public boolean addAll(Collection c) {
return addAll(size, c);
}
public boolean addAll(int index, Collection c) {
checkPositionIndex(index);
Object[] a = c.toArray();
int numNew = a.length;
JDK8源码分析
JDK源码分析
基于JDK1.8------java lang Object
Object的类中的⽅法(13个⽅法)
registerNatives()
getClass()
hashCode()
equals()
clone()
toString()
notify()
notifyAll()
wait() 有三个⽅法重载
finalize()
源码:
/**
* Class {@code Object} is the root of the class hierarchy.
* Every class has {@code Object} as a superclass. All objects,
* including arrays, implement the methods of this class.
*
* @author unascribed
* @see ng.Class
* @since JDK1.0
*/
public class Object {
private static native void registerNatives();
static {
registerNatives();
}
public final native Class getClass();
public native int hashCode();
public boolean equals(Object obj) {
return (this == obj);
}
protected native Object clone() throws CloneNotSupportedException;
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
public final native void notify();
线程是程序的一个执行流程,Java虚拟机允许多个线程同时并发执行。
1. 构造方法
Java代码
1. public Thread() {
2. init(null, null, "Thread-" + nextThreadNum(), 0);
3. }
4.
5. // target - 任务
6. public Thread(Runnable target) {
7. init(null, target, "Thread-" + nextThreadNum(), 0);
8. }
9.
10. // group - 线程组,target - 任务
11. public Thread(ThreadGroup group, Runnable target) {
12. init(group, target, "Thread-" + nextThreadNum(), 0);
13. }
14.
15. // name - 线程名称
16. public Thread(String name) {
17. init(null, null, name, 0);
18. }
19.
20. // group - 线程组,name - 线程名称
21. public Thread(ThreadGroup group, String name) {
22. init(group, null, name, 0);
23. }
24.
25. // target - 任务,name - 线程名称
26. public Thread(Runnable target, String name) {
27. init(null, target, name, 0);