打字猴:1.700442454e+09
1700442454 编写高质量代码:改善Java程序的151个建议 [:1700438120]
1700442455 编写高质量代码:改善Java程序的151个建议 建议51:不要主动进行垃圾回收
1700442456
1700442457 很久很久以前,在Java 1.1的年代里,我们经常会看到System.gc这样的调用—主动对垃圾进行回收。不过,在Java知识深入人心后,这样的代码就逐渐销声匿迹了—这是好现象,因为主动进行垃圾回收是一个非常危险的动作。
1700442458
1700442459 之所以危险,是因为System.gc要停止所有的响应(Stop the world),才能检查内存中是否有可回收的对象,这对一个应用系统来说风险极大,如果是一个Web应用,所有的请求都会暂停,等待垃圾回收器执行完毕,若此时堆内存(Heap)中的对象少的话则还可以接受,一旦对象较多(现在的Web项目是越做越大,框架、工具也越来越多,加载到内存中的对象当然也就更多了),那这个过程就非常耗时了,可能0.01秒,也可能是1秒,甚至是20秒,这就会严重影响到业务的正常运行。
1700442460
1700442461 例如,我们写这样一段代码:new String(“abc”),该对象没有任何引用,对JVM来说就是个垃圾对象。JVM的垃圾回收器线程第一次扫描(扫描时间不确定,在系统不繁忙的时候执行)时把它贴上一个标签,说“你是可以被回收的”,第二次扫描时才真正地回收该对象,并释放内存空间,如果我们直接调用System.gc,则是在说“嗨,你,那个垃圾回收器过来检查一下有没有垃圾对象,回收一下”。瞧瞧看,程序主动招来了垃圾回收器,这意味着正在运行着的系统要让出资源,以供垃圾回收器执行,想想看吧,它会把所有的对象都检查一遍,然后处理掉那些垃圾对象。注意哦,是检查每个对象。
1700442462
1700442463 不要调用System.gc,即使经常出现内存溢出也不要调用,内存溢出是可分析的,是可以查找出原因的,GC可不是一个好招数!
1700442464
1700442465
1700442466
1700442467
1700442468 编写高质量代码:改善Java程序的151个建议 [:1700438121]
1700442469 编写高质量代码:改善Java程序的151个建议 第4章 字符串
1700442470
1700442471 Although the world is full of suffering, it is full also of the overcoming of it.
1700442472
1700442473 虽然世界充满了苦难,但总是能战胜的。
1700442474
1700442475 ——Hellen Keller(海伦·凯勒,美国作家)
1700442476
1700442477 在Class的班级里,Object班主任问道,“大家知道谁是我们班最受欢迎的同学吗?”
1700442478
1700442479 大家面面相觑,不解其意,既而交头接耳,窃窃私语,猛然间,所有的目光都投向了String同学,时光仿佛戛然而止,String诧异地左顾右盼,然后羞红了脸,慢慢地低下了头,同时右手缓缓地举起来,直至胳膊完全伸直,形成一个大大“1”字。
1700442480
1700442481
1700442482
1700442483
1700442484 编写高质量代码:改善Java程序的151个建议 [:1700438122]
1700442485 编写高质量代码:改善Java程序的151个建议 建议52:推荐使用String直接量赋值
1700442486
1700442487 一般对象都是通过new关键字生成的,但是String还有第二种生成方式,也就是我们经常使用的直接声明方式,比如Str str=“a”,即是通过直接量“a”进行赋值的。对于String对象来说,这种方式是极力推荐的,但不建议使用new String(“a”)的方式赋值。为什么呢?我们来看一段程序:
1700442488
1700442489 public class Client{
1700442490
1700442491 public static void main(String[]args){
1700442492
1700442493 String str1=“中国”;
1700442494
1700442495 String str2=“中国”;
1700442496
1700442497 String str3=new String(“中国”);
1700442498
1700442499 String str4=str3.intern();
1700442500
1700442501 //两个直接量是否相等
1700442502
1700442503 boolean b1=(str1==str2);
[ 上一页 ]  [ :1.700442454e+09 ]  [ 下一页 ]