java五年工作经验面试题,面试题java开发中遇到的难点

  java五年工作经验面试题,面试题java开发中遇到的难点

  如何解决写爬虫IP受阻的问题?立即使用。

  1、描述一下JVM加载class文件的原理机制?

  (更多面试问题推荐:java常见面试问题)

  加载:查找并导入类文件;

  检查:加载的类文件数据的正确性;

  准备:为类的静态变量分配存储空间;

  解析:将符号引用转换为直接引用(这一步是可选的)

  初始化:初始化静态变量和静态代码块,在程序调用类的静态成员时开始执行,所以静态方法main()会成为一般程序的入口方法。类别的建构函式也会引发动作。

  2、Java 中会存在内存泄漏吗,请简单描述。

  内存泄漏意味着程序不再使用的对象或变量已经被占用在内存中。java中内存泄漏的场景,通俗地说就是一个程序员可能创建了一个对象,再也没有使用过,但是这个对象却一直被引用,也就是说这个对象没有用却无法被垃圾收集器回收。这就是java中的内存泄漏。

  (相关教程推荐:java入门教程)

  如果一个外部类的实例对象的方法返回一个内部类的实例对象,这个内部类对象已经被引用很久了。即使不再使用那个外部类实例对象,这个外部类对象也不会被垃圾收集,因为内部类持久存储外部类的实例对象,这也会导致内存泄漏。

  3、GC是什么?为什么要有GC?

  GC的意思是垃圾收集,用来防止内存泄漏,有效利用内存。垃圾收集器通常作为单个低优先级线程运行,它在不可预知的情况下清理和回收内存堆中的死对象或长期未使用的对象。程序员无法实时调用垃圾收集器来对部分或全部对象进行垃圾收集。

  4、JVM的内存模型(重要、GC算法、新生代、老年代、永久代等需要详细了解)

  新生代:所有新对象都由新生代分配内存。当伊甸园空间不足时,幸存的对象将被转移到幸存者。新生界的大小可以用-Xmn来控制,或者Eden与SurvivorRatio可以用-XX:SurvivorRatio来控制。

  老一代:它用于存储在新一代中多次垃圾收集后幸存下来的对象。

  持久化:实现方法区主要存储所有加载的类信息、方法信息、常量池等。

  您可以通过-XX:PermSize和-XX:MaxPermSize指定持久频带初始化值和最大值。永久空间和方法区域不一样,但是Hotspot JVM使用永久空间来实现方法区域。一些虚拟机没有永久空间,而是使用其他机制来实现方法区域。

  标记紧凑(标记紧凑)

  该算法结合了“清除标记”和“复制”算法的优点。也分为两个阶段。第一个阶段从根节点开始标记所有被引用的对象,第二个阶段遍历整个堆,删除未标记的对象,并将幸存的对象“压缩”到堆的一个块中,并按顺序释放它们。该算法避免了“标记-清除”算法的碎片问题和“复制”算法的空间问题。

  (相关视频教程推荐:java课程)

  5、GC的工作原理

  GC对每个对象都有一个引用计数属性。当添加一个引用时,计数增加1;当释放参考时,计数减1;当计数为0时,可以回收。GC是后台守护进程。对于Java程序员来说,new关键字用于分配对象。

  当释放一个对象时,我们称之为quot只要该对象的所有引用都被赋值为null,这样程序就不能再访问该对象。遥不可及的quot。GC将负责回收所有quot无法访问的quot对象的内存空间。

  对于GC,当程序员创建一个对象时,GC就开始监控对象的地址、大小和使用情况。通常,GC通过有向图的方式记录和管理堆中的所有对象。这样,就确定了哪些对象是quot高达quot,哪些对象是quot遥不可及的quot当GC确定某些对象是quot无法访问的quot,GC有责任回收这些内存空间。

  但是为了保证GC可以在不同的平台上实现,Java规范中并没有对GC的很多行为进行严格的规定。例如,在采用什么类型的回收算法以及何时回收等重要问题上,没有明确的规定。因此,不同的JVM实现者往往有不同的实现算法。这也给Java程序员的发展带来了不确定性。以上是多年开发经验总结出来的Java面试题—— (5)的详细内容。请多关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: