Tomcat从零开始(四)一些零散的问题和下一节课预备知识
来源:互联网 发布:java split 逗号分隔 编辑:程序博客网 时间:2024/05/08 19:42
第四课:
我觉得blog这东西 和 看书是一样的。重要的不是从上面写的东西学到什么,而是你在学的时候 应该结合你自己所学的思考。比如就是昨天的 服务器加载servlet的时候,为什么使用的classloader来加载类 而不是用 Class.forName。 其实这个问题去翻翻API就能了解的差不多了。
public static Class<?> forName(String className) throws ClassNotFoundException { return forName0(className, true, ClassLoader.getCallerClassLoader()); }
public static Class<?> forName(String name, boolean initialize, ClassLoader loader) throws ClassNotFoundException { if (loader == null) { SecurityManager sm = System.getSecurityManager(); if (sm != null) { ClassLoader ccl = ClassLoader.getCallerClassLoader(); if (ccl != null) { sm.checkPermission( SecurityConstants.GET_CLASSLOADER_PERMISSION); } } } return forName0(name, initialize, loader); }
private static native Class<?> forName0(String name, boolean initialize, ClassLoader loader) throws ClassNotFoundException;
从这里可以看到 Class.forName("xxxx")这个实际上是调用的 native方法 forName0这个方法,而forName()的三参 版也 调用的这个方法。而且 第二个参数是true 。 我们来看看第二个参数是什么意思,在src.zip中可以找到 如下注释initialize whether the class must be initialized。所以可以看出来 ,这个Class.forName 如果一旦执行,这个class就要被初始化了。而我们看看ClassLoader
public Class<?> loadClass(String name) throws ClassNotFoundException { return loadClass(name, false); }
同样,根据注释可以看出 ,当resolve为false,那么加载的类 就是 还没有经过 linking的。更别说 初始化了。Java的类加载分为3个阶段 ,load、link、init。至于这三个阶段,我就不多解释了....如果不懂 ,可以大概的去了解一些JVM的知识。呃 可能很多人也认为new 之后系统才分配的内存吧,建议看看JVM虚拟机以后就能有个新的认识。深入理解Java虚拟机(周志明)的。前几天撸了大半本,感觉还算不错吧。
看完这么多,相信可能也了解为什么服务器用classLoader去加载类了。希望这个可以自己思考
之后就是下节课的预备知识了。
强烈建议看一下计算机网络,这东西其实也比较有用吧。这次先科普一下HTTP1.1就是持续的连接,一个连接可以下载整个页面,省去了多次建立 连接的消耗。之后就是分段传输。这个就不多说了。
另外一个就是 池的 概念,做J2EE的应该都知道jdbc池。其实 我们上节课的 程序,每次只能处理一个请求,所以,我们在这里就可以引入 池。可以自己建立一个 Stack,设定一个数值,开始的时候创建 min个 Http处理对象,当不够的时候就去自动创建,到最大值之后就暂时性的忽略请求。 至于min和max的数值设为多少,其实这个是依靠你实际情况来测试的。当时的jdbc连接池,为了调优,就是进行了测试。
妥了,今天就先说这么多。
- Tomcat从零开始(四)一些零散的问题和下一节课预备知识
- linux和tomcat的一些零散知识记录
- Android的一些零散知识
- 记录一些零散的知识。
- C++的一些零散知识
- 数据结构预备知识(四)
- 一些小知识 零散的C++
- 关于TCP的一些零散知识
- 汇编预备知识(四)
- 一些比较零散的问题记录
- 在html中,一些零散的关于标签的知识
- 一些常用的代码和零散笔记
- 一些零散的方法和技巧
- 内核映像的形成 —— MakeFile预备知识(四)
- matlab的使用(五)上机过程中的一些零散知识
- 准备开始收集一些零散的知识了
- C++的一点零散知识(一)
- LINUX的零散知识
- 环境搭建
- 可变参数模板(Variadic Templates)
- get_magic_quotes_gpc()
- 有关java中jdk的安装方法
- 01背包问题之二
- Tomcat从零开始(四)一些零散的问题和下一节课预备知识
- 数学之美(Beauty Of Mathematics)
- 原始的DOS之DEBUG主要命令
- C++ 11 tuple & 可变参数模板
- 进程和线程的区别(Windows)
- HDU 4287
- runcluvfy.sh 脚本使用
- ubuntu英文版变成中文版
- OpenCV中Mat与IplImage和CvMat类型之间的相互转换