Java和Scala学习日记7

来源:互联网 发布:正方软件股份有限公司 编辑:程序博客网 时间:2024/05/19 19:33

1. Lucene索引过程的核心类

解析:

(1)IndexWriter:它负责创建新索引或者打开已有索引,以及向索引中添加、删除或更新被索引文档的信息。

(2)Directory:它描述了Lucene索引的存放位置,并且是一个抽象类,它的子类负责具体指定索引的存储路径。

(3)Analyzer:它由IndexWriter的构造方法指定的,它负责从被索引文本文件中提取语汇单元,并剔除无用信息。

(4)Document:它代表一些Field的集合。

(5)Field:索引中的每个文档都包含一个或多个不同命名的域,这些域包含在Field类中。


2. Lucene搜索过程的核心类

解析:

(1)IndexSearcher:它用于搜索由IndexWriter类创建的索引。

(2)Term:它是搜索功能的基本单元,包含一对字符串元素:域名和单词(或域文本值)。

(3)Query:它是查询子类共同的抽象父类。

(4)TermQuery:它是Lucene提供的最基本的查询类型,用来匹配指定域中包含特定项的文档。

(5)TopDocs:它是一个简单指针容器,指针一般指向前N个排名的搜索结果,搜索结果即匹配查询条件的文档。


3. SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder"

解析:

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-nop --><dependency>    <groupId>org.slf4j</groupId>    <artifactId>slf4j-nop</artifactId>    <version>1.7.25</version>    <scope>test</scope></dependency>


4. Drools生态系统

解析:

(1)Drools Engine:Drools Expert is the rule engine and Drools Fusion does complex event processing (CEP). 

Distribution zip contains binaries, examples, sources and javadocs.

(2)Drools and jBPM integration:Drools and jBPM integration with third party project like Spring. Distribution zip 

contains binaries, examples and sources.

(3)Drools Workbench:Drools Workbench is the web application and repository to govern Drools and jBPM 

assets. See documentation for details about installation.

(4)Drools and jBPM tools:Eclipse plugins and support for Drools, jBPM and Guvnor functionality. Distribution 

zip contains binaries and sources.

(5)KIE Execution Server:Standalone execution server that can be used to remotely execute rules using REST, 

JMS or Java interface. Distribution zip contains WAR files for all supported containers.


5. KieServices,KieContainer和KieSession

解析:

(1)KieServices:通过KieServices.Factory.get()获得,为其它Kie工具提供服务。

(2)KieContainer:从KieServices中获得KieContainer实例,并且加载kmodule.xml文件和规则文件。

(3)KieSession:建立KieSession到规则文件的通信管道。


6. IDEA调试快捷键

解析:

(1)Step Into(F7):进入子函数。

(2)Step Over(F8):越过子函数,但子函数会执行。

(3)Step Out(Shift+F8):跳出子函数。


7. InputStream,InputStreamReader,BufferedReader

解析:

(1)InputStream是字节输入流的所有类的超类,一般使用它的子类,比如FileInputStream等;OutputStream是字节

输出流的所有类的超类,一般使用它的子类,比如FileOutputStream等。

(2)InputStreamReader是Reader的子类,将输入的字节流变为字符流,即将一个字节流的输入对象变为字符流的

输入对象;OutputStreamWriter是Writer的子类,将输出的字符流变为字节流,即将一个字符流的输出对象变为字节

流的输出对象。

(3)BufferedReader由Reader类扩展而来,提供通用的缓冲方式文本读取,readLine读取一个文本行,从字符输入

流中读取文本,缓冲各个字符,从而提供字符、数组和行的高效读取;BufferedWriter由Writer类扩展而来,提供通用

的缓冲方式文本写入,newLine使用平台的行分隔符,将文本写入字符输出流,缓冲各个字符,从而提供单个字符、

数组和字符串的高效写入。


8. Javac编译器 

解析:Javac编译器的作用是将符合Java语言规范的的源代码转换成JVM规范的Java字节码。如下所示:

(1)词法分析器组件:将源代码转换为Token流。

(2)语法分析器组件:将Token流转换为抽象语法树。

(3)语义分析器组件:将抽象语法树转换为注解抽象语法树。

