java基础及前端基础,几个JAVA 及WEB开发基础回望

几个JAVA 及WEB开发基础回顾

1 关于多线程和线程安全

- jsp/servlet默认以多线程模式运行;所以默认的jsp/servlet以及struts中的action都不是线程安全的。

- 每个客户端请求时,都会有自己的线程创建;但jsp/servlet一般只在首次被请求是实例化,之后则被多个线程共享使用,驻留在容器的线程池中。

-jsp的9个内置对象中,除application外都是线程安全的,是么?为何?

-servlet中的实例变量是非线程安全的常见起因。

-jmm: java memory model

jmm系统存在一个主内存(Main Memory),Java中所有实例变量都储存在主存中,对于所有线程都是共享的。每条

线程都有自己的工作内存(Working Memory),工作内存由缓存和堆栈两部分组成,缓存中保存的是主存中变量的拷

贝,缓存可能并不总和主存同步,也就是缓存中变量的修改可能没有立刻写到主存中;堆栈中保存的是线程的局部变

量,线程之间无法相互直接访问堆栈中的变量。

- 如何解决?应该尽量避免在servlet中使用实例变量;如果特殊场合必须使用,则采用同步synchronized的方式,或者让servlet实现singlethreadmodel接口,但后两者都会在并发请求的时候增加系统开销,降低性能;所以最好还是尽量避免。

注:如果是在spring中,还可以在配置action的bean时,显示设置action为线程安全,即设置 singleton=true ;这样每次调用都会生成新的action实例,所以并不推荐和提倡这样做。

2 java异常处理机制,以及error,exception,throwable等之间的关系

3 java集合框架:是否线程安全,是否有序,相互之间的关系,collection与collections

4 java的内存管理,gc, 内存泄露和溢出 ;栈内存,堆内存

- 溢出:主要指实际使用空间超过预先设定的空间

溢出类型:

java.lang.OutOfMemoryError: PermGen space

java.lang.OutOfMemoryError: Java heap space

- 泄露:动态分配的堆空间内存,在使用完后因为程序缺陷没有及时消除对象的引用,导致无用对象长久驻留在堆中

泄露类型:

常发性,偶发性,一次性,隐式

end:

06-07年的时候,我对这些是相当的熟悉,甚至能准确地答出jvm在各个步骤的具体行为,甚至著名的桶模型我也理解得到位,很清晰;  但如今,我显然是不行了,一方面注意力不在这个层面,更多地关心业务领域和逻辑以及系统本身的设计等,另一方面记忆力也有限,已经装了很多别的东西了,很难把这些还记忆得非常清楚。  但反过来讲,搞技术的,任何基础都很重要,至少你保持住基础别人会觉得放心,觉得你还有潜力,就算项目做不好,多实践多努力很快就ok了;但相反基础显得“不好”,人家肯定怀疑你的能力,是不是太务虚没实力,不管你是否scjp还是sca什么的。。。!

1 楼

bluky999

2011-08-08

几个JAVA语言编程时的性能注意事项:

如果可能:

1 尽量使用final修饰class;

2 尽量使用StringBuffer代替String,避免生成太多的String对象;

3 尽量使用局部变量而不是静态或实例变量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值