- 对象可触及时的生命周期
在 JVM 1.2 之前,堆中的对象分为三种状态,分别是:
1. 可触及的 -- 从根节点开始可追踪到
2. 可复活的 -- 从根节点开始追踪不到,但有可能被终结方法触及并复活。不仅仅是那些声明了 finalize() 方法的对象,而是所有的对象都要经过可复活状态
3. 不可触及的 -- 以上两种可能性都不存在,可以真正回收它们所占据的内存了
版本 1.2 中,可触及按强弱进一步细分为:
1. 强可触及 -- 即原来的可触及,从根节点开始的任何直接引用,如一个局部变量或任何从强可触及对象的实例引用的对象
2. 软可触及 -- 表现为 SoftReference 所引用的对象
3. 弱可触及 -- 表现为 WeakReference 所引用的对象
4. 影子可触及 -- 表现为 PhantomReference 所引用的对象 Read More 自适应收集器
在第一篇:有关于 JVM 的垃圾收集(一) 中谈到过几种垃圾收集的算法,然而我们的 JVM 启动之后并不要求彻头彻尾的死板的使用一种垃圾收集算法,固定的算法参数。因为某种情况下某些垃圾收集算法工作得更好,而别外一些收集算法在另外的情况下工作得更好,所以自适应的垃圾收集技术应运而生。自适应算法监视堆中的情形,并且对应的调整为合适的垃圾收集技术。或能是换一种垃圾收集算法,或者是调整当前算法参数,或者把堆划分为子堆,同时在不同的子堆中使用不同的算法。
简述火车算法
垃圾收集一般都会停止整个程序的运行来查找和收集垃圾对象,它们可能在程序执行的任意时刻暂停,并且暂停的时间也无法确定。垃圾收集也可能使得程序对事件响应迟钝,无法满足实时系统的要求。如果一种垃圾收集算法可能导致用户可察觉的到的停顿或者使得程序无法适合实时系统的要求,这种算法被称作破坏性。垃圾收集算法的还有一个基本目标是使本质上的破坏性尽可能少,如果可能的话,尽可能消除这种破坏性。 Read More
Java 中使用 new、newarray、anewarray 和 multianewarray 指令来创建的对象,当这些对象不再使用时由垃圾收集来释放。 那么 反序列化等都是间接使用了前面的某个指令, clone() 是个本地方法?
JVM 规范不需要任何特定的垃圾收集技术,甚至也没要求有垃圾收集机制。 大概只是说不需要手工释放内存,具体怎么实现各 JVM 自行决定。
GC 除了释放不再被引用的对象,还要处理堆碎片, 整理出连续的空闲空间才能放得下新的对象。不至于出现总的空闲空间足够,但碎片太多而报出 "Out of Memory" 的异常。
GC 有两个好处: 一个是提高了生产率,不用埋头于 Memory Link 的有时甚至是逐行的检查;二,GC 也是 Java 安全策略的一部分,有了它不至于因错误的释放内存而导至 JVM 崩溃。 但是 GC 的一个潜在缺陷影响了程序的性能,它需要一直在后台不时的做些事情,而且实时性也有所欠缺。 Read More
题前说明:本文所做的测试是基于 WAS5.1 的,若是其他 WAS 版,请具体调整,或参考相应版本的红皮书。
WebSphere Application Server (WAS) 确实给我们提供了一个很方便的管理控制台,可以手工很轻松的部署应用程序,管理服务器;有得亦有失,因为它不能像其他很多应用服务器那般拷贝文件的方式进行部署,所以给像 DailyBuild 那样全自动化的过程制造了一些障碍。
其实 WAS 也提供了接口(SOAP 和 RMI)可通过脚本来完成对服务器及应用程序的管理,只是使用起来稍显麻烦,还得钻研一番。你可以采用三种途径来使用 WAS 的接口: Read More- 这是网上流传的"变态级JAVA程序员面试32问"的其中一题(二十八题),然后下面给出来的答案是
第二十八,编程题: 用最有效率的方法算出2乘以8等於几?
有C背景的程序员特别喜欢问这种问题。
2 << 3
粗看似乎很在理,大致想来2<<3会是移位操作,在Java的字节码中移位指令是ishl(右移),而在CPU上的硬件指令可能就会是shl(算术右移指令)。其实不然,如果熟悉汇编语言,还考虑过编译优化,2<<3根本不会使用移位操作,而是在编译时就优化计算出16来了。
但如果是写成这样的方式(int i = 2; int j = i<<2;),又是不一样的,大家可以从代码不同写法生成的Java操作指令或汇编指令看出个端倪。 Read More - 关键Ant的build文件如下(已加上比较详细的说明)下面以后也会加上测试报告的贴图的。
1<?xml version="1.0" encoding="UTF-8"?> 2<project basedir="." default="main" name="excute TestCase and build test report"> 3 <!-- 测试报告存放目录 --> 4 <property name="build.reports.dir" value="${basedir}/report" /> 5 <target name="main"> 6 <!-- 删除测试报告数据,重新生成 --> 7 <delete> 8 <fileset dir="${basedir}/report"> 9 <include name="*.*" /> 10 </fileset> 11 </delete> 12 <junit fork="yes" printsummary="true"> 13 <!-- 生成的class目录以及执行TestCase所依赖的库 14 无论是用<test>还是<batchtest>都要这个配置 --> 15 <classpath location="${basedir}/bin" /> 16 <!-- 生成报告数据的格式,可能多个,支持xml/brief/plain --> 17 <formatter type="xml" /> 18 <formatter type="brief" usefile="false" /> 19 <!-- 可以用<test>也可以用<batchtest>,但两种的设置有一些区别 20 以下<test>和<batchtest>三种形式用某一种就可以的 --> 21 <!-- name指定Class的名称,如CatTest或com.unmi.CatTest --> 22 <test name="CatTest" todir="${build.reports.dir}" /> 23 <!-- 注意其中<fileset>的dir属性及<include>的name属性指代的意义 --> 24 <batchtest todir="${build.reports.dir}"> 25 <!-- dir属性指定TestCase类的源代码的路径 --> 26 <fileset dir="${basedir}/src"> 27 <!-- name属性指定TestCase源文件规则 --> 28 <include name="**/*Test.java" /> 29 </fileset> 30 </batchtest> 31 <!-- 上面的<batchtest>还可以写成如下形式,<fileset>按指定为class 32 注意其中<fileset>的dir属性及<include>的name属性指代的意义 --> 33 <batchtest todir="${build.reports.dir}"> 34 <!-- dir属性指定TestCase类的路径 --> 35 <fileset dir="${basedir}/bin"> 36 <!-- name属性指定TestCase类文件规则 --> 37 <include name="**/*Test.class" /> 38 </fileset> 39 </batchtest> 40 </junit> 41 <!-- 用执行以上TestCase生成的报告数据生成测试报告 --> 42 <junitreport todir="${build.reports.dir}"> 43 <fileset dir="${build.reports.dir}"> 44 <include name="TEST-*.xml" /> 45 </fileset> 46 <!-- 指定生成测试报告的格式frames/noframes,和报告存放目录 --> 47 <report format="frames" todir="${build.reports.dir}" /> 48 </junitreport> 49 </target> 50</project>
现在我们安装Linux的时候通常考虑到安全因素(默认情况下)是不打开telnet服务的,而ssh服务是有的,ant很早就支持telnet,但要求我们在Linux下要安装telnet-server,并要启用该服务。
还好自Ant1.60开始支持了SSH 及SCP 操作了,早在Ant之前若要支持SSH、SCP、SFTP等任务就必须下载j2ssh的j2ssh-ant.jar和j2ssh-core.jar(在http://www.sourceforge.net的j2ssh下有下载)。现在可以使用Ant提供的Sshexec和scp任务,由$ANT_HOME/lib/ant-jsch.jar提供支持,但是同样你也要在http://www.jcraft.com/jsch/index.html下载一个依赖包jsch-0.1.24.jar(文件名因版本而不同),jsch同样也是http://www.sourceforge.net下的一个项目。
你需要把下载的jsch-0.1.24拷贝到$ANT_HOME/lib下,如果是Eclipse下的Ant环境必须在Window->Preferences->Ant->Runtime->Classpath中加入jsch-0.1.24。 Read MoreThe "Notices" shortcode enables you to call out pieces of information - sidebars, warnings, tips, etc.
To create a notice on a page, you can use the
Read Morenoticeshortcode.
You use thenoticeshortcode, with the first parameter being one ofnote,info,tip, andwarning. Then add a title for your note in quotes as the second parameter. The inner body of the note can be whatever markdown you want to create.- Page bundles are an optional way to organize page resources within Hugo. You can opt-in to using page bundles in Hugo Clarity with
usePageBundlesin your site configuration --- or in a page's front matter.
