关于Java性能方面的东西,涉及挺多。一直想写个总结。
第一部分,还是介绍class loader(类加载器,译文不如原文流畅了,估计用英文原词吧),它主要用于在Java虚拟机运行时加载所需要的类。
一、这些类,有两部分:一部分是你的应用程序中的java类,另一部分是Java API中的类文件。加载器有两个重要的工作:
1. loading: 找到一个类, 并导入它的二进制数据表示
2. linking: 执行验证,准备,以及可能的解析工作
验证:确保导入的类型是正确的
准备:为类变量准备足够内存,并为相应的变量执行初始化操作
解析:从符号引用变为直接引用,同时加载该类所引用的所有类
二、JVM中缺省的class loader:
1. $JAVA_HOME/jre/lib/rt.jar被Bootstrap Class loader加载:
注意看到:sun/misc/Launcher$ExtClass, sun/misc/Launcher$AppClass这两个class
它是所有Class Loader的root class loader
2. Extention class loader:
来源于$JAVA_HOME/jre/lib/ext/*.jar
3. System Class Loader,这一级,就到了用户定义的$CLASSPATH中的class的加载了
用户定义的classloader都是System class loader的子class loader.
三、类加载顺序:
1. 首先从已经加载的cache中查找,如果加载过,则返回
2. 从父classloader中加载(递归查找), 这确保API中的class都是被BootStrap class loader加载
3. 如果2中找不到,则使用当前的classloader进行加载
这也可以看出,一个class loader只能看到它的祖先class loader和它自身加载的类。看不到子class loader加载的类。
System Class Loader可以通过 cl.getSystemClassLoader()得到。
四、指定系统classloader的参数:
Boot Class Path (Bootstrap CL)
-Xbootclasspath:<dir|zip|jar separated by ;or:>
-Xbootclasspath:/a (append to the end)
-Xbootclasspath:/p (prepend to the front)
Extention Class Path (Extention CL)
-Djava.ext.dirs= <dir|zip|jar separated by ;or:>
System Class Path (System CL)
-cp or -classpath <dir|zip|jar separated by ;or:>
-Djava.class.path= <dir|zip|jar separated by ;or:>
五、显式加载和隐式加载
1. 显式方式:
cl.loadClass() (cl是java.lang.ClassLoader的一个实例)
Class.forName() (当前classloader是起始classloader)
2. 隐式方式:
当被当成引用,类进行实例化,以及产生继承关系时,JVM将进行必要的解析并加载该类
因此,classloader显式的加载一个类,并隐式的加载所有其引用类
六、ClassLoader的跟踪信息:
java -verbose:class (class loading)
java -verbose:gc (gc output)
java -verbose:jni (jni output)
七、ClassLoader中的path
URLClassLoader l = new URLClassLoader(new URL[] { new URL( "file://D:/eclipse3.1/workspace/testclass/")});
URLClassLoader l = new URLClassLoader(new URL[] { new URL( "file://D:/eclipse3.1/workspace/testclass")});
以'/'结束,表示目录路径,可加载下边所有的class; 如果不是以'/'结束,则意味着它是一个jar或zip文件。
子类的父类的classloader必须是子类的classloader或祖先classloader。不同的classloader加载的同名class不能相互cast。
获取JVM当前线程栈信息:
Windows:
Ctrl + Break
Unix/Linux:
Ctrl + \
kill –QUIT <pid>
kill –SIGQUIT <pid>
参考资料:
Inside the Java Virtual Machine
Demystifying class loading problems
http://www-128.ibm.com/developerworks/java/library/j-dclp1/index.html
Java Platform Performance: Strategies and Tactics
http://java.sun.com/docs/books/performance/1st_edition/html/JPTitle.fm.html
http://www.javaperformancetuning.com/tips/nio.shtml
分享到:
相关推荐
Title: Java EE 7 Performance Tuning and Optimization Author: Osama Oransa Length: 398 pages Edition: 1 Language: English Publisher: Packt Publishing Publication Date: 2014-06-25 ISBN-10: 178217642X ...
Packt.Java.9.High.Performance.2017.11.epub Packt.Java.9.High.Performance.2017.11.epub
《High-Performance Java Persistence》是一本专注于Java持久化性能的书籍,作者Vlad Mihalcea,涵盖了数据库服务器、连接层、应用数据访问层、ORM框架、原生查询构建器、性能与扩展性、响应时间、吞吐量、数据库...
Ixia Performance Endpoint 7.30.45.32 for Windows 64位,看到没有人传就顺手传一个上来,支持配合其他网友分享的6.7版 Chariot控制端使用。
1. **Java反射基础**: - 反射API:`java.lang.reflect`包包含用于反射操作的核心类,如`Class`, `Field`, `Method`和`Constructor`。 - 动态类型:反射允许程序在运行时创建和操作任意类型的对象,增强了代码的...
《High-Performance Java Persistence》是一本深入探讨Java应用程序与数据库交互技术的专业书籍,它主要关注如何优化Java持久层操作以提升整体系统性能。本书详细阐述了Java持久化的各种概念,包括JPA(Java ...
When O’Reilly first approached me about writing a book on Java performance tuning, I was unsure. Java performance, I thought—aren’t we done with that? Yes, I still work on performance of Java (and ...
Chapter 1. Performance in Mobile Apps Chapter 2. Measuring Performance Part II. Core Optimizations Chapter 3. Memory Management Chapter 4. CPU, Power and Battery Consumption Chapter 5. Concurrent ...
Packt.ASP.NET.Core.2.High.Performance.2nd.Edition.2017
Today, mobile is a must for every company, but how you reach users will determinate ...Chapter 1. The Mobile Web World Chapter 2. Where to measure performance Chapter 3. Optimizing for the first visit
1. **环境变量配置不正确**:确保`JAVA_OPTS`环境变量中包含了指向`tcnative-1.dll`的路径。可以添加如下内容: ``` -Djava.library.path=path/to/tcnative-1.dll ``` 其中`path/to/tcnative-1.dll`应替换为实际...
This book explains how to take full advantage of the revolutionary Oracle Wait Interface to quickly pinpoint--and solve--core problems and bottlenecks, and increase productivity exponentially.
Java_Performance.pdf java代码效率优化.docx Java内存模型的历史变迁.docx Java在游戏服务器开发中的应用.docx java基础总结大全.txt Java开发与技术挑战——关于技术的技术思考.docx Java框架研发思考.docx Java...
Java_Performance.pdf java代码效率优化.docx Java内存模型的历史变迁.docx Java在游戏服务器开发中的应用.docx java基础总结大全.txt Java开发与技术挑战——关于技术的技术思考.docx Java框架研发思考.docx Java...
Mind.Performance.Hacks.Tips.and.Tools.for.Overclocking.Your.Brain.Feb.2006
《Java Performance》是一本深入探讨Java性能优化的经典著作,作者Charlie Hunt是Java性能领域的权威专家。这本书详尽地阐述了如何理解和改善Java应用程序的性能,包括JVM(Java虚拟机)的工作原理、性能分析工具的...