博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2015搜狐在线笔试题(内存泄露问题)(转)
阅读量:6149 次
发布时间:2019-06-21

本文共 711 字,大约阅读时间需要 2 分钟。

以下操作中,可能的解决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进行强制设置。 

 

转载地址:http://pumya.baihongyu.com/

你可能感兴趣的文章
4.3.3版本之引擎bug
查看>>
SQL Server表分区详解
查看>>
使用FMDB最新v2.3版本教程
查看>>
SSIS从理论到实战,再到应用(3)----SSIS包的变量,约束,常用容器
查看>>
STM32启动过程--启动文件--分析
查看>>
垂死挣扎还是涅槃重生 -- Delphi XE5 公布会归来感想
查看>>
淘宝的几个架构图
查看>>
Android扩展 - 拍照篇(Camera)
查看>>
数据加密插件
查看>>
linux后台运行程序
查看>>
win7 vs2012/2013 编译boost 1.55
查看>>
IIS7如何显示详细错误信息
查看>>
Tar打包、压缩与解压缩到指定目录的方法
查看>>
配置spring上下文
查看>>
Python异步IO --- 轻松管理10k+并发连接
查看>>
Oracle中drop user和drop user cascade的区别
查看>>
登记申请汇总
查看>>
Office WORD如何取消开始工作右侧栏
查看>>
Android Jni调用浅述
查看>>
CodeCombat森林关卡Python代码
查看>>