摘要:
这篇博客讲的非常棒http://www.jb51.net/article/92311.htm 总结几点: 1、非静态内部类默认会持有外部类的引用,所以如果此时设置一个内部类为静态变量的时候,外部类将会无法被GC。 2、匿名类造成的泄漏原因和上面一样。 3、由于 Handler 属于 TLS(Thread Local Storage) 变量, 生命周期和 A... 阅读全文
摘要:
当我们通过Executor提交一组并发执行的任务,并且希望在每一个任务完成后能立即得到结果,有两种方式可以采取: 方式一:通过一个list来保存一组future,然后在循环中轮训这组future,直到每个future都已完成。如果我们不希望出现因为排在前面的任务阻塞导致后面先完成的任务的结果没有及时获取的情况,那么在调用get方式时,需要将超时时间设置为0 public class Complet... 阅读全文
摘要:
1.CallableCallable与Runnable类似,理解Callable可以从比较其与Runnable的区别开始:1)从使用上:实现的Callable的类需要实现call()方法,此方法有返回对象V;而Runnable的子类需要实现run()方法,但没有返回值;2)如果直接调用Callable的子类的call()方法,代码是同步顺序执行的;而Runnable的子类是线程,是代码异步执行。3... 阅读全文
摘要:
http://blog.csdn.net/aoxida/article/details/50684867在分布式开发中,锁是线程控制的重要途径。Java为此也提供了2种锁机制,synchronized和lock。做为Java爱好者,自然少不了对比一下这2种机制,也能从中学到些分布式开发需要注意的地方。 我们先从最简单的入手,逐步分析这2种的区别。 一、synchronized和lock的用法区别 ... 阅读全文
摘要:
1、程序计数器(Program Counter Register) 是一块较小的内存空间,它可以看作是当前线程所执行的字节码的行号指示器。 2、Java虚拟机栈(Stack)线程私有,每一个方法调用时都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。局部变量存放了编译期可知的各种基本数据类型(boolean,byte,char,short,in... 阅读全文
摘要:
书中笔记: 也许并不会死: 要宣告回收一个对象死亡,至少要经历两次标记过程: 当可达性分析发现一个对象不可达的时候,将标记第一次并进行筛选,筛选的条件是此对象是否有必要执行finalize()方法,当对象没有覆盖finalize或者已被调用过,则虚拟机认为此对象没必要执行finalize, 如果判断有必要执行,则此对象将会被放入一个F-Q... 阅读全文
摘要:
Sum JDK监控和故障处理工具jps:JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程jstat:JVM Statistics Monitoring Tool,用于收集HotSpot虚拟机各方面的运行数据jinfo:Configuration Info for Java,显示虚拟机配置信息jmap:Memory Map for Java,生成虚拟机的内... 阅读全文
摘要:
案例1:15万PV/天左右的在线文档类型网站最近更换了硬件系统,新的硬件为4个CPU、16GB物理内存,操作系统为64位CentOS 5.4 , Resin作为Web服务器。整个服务器暂时没有部署别的应用,所有硬件资源都可以提供给这访问量并不算太大的网站使用。管理员为 了尽量利用硬件资源选用了64位的JDK 1 . 5 ,并通过-Xmx和-Xms参数将Java堆固定在12GB。使用一段时间后发现使... 阅读全文
摘要:
这章涉及记忆性的东西太多。下面简要讲一下一些主要的内容,关于属性表的内容则省略,虽然貌似也挺重要,但是这方面的知识点太多。如图所示Class类文件的结构按照从上往下排序依次也对应着class二进制文件里的顺序。下面则是书上内容的一些摘要:6.1 Class文件Class文件是一组以8字节为基础单位的二进制流,各个数据项目严格按照顺序紧凑地排列在Class文件中,中间没有添加任何分隔符若遇到需要占用... 阅读全文