- 浏览: 287158 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
梦醒无尘:
异步处理框架已经用到项目上,感谢你利用休息时间创造出一款舒服的 ...
asyn4j 1.2 发布 -
xiaokang1582830:
有一点没有考虑到的就是是否可以提供目前已经在调用的calss和 ...
asyn4j -- 异步方法调用框架 -
snowolf:
记得曾经实现过iBatis+EhCache,实现了一个iBat ...
让ibatis 支持 memcached -
bsspirit:
很好,很好!!
java annotation 实例 -
ij仔:
...
Statement,PreparedStatement区别
1.JVM管理两种类型的内存:堆内存(heap),栈内存(stack),堆内在主要用来存储程序在运行时创建或实例化的对象与变量.而栈内存则是用来存储程序代码中声明为静态(static)(或非静态)的方法.
2.JVM中对象的生命周期,创建阶段,应用阶段,不可视阶段,不可到达阶段,可收集阶段,终结阶段,释放阶段
3.避免在循环体中创建对象,即使该对象点用内存空间不大.
for(int i=0;i<10000;++i){
Object obj = new Object();
System.out.println("obj="+obj);
}
应改成
Object obj = null;
for(int i=0;i<10000;++i){
obj = new Object();
System.out.println("obj="+obj);
}
4.软引用的主要特点是具有较强的引用功能.只有当内存不够的时候,才回收这类内存,因此在内存足够的时候,它们通常不被回收.它可以用于实现一些常用资源的缓存,实现Cache的功能
A a = new A();
SoftReference sr = new SoftReference(a);
a = null;
if(sr !=null){
a = sr.get();
}else{
a = new A();
sr = new SoftReference(a);
}
5.弱引用对象与Soft引用对象最大不同就在于:GC在进行回收时,需要通过算法检查是否回收Soft引用对象,而对于Weak引用对象,GC总是进行回收.
A a = new A();
WeakReference wr = new WeakReference(a);
a = null;
if(sr !=null){
a = wr.get();
}else{
a = new A();
wr = new WeakReference(a);
}
6.共享静态变量存储空间
7.有时候我们为了提高系统性能,避免重复耗时的操作,希望能够重用一些创建完成的对象,利用对象池实现.类似JDBC连接池.
8.瞬间值,序列化对象大变量时,如果此大变量又没有用途,则使用transient声明,不序列化此变量.同时网络传输中也不传输.
9.不要提前创建对象
void f(){
int i;
A a = new A();
if(....){
a.showMessage();
}
}
改成
void f(){
int i;
A a = null;
if(....){
//用到时才实例化
a = new A();
a.showMessage();
}
}
10 .(1)最基本的建议就是尽早释放无用对象的引用
A a = new A();
a = null; //当使用对象a之后主动将其设置为空
(2)尽量少用finalize函数.
(3) 如果需要使用经常用到的图片展,可以使用软引用.
(4) 注意集合数据类型,包括数组,树等数据,这些数据结构对GC来说,回收更为复杂,
(5) 尽量避免在类的默认构造器中创建,初始化大量的对象,防止在调用其自类的构造器时造成不必要的内存资源浪费.
(6) 尽量避免强制系统做垃圾内存回收.
(7) 尽量避免显式申请数组空间.
(8) 尽量在合适的场景下使用对象池技术以提高系统性能,缩减系统内存开销.
11.当做数组拷贝操作时,采用System.arraycopy()方法完成拷贝操作要比采用循环的办法完成数组拷贝操作效率高
12. 尽量避免在循环体中调用方法,因为方法调用是比较昂贵的.
13. 尽量避免在循环体中使用try-catch 块,最好在循环体外使用try--catch块以提高系统性能.
14. 在多重循环中,如果有可能,尽量将最长的循环放在最内层,最短的循环放在最外层,以减少循环层间的变换次数.
15. 在需要线程安全的情况下,使用List list = Collections.synchronizedList(new ArrayList());
16. 如果预知长度,就设置ArrayList的长度.
17. ArrayList 与 LinkedList 选择,熟悉底层的实现原理,选择适当的容器.
18. 字符串累加采用StringBuffer.
19. 系统I/O优化,采用缓冲和压缩技术.优化性能.
20. 避免在类在构造器的初始化其他类
21 尽量避免在构造中对静态变量做赋值操作
22. 不要在类的构造器中创建类的实例
23. 组合优化继承
24. 最好通过Class.forname() 动态的装载类
25. JSP优化,采用out 对象中的print方法代替println()方法
26 .采用ServletOutputStream 对象代替JSPWriter对象
27. 采用适当的值初始化out 对象缓冲区的大小
28. 尽量采用forward()方法重定向新的JSP
29. 利用线程池技术处理客户请求
30.Servlet优化
(1) 通过init()方法来缓存一些静态数据以提高应用性能.
(2) 用print() 方法取代println()方法.
(3) 用ServletOutputStream 取代 PrintWriter.
(4) 尽量缩小同步代码数量
31. 改善Servlet应用性能的方法
(1)不要使用SingleThreadModel
(2)使用线程池ThreadPool
32. EJB优化
实体EJB:
(1)实体EJB中常用数据缓存与释放
(2)采用延迟加载的方式装载关联数据
(3)尽可能地应用CMP类型实体EJB
(4)直接采用JDBC技术处理大型数据
33. 优化JDBC连接
(1)设置合适的预取行值
(2)采用连接池技术
(3)全合理应用事务
(4)选择合适的事务隔离层与及时关闭连接对象
34. PreparedStatemetn只编译解析一次,而Statement每次都编译解析.
35. 尽可能地做批处理更新
36. 通过采用合适的getXXX方法提高系统性能
37. 采用设计模式.
这两种循环其实是一样的,jvm不会傻到真的在每次循环中都创建一个本地变量,那还不早stackoverflow了?
事实上本地变量都是一开始就分配好了,不管你的代码中是在哪声明的。
是不一样的。执行效率上也不一样。
经常跳转是个很大的开销,如果将短的放在里边,跳转次数增加了嘛
这两种循环其实是一样的,jvm不会傻到真的在每次循环中都创建一个本地变量,那还不早stackoverflow了?
事实上本地变量都是一开始就分配好了,不管你的代码中是在哪声明的。
为什么会有"for(int i=n;i>0;i--)的效率比for(int i=0;i<n;i++)的效率高"这个结论呀?
我感觉两者应该效率一样的呀
关于这个……刚写了帖,有兴趣的来讨论一下:降序循环总是比升序循环快?
为什么会有"for(int i=n;i>0;i--)的效率比for(int i=0;i<n;i++)的效率高"这个结论呀?
我感觉两者应该效率一样的呀
大大可否用JProfiler演示一下?请问为什么小的测试的时候看到这些Object被GC了?
$ java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)
$ java -XX:+PrintGC X | grep 'GC'
[GC 896K->134K(5056K), 0.0008089 secs]
[GC 1030K->134K(5056K), 0.0002564 secs]
[GC 1030K->134K(5056K), 0.0001279 secs]
[GC 1030K->134K(5056K), 0.0000553 secs]
[GC 1030K->134K(5056K), 0.0000581 secs]
[GC 1030K->134K(5056K), 0.0000616 secs]
[GC 1030K->134K(5056K), 0.0000497 secs]
3.避免在循环体中创建对象,即使该对象点用内存空间不大.
for(int i=0;i<10000;++i){
Object obj = new Object();
System.out.println("obj="+obj);
}
应改成
Object obj = null;
for(int i=0;i<10000;++i){
obj = new Object();
System.out.println("obj="+obj);
}
严重的没发现第二种创建的对象数要少些。
Object obj = null; 只是声明了一个空的 Object 引用而已,真正创建Object 对象的是 new Object() ,这两者创建的对象难道不是一样多的?
我觉得
Object obj = null;
for(int i=0;i<10000;++i){
obj = new Object();
System.out.println("obj="+obj);
}
只在栈内存中有一个obj,obj指向不同堆内存中的new出来的Object对象,
其实这样是节省内存的开销,
我是这么理解的!
用jprofiler之类的内存剖析工具看一下运行时堆内存你就知道了,循环不结束的时候你new出来的这些Object是不会呗GC的。
个人 认为 比楼主的性能差。
3.避免在循环体中创建对象,即使该对象点用内存空间不大.
for(int i=0;i<10000;++i){
Object obj = new Object();
System.out.println("obj="+obj);
}
应改成
Object obj = null;
for(int i=0;i<10000;++i){
obj = new Object();
System.out.println("obj="+obj);
}
严重的没发现第二种创建的对象数要少些。
Object obj = null; 只是声明了一个空的 Object 引用而已,真正创建Object 对象的是 new Object() ,这两者创建的对象难道不是一样多的?
我觉得
Object obj = null;
for(int i=0;i<10000;++i){
obj = new Object();
System.out.println("obj="+obj);
}
只在栈内存中有一个obj,obj指向不同堆内存中的new出来的Object对象,
其实这样是节省内存的开销,
我是这么理解的!
3.避免在循环体中创建对象,即使该对象点用内存空间不大.
for(int i=0;i<10000;++i){
Object obj = new Object();
System.out.println("obj="+obj);
}
应改成
Object obj = null;
for(int i=0;i<10000;++i){
obj = new Object();
System.out.println("obj="+obj);
}
严重的没发现第二种创建的对象数要少些。
Object obj = null; 只是声明了一个空的 Object 引用而已,真正创建Object 对象的是 new Object() ,这两者创建的对象难道不是一样多的?
好的,谢谢!
书google 一下到处都是,我是在CSDN下载的
stringBuffer 线程安全 stringBuilder 非线程安全. 所以不考虑多线程的话,stringBuilder 速度肯定是快点
两者适用情况不同,不是谁代替谁
StringBuffer 线程不安全
StringBuilder 线程安全
你正好解释反了吧 StringBuilder 线程不安全吧
2.JVM中对象的生命周期,创建阶段,应用阶段,不可视阶段,不可到达阶段,可收集阶段,终结阶段,释放阶段
3.避免在循环体中创建对象,即使该对象点用内存空间不大.
for(int i=0;i<10000;++i){
Object obj = new Object();
System.out.println("obj="+obj);
}
应改成
Object obj = null;
for(int i=0;i<10000;++i){
obj = new Object();
System.out.println("obj="+obj);
}
4.软引用的主要特点是具有较强的引用功能.只有当内存不够的时候,才回收这类内存,因此在内存足够的时候,它们通常不被回收.它可以用于实现一些常用资源的缓存,实现Cache的功能
A a = new A();
SoftReference sr = new SoftReference(a);
a = null;
if(sr !=null){
a = sr.get();
}else{
a = new A();
sr = new SoftReference(a);
}
5.弱引用对象与Soft引用对象最大不同就在于:GC在进行回收时,需要通过算法检查是否回收Soft引用对象,而对于Weak引用对象,GC总是进行回收.
A a = new A();
WeakReference wr = new WeakReference(a);
a = null;
if(sr !=null){
a = wr.get();
}else{
a = new A();
wr = new WeakReference(a);
}
6.共享静态变量存储空间
7.有时候我们为了提高系统性能,避免重复耗时的操作,希望能够重用一些创建完成的对象,利用对象池实现.类似JDBC连接池.
8.瞬间值,序列化对象大变量时,如果此大变量又没有用途,则使用transient声明,不序列化此变量.同时网络传输中也不传输.
9.不要提前创建对象
void f(){
int i;
A a = new A();
if(....){
a.showMessage();
}
}
改成
void f(){
int i;
A a = null;
if(....){
//用到时才实例化
a = new A();
a.showMessage();
}
}
10 .(1)最基本的建议就是尽早释放无用对象的引用
A a = new A();
a = null; //当使用对象a之后主动将其设置为空
(2)尽量少用finalize函数.
(3) 如果需要使用经常用到的图片展,可以使用软引用.
(4) 注意集合数据类型,包括数组,树等数据,这些数据结构对GC来说,回收更为复杂,
(5) 尽量避免在类的默认构造器中创建,初始化大量的对象,防止在调用其自类的构造器时造成不必要的内存资源浪费.
(6) 尽量避免强制系统做垃圾内存回收.
(7) 尽量避免显式申请数组空间.
(8) 尽量在合适的场景下使用对象池技术以提高系统性能,缩减系统内存开销.
11.当做数组拷贝操作时,采用System.arraycopy()方法完成拷贝操作要比采用循环的办法完成数组拷贝操作效率高
12. 尽量避免在循环体中调用方法,因为方法调用是比较昂贵的.
13. 尽量避免在循环体中使用try-catch 块,最好在循环体外使用try--catch块以提高系统性能.
14. 在多重循环中,如果有可能,尽量将最长的循环放在最内层,最短的循环放在最外层,以减少循环层间的变换次数.
15. 在需要线程安全的情况下,使用List list = Collections.synchronizedList(new ArrayList());
16. 如果预知长度,就设置ArrayList的长度.
17. ArrayList 与 LinkedList 选择,熟悉底层的实现原理,选择适当的容器.
18. 字符串累加采用StringBuffer.
19. 系统I/O优化,采用缓冲和压缩技术.优化性能.
20. 避免在类在构造器的初始化其他类
21 尽量避免在构造中对静态变量做赋值操作
22. 不要在类的构造器中创建类的实例
23. 组合优化继承
24. 最好通过Class.forname() 动态的装载类
25. JSP优化,采用out 对象中的print方法代替println()方法
26 .采用ServletOutputStream 对象代替JSPWriter对象
27. 采用适当的值初始化out 对象缓冲区的大小
28. 尽量采用forward()方法重定向新的JSP
29. 利用线程池技术处理客户请求
30.Servlet优化
(1) 通过init()方法来缓存一些静态数据以提高应用性能.
(2) 用print() 方法取代println()方法.
(3) 用ServletOutputStream 取代 PrintWriter.
(4) 尽量缩小同步代码数量
31. 改善Servlet应用性能的方法
(1)不要使用SingleThreadModel
(2)使用线程池ThreadPool
32. EJB优化
实体EJB:
(1)实体EJB中常用数据缓存与释放
(2)采用延迟加载的方式装载关联数据
(3)尽可能地应用CMP类型实体EJB
(4)直接采用JDBC技术处理大型数据
33. 优化JDBC连接
(1)设置合适的预取行值
(2)采用连接池技术
(3)全合理应用事务
(4)选择合适的事务隔离层与及时关闭连接对象
34. PreparedStatemetn只编译解析一次,而Statement每次都编译解析.
35. 尽可能地做批处理更新
36. 通过采用合适的getXXX方法提高系统性能
37. 采用设计模式.
- java优化编程.pdf (57.9 KB)
- 下载次数: 588
评论
27 楼
xiaoyuqi00
2009-12-11
for(int i=0;i<10000;++i){
Object obj = new Object();
System.out.println("obj="+obj);
}
应改成
Object obj = null;
for(int i=0;i<10000;++i){
obj = new Object();
System.out.println("obj="+obj);
}
谁能解释下?
Object obj = new Object();
System.out.println("obj="+obj);
}
应改成
Object obj = null;
for(int i=0;i<10000;++i){
obj = new Object();
System.out.println("obj="+obj);
}
谁能解释下?
26 楼
qchong
2009-12-11
幸存者 写道
Object obj = null; for (int i=0;i<10000;++i) { obj = new Object(); }
for (int i=0;i<10000;++i) { Object obj = new Object(); }
这两种循环其实是一样的,jvm不会傻到真的在每次循环中都创建一个本地变量,那还不早stackoverflow了?
事实上本地变量都是一开始就分配好了,不管你的代码中是在哪声明的。
是不一样的。执行效率上也不一样。
25 楼
xiaoyuqi00
2009-12-11
3.避免在循环体中创建对象,即使该对象点用内存空间不大.
for(int i=0;i<10000;++i){
Object obj = new Object();
System.out.println("obj="+obj);
}
应改成
Object obj = null;
for(int i=0;i<10000;++i){
obj = new Object();
System.out.println("obj="+obj);
}
谁能解释下这两句话的区别?
for(int i=0;i<10000;++i){
Object obj = new Object();
System.out.println("obj="+obj);
}
应改成
Object obj = null;
for(int i=0;i<10000;++i){
obj = new Object();
System.out.println("obj="+obj);
}
谁能解释下这两句话的区别?
24 楼
wujiazhao88
2009-12-10
sunshiwu1984 写道
14. 在多重循环中,如果有可能,尽量将最长的循环放在最内层,最短的循环放在最外层,以减少循环层间的变换次数.
我试了一下,长的循环放在最内层执行用的时间比长的循环放在最外层用的时间长,有人测试过没?这个性能怎么体现呢?
我试了一下,长的循环放在最内层执行用的时间比长的循环放在最外层用的时间长,有人测试过没?这个性能怎么体现呢?
经常跳转是个很大的开销,如果将短的放在里边,跳转次数增加了嘛
23 楼
幸存者
2009-12-10
Object obj = null; for (int i=0;i<10000;++i) { obj = new Object(); }
for (int i=0;i<10000;++i) { Object obj = new Object(); }
这两种循环其实是一样的,jvm不会傻到真的在每次循环中都创建一个本地变量,那还不早stackoverflow了?
事实上本地变量都是一开始就分配好了,不管你的代码中是在哪声明的。
22 楼
RednaxelaFX
2009-12-10
mooninday 写道
wujiazhao88 写道
如果有两层以上的循环,要将多次计算的循环放在里面,少的放在外面;
另外for(int i=n;i>0;i--)的效率比for(int i=0;i<n;i++)的效率高
另外for(int i=n;i>0;i--)的效率比for(int i=0;i<n;i++)的效率高
为什么会有"for(int i=n;i>0;i--)的效率比for(int i=0;i<n;i++)的效率高"这个结论呀?
我感觉两者应该效率一样的呀
关于这个……刚写了帖,有兴趣的来讨论一下:降序循环总是比升序循环快?
21 楼
sunshiwu1984
2009-12-10
14. 在多重循环中,如果有可能,尽量将最长的循环放在最内层,最短的循环放在最外层,以减少循环层间的变换次数.
我试了一下,长的循环放在最内层执行用的时间比长的循环放在最外层用的时间长,有人测试过没?这个性能怎么体现呢?
我试了一下,长的循环放在最内层执行用的时间比长的循环放在最外层用的时间长,有人测试过没?这个性能怎么体现呢?
20 楼
mooninday
2009-12-10
wujiazhao88 写道
如果有两层以上的循环,要将多次计算的循环放在里面,少的放在外面;
另外for(int i=n;i>0;i--)的效率比for(int i=0;i<n;i++)的效率高
另外for(int i=n;i>0;i--)的效率比for(int i=0;i<n;i++)的效率高
为什么会有"for(int i=n;i>0;i--)的效率比for(int i=0;i<n;i++)的效率高"这个结论呀?
我感觉两者应该效率一样的呀
19 楼
ravenex
2009-12-10
wubo19842008 写道
用jprofiler之类的内存剖析工具看一下运行时堆内存你就知道了,循环不结束的时候你new出来的这些Object是不会呗GC的。
大大可否用JProfiler演示一下?请问为什么小的测试的时候看到这些Object被GC了?
public class X { public static void main(String[] args) { Object obj = null; for(int i=0; i<10000; ++i) { obj = new Object(); System.out.println("obj="+obj); } } }
$ java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04)
Java HotSpot(TM) Client VM (build 14.3-b01, mixed mode, sharing)
$ java -XX:+PrintGC X | grep 'GC'
[GC 896K->134K(5056K), 0.0008089 secs]
[GC 1030K->134K(5056K), 0.0002564 secs]
[GC 1030K->134K(5056K), 0.0001279 secs]
[GC 1030K->134K(5056K), 0.0000553 secs]
[GC 1030K->134K(5056K), 0.0000581 secs]
[GC 1030K->134K(5056K), 0.0000616 secs]
[GC 1030K->134K(5056K), 0.0000497 secs]
18 楼
wujiazhao88
2009-12-10
如果有两层以上的循环,要将多次计算的循环放在里面,少的放在外面;
另外for(int i=n;i>0;i--)的效率比for(int i=0;i<n;i++)的效率高
另外for(int i=n;i>0;i--)的效率比for(int i=0;i<n;i++)的效率高
17 楼
wubo19842008
2009-12-10
changyuxin 写道
wps2000 写道
pan_java 写道
3.避免在循环体中创建对象,即使该对象点用内存空间不大.
for(int i=0;i<10000;++i){
Object obj = new Object();
System.out.println("obj="+obj);
}
应改成
Object obj = null;
for(int i=0;i<10000;++i){
obj = new Object();
System.out.println("obj="+obj);
}
严重的没发现第二种创建的对象数要少些。
Object obj = null; 只是声明了一个空的 Object 引用而已,真正创建Object 对象的是 new Object() ,这两者创建的对象难道不是一样多的?
我觉得
Object obj = null;
for(int i=0;i<10000;++i){
obj = new Object();
System.out.println("obj="+obj);
}
只在栈内存中有一个obj,obj指向不同堆内存中的new出来的Object对象,
其实这样是节省内存的开销,
我是这么理解的!
用jprofiler之类的内存剖析工具看一下运行时堆内存你就知道了,循环不结束的时候你new出来的这些Object是不会呗GC的。
16 楼
narifu
2009-12-10
ystt8283 写道
楼主说的第一个问题很常见但我有个问题:java在堆中分配内存只和new有关系,虽然修改后只有一个obj引用,但其实内存中还是分配了i个对象。我想问下各位,如果单就此例子我写的这个是否和楼主修改后的性能相同:
for(int i=0;i<10000;++i){
Object obj = new Object();
System.out.println("obj="+obj);
obj = null;
}
for(int i=0;i<10000;++i){
Object obj = new Object();
System.out.println("obj="+obj);
obj = null;
}
个人 认为 比楼主的性能差。
15 楼
ystt8283
2009-12-10
楼主说的第一个问题很常见但我有个问题:java在堆中分配内存只和new有关系,虽然修改后只有一个obj引用,但其实内存中还是分配了i个对象。我想问下各位,如果单就此例子我写的这个是否和楼主修改后的性能相同:
for(int i=0;i<10000;++i){
Object obj = new Object();
System.out.println("obj="+obj);
obj = null;
}
for(int i=0;i<10000;++i){
Object obj = new Object();
System.out.println("obj="+obj);
obj = null;
}
14 楼
changyuxin
2009-12-10
wps2000 写道
pan_java 写道
3.避免在循环体中创建对象,即使该对象点用内存空间不大.
for(int i=0;i<10000;++i){
Object obj = new Object();
System.out.println("obj="+obj);
}
应改成
Object obj = null;
for(int i=0;i<10000;++i){
obj = new Object();
System.out.println("obj="+obj);
}
严重的没发现第二种创建的对象数要少些。
Object obj = null; 只是声明了一个空的 Object 引用而已,真正创建Object 对象的是 new Object() ,这两者创建的对象难道不是一样多的?
我觉得
Object obj = null;
for(int i=0;i<10000;++i){
obj = new Object();
System.out.println("obj="+obj);
}
只在栈内存中有一个obj,obj指向不同堆内存中的new出来的Object对象,
其实这样是节省内存的开销,
我是这么理解的!
13 楼
wps2000
2009-12-10
pan_java 写道
3.避免在循环体中创建对象,即使该对象点用内存空间不大.
for(int i=0;i<10000;++i){
Object obj = new Object();
System.out.println("obj="+obj);
}
应改成
Object obj = null;
for(int i=0;i<10000;++i){
obj = new Object();
System.out.println("obj="+obj);
}
严重的没发现第二种创建的对象数要少些。
Object obj = null; 只是声明了一个空的 Object 引用而已,真正创建Object 对象的是 new Object() ,这两者创建的对象难道不是一样多的?
12 楼
pan_java
2009-12-10
whaosoft 写道
呵呵 一定要在发贴之前好好搞清楚哦~
好的,谢谢!
11 楼
husai
2009-12-10
pan_java 写道
zhxing 写道
总结的不错,不过下载的就有点那个了,不是那本书。。感觉被名字忽悠了。
另外:
字符串累加采用StringBuffer
现在已经用StringBuilder 来代替了。。。
另外:
字符串累加采用StringBuffer
现在已经用StringBuilder 来代替了。。。
书google 一下到处都是,我是在CSDN下载的
stringBuffer 线程安全 stringBuilder 非线程安全. 所以不考虑多线程的话,stringBuilder 速度肯定是快点
10 楼
whaosoft
2009-12-10
呵呵 一定要在发贴之前好好搞清楚哦~
9 楼
pan_java
2009-12-10
不意思搞错,这次记住了,谢谢!
8 楼
illu
2009-12-10
pan_java 写道
Aguo 写道
zhxing 写道
总结的不错,不过下载的就有点那个了,不是那本书。。感觉被名字忽悠了。
另外:
字符串累加采用StringBuffer
现在已经用StringBuilder 来代替了。。。
另外:
字符串累加采用StringBuffer
现在已经用StringBuilder 来代替了。。。
两者适用情况不同,不是谁代替谁
StringBuffer 线程不安全
StringBuilder 线程安全
你正好解释反了吧 StringBuilder 线程不安全吧
发表评论
-
sql 解析 工具(sql parse)
2010-11-25 12:51 6004项目地址: http://jsqlparser.source ... -
asyn4j 1.2 发布
2010-10-08 19:16 19021.2更新 1.设置关闭服务延时 2.设置异步工作 ... -
asyn4j -- 异步方法调用框架
2010-08-24 19:41 3895asyn4j 是一个java异步方法调用框架,基于消费者与生产 ... -
代码备忘录
2010-08-06 10:47 1310List 迭代 private final List& ... -
java分布式学习笔记
2010-07-19 22:05 39071.分布式JAVA应用 基于TC ... -
写正则表达式--工具分享
2010-04-07 11:06 1255这是一个写和测正则表达式很好的工具,不知大家有没有用过! 里面 ... -
mina 实现与memcached 连接工具
2010-02-24 22:00 2131前段时间学习了mina框架.就确定写一个小实例玩一下. 看到不 ... -
JMF 通过 Applet 获取数据
2009-12-22 15:15 1684import java.awt.BorderLayou ... -
yanf4j 服务端读取操作 源码分析
2009-12-19 15:13 1442最近学习 NIO,学习了XMemcached 和 它的NIO框 ... -
Statement,PreparedStatement区别
2009-12-17 16:04 2271以Oracle为例吧 Statement ... -
java 排序 整合
2009-12-17 14:59 1246package net.rubyeye.xmemcached. ... -
JVM 结束挂钩程序
2009-12-16 15:08 1211public class HookTest { /** ... -
Java的内存泄漏
2009-11-30 11:54 996Java的一个重要优点就是通过垃圾收集器(Garbage Co ... -
TCP/IP 无阻塞 Socket
2009-11-25 17:25 1966package com.io; import java. ... -
java socket 多线程处理
2009-11-25 16:16 2303public class MallShopSoketServe ... -
写ZIP文件
2009-11-24 09:42 1000public class ZipTest { /** ... -
XML DOM API
2009-11-23 11:49 1520javax.xml.parse.DocumentBuilder ... -
自定义类加载器
2009-11-23 09:34 1139public class CryptoClassLoader ... -
ibatis 缓存 key 过长,大家有什么看法
2009-11-21 10:50 1076实体类 public class Account impl ... -
ibatis 缓存模块 key实现类
2009-11-20 16:15 1225//更新CacheKey hashcode ,每个参数 ...
相关推荐
在Java并发编程中,数据的封装与访问控制、线程安全性的考量、同步机制的使用是重要的基础概念和技巧。以下是从给出的文件内容中提取出的详细知识点: 1. 数据封装与访问控制:确保内部私有数据不被轻易访问,并且...
通过阅读《Java游戏编程读书笔记》这本书,你可以深入了解这些概念并学习如何将它们应用到实际项目中。文档中的内容可能涵盖了Java游戏开发的基本原理、代码示例、最佳实践以及常见问题的解决方案。通过深入学习和...
### Java编程思想读书笔记 #### 一、Java与C++的区别及内存管理 在学习Java的过程中,我们常常会拿它与C++进行比较。这两门语言虽然有着相似之处,但也有许多不同点。 1. **内存管理:** - C++提供了更为底层的...
通过阅读《王者归来之Thinking in Java读书笔记》,你可以系统地掌握Java编程的核心知识,理解编程思想,提高解决问题的能力。无论是初学者还是经验丰富的开发者,都能从中受益匪浅。这本书不仅提供了理论知识,还有...
其中,“JAVA零基础入门教程笔记-任小龙”很可能是PDF或者文档形式的教程,详细讲解了Java的基础概念和语法。 Java的学习通常从以下几个方面展开: 1. **Java环境搭建**:首先,你需要安装Java Development Kit ...
从标题“java核心思想读书笔记”和描述可以看出,这份资料是作者结合《Java核心思想》一书和其他网络资源整理而成,适合不同水平的Java学习者,特别是初学者和有经验的工程师。 1. **Java的设计目标** - 不同于...
《狂神说JAVA的所有笔记》是一份全面且深入的JAVA学习资源,包含了JAVA语言的核心概念、进阶技术...通过阅读和实践这份笔记,你将能够系统地学习JAVA,提升编程技能,甚至在解决问题和设计高效代码方面获得新的洞察。
【Java学习笔记Markdown版】是针对Java初学者和进阶者的一份详尽教程,以Markdown格式编写,便于阅读和整理。Markdown是一种轻量级的标记语言,它允许用户使用易读易写的纯文本格式编写文档,然后转换成结构化的HTML...
【标题】"SPBT 源码学习笔记 - spbt-0707-test-java-web" 指的是一份关于SPBT(可能是某个特定软件或框架的缩写)源码的学习资料,专注于测试和Java Web开发部分。这份笔记可能详细解析了SPBT在Java Web环境中的工作...
7. **JVM(Java虚拟机)**:理解JVM的工作原理,如类加载、内存模型、垃圾回收等,对优化Java程序性能至关重要。 8. **设计模式**:23种经典设计模式是Java开发者必备的知识,如单例模式、工厂模式、装饰器模式等,...
《Java完美经典》读书笔记是Java开发者不可或缺的学习资源,它涵盖了Java编程的各个方面,旨在帮助读者深入理解Java语言,提升编程技巧。以下是对该书笔记的一些核心知识点的详细阐述: 1. **Java基础** - **变量...
Java编程语言是世界上最流行的编程语言之一,尤其在企业级应用开发中占据主导地位。这份"18天Java笔记"提供了一个快速学习Java的核心内容精华,适合初学者和有一定经验的开发者进行回顾和巩固。txt版的格式使得笔记...
《JAVA学习笔记》是林信良先生的一部深入浅出的Java编程教程,旨在帮助初学者和有一定经验的开发者巩固和提升Java编程技能。这本书涵盖了Java语言的基础到高级概念,是一份宝贵的自学资料。 首先,从基础部分开始,...
Java 学成在线笔记是针对Java编程语言的学习资源,它以Markdown格式呈现,方便学习者在在线教育环境中查阅和理解。Markdown是一种轻量级的标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成结构化...
《Java私塾全笔记+1-15章》是一份详尽的Java学习资源,包含了从基础到进阶的广泛内容。这份笔记旨在帮助初学者和有经验的开发者深入理解Java编程...通过阅读和实践,学习者可以加深对Java的理解,提升实际编程能力。
Java是一种广泛使用的高级编程语言,由Sun Microsystems(后被Oracle公司收购)于1995年发布。它的设计目标是“简单、面向对象、健壮、安全、高性能、平台独立和可...通过深入阅读和实践,可以巩固和提升Java编程技能。
笔记可能包括了错误解决的经验、设计模式的应用、代码优化的建议,以及编程最佳实践等。 通过这个压缩包,学习者不仅可以复习Java的基础概念,还能了解到实际开发中的应用场景和问题解决策略。对于Java基础不牢固的...
### 《编程珠玑》读书笔记关键知识点梳理 #### 一、引言 - **书籍定位**:《编程珠玑》是一本计算机科学领域的经典著作,由计算机科学大师Jon Bentley撰写,书中探讨了计算机科学的核心问题——如何正确选择和高效...
Java虚拟机(JVM)是Java编程语言的核心组成部分,它为Java程序提供了运行环境。在“Chapter 05 The Java Virtual Machine (Part I Basic)”这一章中,我们深入探讨了JVM的基础概念和工作原理。这包括JVM的内存区域...
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems...通过阅读《Java学习笔记(必看经典)》和《Java与模式》,初学者或有经验的开发者都能深入理解Java编程,并掌握设计和实现高效、可维护的Java应用的方法。