`
YuHuang.Neil
  • 浏览: 181331 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
文章列表
问题:Java虚拟机中采用了哪些垃圾回收的算法?请简要说明。 答:JVM中垃圾回收算法主要分为四种:      (1)标记-清除算法(Mark-Sweep Algorithm):算法分为“标记”和“清除”两个阶段:首先标记出所有需要回收的对象, ...
问题:Java虚拟机是如何判断哪些对象应该放在新生代,哪些对象应该放在老年代中,提供何种机制来实现? 答:Java虚拟机一般采用分代的思想来内存的,为了确定一个对象年龄(Age),虚拟机给每个对象都引进了一个对象年龄计数器。如果对象在Eden出生并经过第一次Minor GC后仍然存活,并且能够被Survivor容纳的话,将被移动到Survivor空间中,并将对象的年龄设定为1。对象在Survivor区中每熬过一次Minor GC,年龄就增加1岁,当它的年龄增加到一定程度(默认为15岁)时,就会晋升到老年代中。当然晋升老年代的年龄的阈值可以通过虚拟机参数-XX:MaxTenuringThres ...
问题:在Java垃圾收集机制中的Minor GC和Full GC分别指什么,有和不同? 答:Minor GC是指新生代GC,是发生在新生代的垃圾收集动作,因为Java对象大多都具有“朝生夕灭”的特性,所以Minor GC非常频繁,一般回收速度也比较快;Full GC(也称为Major GC)是指老年代的GC,Full GC的速度一般会比Minor GC慢10倍以上。 相关知识扩展:虚拟机一般提供参数-XX:+PrintGCDetails这个收集器日志参数,告诉虚拟机在发生垃圾收集行为时打印内存回收日志,并且在进程退出的时候输出当前内存各区域的分配情况。在实际应用中,内存回收日志一般是打印到 ...
[百度面试问题之三]:请谈谈你对Java垃圾收集器中并行和并发概念的理解。 答:并行和并发这两个概念都是编程中的概念,在垃圾收集器的上下文语境中,我们应该这样理       解:     (1)并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。     (2)并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能            会交替执行),用户程序继续运行,而垃圾收集程序运行于另一个CPU上。 [百度面试问题之四]:当Java指定选用CMS垃圾收集器时,往往会产生一些“浮动垃圾”(Floating Garbag ...
[百度面试题问题之一]:请分析一下Java的垃圾回收机制中对方法区的回收过程,在何种条件下才会触发GC对方法区进行回收工作。 答:所谓的方法区也就是HotSpot虚拟机中的永久代,Java虚拟机规范中确实说过可以不要求虚拟机 ...
问题:请问在Java中本地直接内存(Direct Memory)和堆内存(Java Heap)之间有何关系与区别,并尝试分析一下直接内存有什么作用。 答:根据Java虚拟机规范,堆内存(Heap Memory)和直接内存(Direct Memory)是Java虚拟机中两种基本的内存空间类型。堆内存是一个标准内存池,用于存放绝大多数对象的实例;直接内存则是一块由程序本身管理的一块内存空间,它的效率要比标准内存池要高,主要用于存放网络通信时数据缓冲和磁盘数据交换时的数据缓冲。    DirectMemory容量可以通过 -XX:MaxDirectMemorySize指定,如果不指定,则默认为 ...
问题:请问Java的运行时数据区域是如何划分的,分为几个部分,每个部分主要有什么作用? 答:Java的运行时数据区主要分为如下几个部分:      (1)程序计数器(Program Counter Register):它是一块较小的内存空间,它的作用 ...
问题:请分析一下Java中StackOverflowError异常和OutOfMemoryError异常之间联系与区别,什么时候会产生StackOverflowError异常?什么时候产生OutOfMemoryError异常? 答:在Java虚拟机规范中是这样描述这两类异常的:      (1)如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异              常;      (2)如果虚拟机在扩展栈时无法申请到足够的内存空间,则抛出OutOfMemoryError异              常。        对于Java虚拟机规范中的描 ...
问题:请问Java语言实现闭包了吗?你是如何理解语言中闭包的概念的,请详细谈谈你的看法。 答:Oracle公司在最新推出的JDK 7.0中提供了闭包与Lambda表达式的一个实现方式,虽然还有许多值得考虑的地方,但是从Java语言的发展趋势来看,支持闭包的概念无疑是Java语言的一个方向。所谓闭包是指可以包含自由(未绑定到特定对象)变量的代码块,这些变量不是在这个代码块内或者任何全局上下文中定义的,而是在定义代码块的环境中定义的。“闭包”这个概念来源于以下两者的结合:要执行的代码块和为自由变量提供绑定的计算环境(作用域)。闭包的价值在于可以作为函数对象或者匿名函数,对于类型系统而言这就意味着不 ...
Source Insight以其强大的功能,一直受到源码阅读人员的青睐。如何更好更高效地使用Source Insight工具来阅读源代码是一个值得考虑的问题,一些好的做法和习惯会给阅读源代码的时候带来不小的便利。下面就自己使用Source Insight的经验,分享一下几个比较常用的阅读源代码的快捷功能: 1、最基本的功能:按住“Ctrl”键,再使用鼠标指向某个变量后点击进入这个变量的定义。 2、字符宽度的调整,选上“view->draft view”就可以让每个字符的宽度保持一致。或者使用快捷键"Alt + F12"也可以进行堆字符宽度的设置。 3、“Shift + ...
Question: Provide a function to accept an integer array and computes the maximum consecutive sum. If the maximum sum is negative, this function returns zero. 问题:请一个整数数组的最大连续和,若和小于零则返回零。 实现代码: public class ConsecutiveSum { public int max_sum(int[] x){ int max_endi ...
问题:请问当你写的程序出现OutOfMemoryError的时候,你该如何进行排查?使用什么Java命令参数和方法呢? 答:可以尝试使用VM arguments来协助排查,主要分为以下几个步骤:       (1)预估你的程序使用内存的大小,尽可能估计一个准确的范围且这个范围一定需要比运行你的程序所需的最低内存大1倍(经验值)。       (2)假定估计消耗内存的值为10M,那么应该使用虚拟机参数-Xms10M(最小值)和-Xmx10M(最大值)[注意:这里设置最大值和最小值相等来避免堆空间的自动扩展]。       (3)再设定虚拟机参数-XX:+HeapDumpOnOutOfMemory ...
问题:给定两个字符串s1和s2,要求判断s2是否能够通过s1做循环移位操作得到的字符串包含。例如,给定s1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。 答:这个问题可以使用“提高空间复杂度来换取时间复杂度的降低”的思路来解决。 实现代码: public class ShiftStringMatch { public static final int MATCH = 1; public static final int NOMATCH = 0; private Stri ...
问题:编写一个程序实现筛除数组中重复元素功能。 算法思路:基于简单的想法,先把数组排序,然后扫描整个数组跳过重复的元素。算法的效率取决于排序算法的效率。 算法实现: // // main.cpp // MyProjectForCPP // // Created by labuser on 11/2/11. // Copyright 2011 __MyCompanyName__. All rights reserved. // #include <iostream> void sort(int[],int); void unique( ...
问题:给定一个整数数组,写一个算法实现判断是否存在一个和为零的子数组。 答:算法思路:计算数组的前缀和,然后将前缀和进行排序,如果存在连续两个元素相同的情况即存在一个和为零的子数组,否则不存在。 算法的代码实现: // // main.cpp // MyProjectForCPP // // Created by labuser on 11/2/11. // Copyright 2011 __MyCompanyName__. All rights reserved. // #include <iostream> #include <ma ...
Global site tag (gtag.js) - Google Analytics