java源码分析(java源码分析工具)
本文目录一览:
JVM源码分析之一个Java进程究竟能创建多少线程
线程大家都熟悉,new Thread().start()即会创建一个线程,这里我首先指出一点new Thread()其实并不会创建一个真正的线程,只有在调用了start方法之后才会创建一个线程,这个大家分析下Java代码就知道了
Thread的构造函数是纯Java代码,start方法会调到一个native方法start0里,而start0其实就是JVM_StartThread这个方法!
java源代码分析 实在是不太会,求高手教教我。
package test2;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class JavaCodeAnalyzer {
public static void analyze(File file) throws IOException{
//FileOutputStream fos = new FileOutputStream("F;"+File.separator+"result.txt");
if(!(file.getName().endsWith(".txt")||file.getName().endsWith(".java"))){
System.out.println("输入的分析文件格式不对!");
}
InputStream is= new FileInputStream(file);
BufferedReader br= new BufferedReader(new InputStreamReader(is));
String temp;
int count=0;
int countSpace=0;
int countCode=0;
int countDesc=0;
MapString, Integer map = getKeyWords();
while((temp=br.readLine())!=null){
countKeys(temp, map);
count++;
if(temp.trim().equals("")){
countSpace++;
}else if(temp.trim().startsWith("/*")||temp.trim().startsWith("//")){
countDesc++;
}else{
countCode++;
}
}
System.out.printf("代码行数:"+countCode+"占总行数的%4.2f\n",(double)countCode/count);
System.out.printf("空行数:"+countSpace+"占总行数的%4.2f\n",(double)countSpace/count);
System.out.printf("注释行数:"+countDesc+"占总行数的%4.2f\n",(double)countDesc/count);
System.out.println("总行数:"+count);
System.out.println("出现最多的5个关键字是:");
System.out.println("");
System.out.println("");
System.out.println("");
System.out.println("");
System.out.println("");
}
public static void main(String[] args) {
getKeyWords();
File file = new File("F://Test.java");
try {
analyze(file);
} catch (IOException e) {
// TODO 自动生成 catch 块
e.printStackTrace();
}
}
public static MapString,Integer getKeyWords(){
MapString,Integer map = new HashMapString, Integer();
String[]keywords = {"abstract","assert","boolean","break","byte","case","catch","char","class","continue","default","do","double","else","enum","extends","final","finally","float","for","if","implements","import","instanceof","int","interface","long","native","new","package","private","protected","public","return"," strictfp","short","static","super"," switch","synchronized","this","throw","throws","transient","try","void","volatile","while","goto","const"};
for(String s:keywords){
map.put(s, 0);
}
return map;
}
public static void countKeys(String s,MapString,Integer map){
SetString keys = map.keySet();
for(String ss:keys){
if(s.indexOf(ss)!=-1){
map.put(ss, map.get(ss)+1);
}
}
}
}
上班没啥时间了,还有点没写完,你在想想。
Java大神如何学习和分析Java框架的源码
1、拿到代码查看项目当中是否有readme这样的文件,如果没有查看是否有文档之类的
2、代码当中没有文档,那么就想你的同事或者其他人要这个框架的介绍或者资料
3、先请教别人这个框架的大体思路
4、自己独立去按照文档或者其他人说的思路去看代码
5、不懂的地方全部记录下面,一次行去问,有的时候很多问题在你看到后面的东西的时候就自然明白了
6、看懂了代码之后自己尝试着写一个,看自己的理解是否正确就这么多了。
如何研究Java的一些框架源码
基本的思路就是先将源码构建出来,并且是可以运行的。比如CAS和activemq直接就是可以运行的。比如spring可以构建一个使用spring引用的web工程,然后去掉spring相应的jar包,改成spring的源码依赖。简言之就是能让源码跑起来。这样才能打断点,跟踪调试。
再往下就是核心部分了。
首先,最好是熟悉这个产品和框架的使用。如果都不会用就去看源码,会有很多地方理解不上去。所以一定要会用。不用每一个细节都会用,至少整体的工作流程要明白。
其次就是对于他包含了那几个部分有所了解,比如一个一个应用可能会有容器类,存储部分,网络通讯部分等组成,对整体框架结构要有所了解。
再次之就是可以提前找一些该框架深入的源码分析作为辅助理解看看。
最后就是看源码细节了。
一般来说,一个产品中都有几个做类似事情 的不同实现。比如activemq,有多个持久层的实现,包括jdbc,kahadb还有内存存储等。一般你抓住一个你最常用方式,比如jdbc看就好。其他的存储方式都是相同的存储接口的实现。