(4)代码生成器组件:将注解抽象语法树转换为JVM字节码。


9. JVM组成

解析:JVM由ClassLoader(类加载器),Runtime Data Area(运行时数据区),Execution Engine(执行引擎),

Native Interface(本地接口)等组成。如下所示:

(1)ClassLoader:负责加载class文件,至于它是否能运行,则由Execution Engine决定。

(2)Native Interface:负责调用本地接口的。

(3)Execution Engine:Class文件被加载后,会把指令和数据放入内存中,它负责把这些命令解释给操作系统。

(4)Runtime Data Area:Stack,Heap,Method Area,PC Register,Native Method Stack。


10. JVM内存结构

解析:

(1)Java堆(Heap):Java虚拟机所管理的内存中最大的一块。它是被所有线程共享的一块内存区域,在虚拟机启

动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。

(2)方法区(Method Area):方法区与Java堆一样,它是各个线程共享的内存区域,它用于存储已被虚拟机加载

的类信息、常量、静态变量、即时编译器编译后的代码等数据。

(3)程序计数器(Program Counter Register):程序计数器是一块较小的内存空间,它的作用可以看做是当前线程

所执行的字节码的行号指示器。

(4)JVM栈(JVM Stacks):与程序计数器一样,它也是线程私有的,它的生命周期与线程相同。它描述的是Java

方法执行的内存模型:每个方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作

栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在JVM栈中从入栈到出

栈的过程。

(5)本地方法栈(Native Method Stacks):它与JVM栈所发挥的作用是非常相似的,其区别不过是JVM栈为虚拟机

执行Java方法(也就是字节码)服务,而本地方法栈则是为虚拟机使用到的Native方法服务。


11. GC算法

解析:GC最基础的算法有三种:标记-清除算法、复制算法、标记-压缩算法,常用的垃圾回收器一般都采用分代收集

算法。如下所示:

(1)标记-清除算法:“标记-清除”(Mark-Sweep)算法,如它的名字一样,算法分为“标记”和“清除”两个阶段:首先

标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。

(2)复制算法:“复制”(Copying)的收集算法,它将可用内存按容量划分为大小相等的两块,每次只使用其中的一

块。当这一块的内存用完了,就将还存活着的对象复制到另外一块上面,然后再把已使用过的内存空间一次清理掉。

(3)标记-压缩算法:标记过程仍然与“标记-清除”算法一样,但后续步骤不是直接对可回收对象进行清理,而是让所

有存活的对象都向一端移动,然后直接清理掉端边界以外的内存。

(4)分代收集算法:“分代收集”(Generational Collection)算法,把Java堆分为新生代和老年代,这样就可以根据

各个年代的特点采用最适当的收集算法。


12. 垃圾回收器 [2]

解析:

(1)Serial收集器:串行收集器是最古老,最稳定及效率高的收集器,可能会产生较长停顿,只用一个线程去回收。

(2)ParNew收集器:ParNew收集器其实就是Serial收集器的多线程版本。

(3)Parallel收集器:Parallel Scavenge收集器类似ParNew收集器,Parallel收集器更关注系统的吞吐量。

(4)Parallel Old收集器:Parallel Old是Parallel Scavenge收集器的老年代版本,使用多线程和“标记-整理”算法。

(5)CMS收集器:CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器。

(6)G1收集器:G1(Garbage-First)是一款面向服务器的垃圾收集器,主要针对配备多颗处理器及大容量内存的

机器,以极高概率满足GC停顿时间要求的同时,还具备高吞吐量性能特征。


13. Java对象存活判断

解析:

(1)引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回

收。此方法简单,无法解决对象相互循环引用的问题。

(2)可达性分析(Reachability Analysis):从GC Roots开始向下搜索,搜索所走过的路径称为引用链。当一个对

象到GC Roots没有任何引用链相连时,则证明此对象是不可用的,不可达对象。


14. JVM调优命令

解析: 

(1)jps:JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。

(2)jstat:JVM statistics Monitoring是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装

载、内存、垃圾收集、JIT编译等运行数据。

(3)jmap:JVM Memory Map命令用于生成heap dump文件。

