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
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
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 ]
[
下一页 ]