zoukankan      html  css  js  c++  java
  • 2015搜狐在线笔试题(内存泄露问题)(转)

    以下操作中,可能的解决java内存泄露问题的手段有:【多选】( )

    1. 在程序中调用System.gc();
    2. 关掉不再使用的网络/数据库连接;
    3. 在程序中调用finalize();
    4. 清理集合类中的无用对象;
    5. 在程序中调用Runtime.getRuntime().runFinalization();

    答案应该为BD
    首先内存泄露是由于某些无用对象无法回收,对象回收的条件是根据
    搜素算法不可达,那么哪些可以作为根呢?
    1.方法区中类静态变量引用的对象
    2.虚拟机栈帧中引用的对象
    3.本地方法栈帧中引用的对象
    4.方法区中常量引用的对象
    从这些根出发不可达的对象就是要回收的对象,答案是A和E都是jvm
    进行垃圾回收,不能从根本上解决内存泄露,答案c只是在垃圾回收
    前做一些操作而已(而且不保证会被执行完)而已.

    下面哪种情况会导致持久区jvm堆内存溢出()

    1. 循环上万次的字符串处理
    2. 在一段代码内申请上百M甚至上G的内存
    3. 使用CGLib技术直接操作字节码运行,生成大量的动态类
    4. 不断创建对象

    Permanent:持久代 (方法区)

    装载Class信息、常量、静态变量、即时编译器编译后的代码等基础数据,默认64M,如果是类很多很多的服务程序,需要加大其设置 -XX:MaxPermSize=,否则它满了之后会引起fullgc()或Out of Memory。 注意Spring,Hibernate这类喜欢AOP动态生成类的框架需要更多的持久代内存。一般情况下,持久代是不会进行GC的,除非通过 -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled进行强制设置。 

  • 相关阅读:
    怎么写好组件
    html5/css3常考面试题
    js各种继承方式和优缺点的介绍
    C#控件背景透明的几种解决方案
    c# 控件闪烁处理方法
    使用委托的BeginInvoke方法来完成复杂任务的操作
    C#中的预处理器指令
    C#中父窗口和子窗口之间实现控件互操作
    C#编程让Outlook乖乖交出帐户密码
    在Linux上运行C#
  • 原文地址:https://www.cnblogs.com/softidea/p/5280846.html
Copyright © 2011-2022 走看看