(4)jhat:JVM Heap Analysis Tool命令是与jmap搭配使用,用来分析jmap生成的dump,jhat内置了一个微型的

HTTP/HTML服务器,生成dump的分析结果后,可以在浏览器中查看。

(5)jstack:用于生成java虚拟机当前时刻的线程快照。

(6)jinfo:JVM Configuration info这个命令作用是实时查看和调整虚拟机运行参数。


15. JVM调优工具

解析:

(1)jconsole:Java Monitoring and Management Console是从Java 5开始,在JDK中自带的Java监控和管理控制

台,用于对JVM中内存,线程和类等的监控。

(2)jvisualvm:JDK自带全能工具,可以分析内存快照、线程快照;监控内存变化、GC变化等。

(3)MAT(Memory Analyzer Tool):一个基于Eclipse的内存分析工具,是一个快速、功能丰富的Java Heap分析

工具,它可以帮助我们查找内存泄漏和减少内存消耗。

(4)GChisto:一款专业分析GC日志的工具。


16. 类加载器

解析:

(1)启动类加载器(Bootstrap ClassLoader):它负责将存放在<JAVA_HOME>\lib目录中的,或者被-

Xbootclasspath参数所指定的路径中的,并且是虚拟机识别的类库加载到虚拟机内存中。启动类加载器无法被Java程

序直接引用。

(2)扩展类加载器(Extension ClassLoader):它负责加载<JAVA_HOME>\lib\ext目录中的,或者被java.ext.dirs系

统变量所指定的路径中的所有类库,开发者可以直接使用扩展类加载器。

(3)应用程序类加载器(Application ClassLoader):它负责加载用户类路径(ClassPath)上所指定的类库,开发

者可以直接使用这个类加载器,如果应用程序中没有自定义过自己的类加载器,通常这个就是程序中默认类加载器。


17. GC和Full GC

解析:

(1)GC(或Minor GC):收集生命周期短的区域(Young area),所采用的是复制算法。

(2)Full GC(或Major GC):收集生命周期短的区域(Young area)和生命周期比较长的区域(Old area),对整

个堆进行垃圾收集。所采用的是标记-清除算法。


18. JVM参数选项

解析:在Java中,堆被划分成2个不同的区域:新生代(Young)、老年代(Old)。新生代(Young)又被划分为3个

区域:Eden、From Survivor、To Survivor。这样划分的目的是为了使JVM能够更好的管理堆内存中的对象,包括内

存的分配以及回收。如下所示:

(1)-Xms:初始堆大小。

(2)-Xmx:最大堆大小。

(3)-Xmn:新生代大小。通常为Xmx的1/3或1/4。新生代=Eden+2个Survivor空间。实际可用空间=Eden+1个

Survivor,即90%。 

(4)-Xss:每个线程堆栈大小。

(5)-XX:NewRatio:新生代与老年代比例。比如-XX:NewRatio=2,那么新生代占整个堆空间的1/3,老年代占2/3。

(6)-XX:SurvivorRatio:新生代中Eden与Survivor的比值。默认值为8,即Eden占新生代空间的8/10,另外两个

Survivor各占1/10。 

(7)-XX:PermSize:永久代(方法区)的初始大小。

(8)-XX:MaxPermSize:永久代(方法区)的最大值。

(9)-XX:+PrintGCDetails:GC信息。

(10)-XX:+HeapDumpOnOutOfMemoryError:让虚拟机在发生内存溢出时Dump出当前的内存堆转储快照。


19. Nagios

解析:Nagios是一个监视系统运行状态和网络信息的监视系统。它能监视所指定的本地或远程主机以及服务,同时提

供异常通知功能等。它可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人

员查看网络状态,各种系统问题,以及日志等。


20. zabbix

解析:zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。它能监视各种

网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。

   

参考文献:

[1] 搭建Drools开发环境:http://blog.csdn.net/qq1010885678/article/details/51001037

[2] GC算法和垃圾收集器:http://www.cnblogs.com/ityouknow/p/5614961.html

[3] Java类的加载机制:http://www.ityouknow.com/jvm/2017/08/19/class-loading-principle.html

原创粉丝点击