java核心-JVM-gc面试题
1.写一个memory leak的例子
public class MemonyLeak {
//1.memoryLeak内存泄漏
/*
这类错误报错具体显示:java.lang.OutOfMemoryError: java heap space
导致原因,是gc无法回收不再使用的对象,这些无用的对象导致堆内存不足。
通常有成员变量或全局变量导致,解决办法就是定义好变量的作用范围
*/
Map<String, List<String>> a;
public void printSomething(){
ArrayList<String> content = new ArrayList<>();
for(int i=0;i<10000000;i++){
content.add(i+i+i+i+System.currentTimeMillis()+"");
}
a = new HashMap<>();
a.put("aa", content);
System.out.println(a.hashCode());
}
public static void main(String[] args){
MemonyLeak memonyLeak1 = new MemonyLeak();
memonyLeak1.printSomething();
MemonyLeak memonyLeak2 = new MemonyLeak();
memonyLeak2.printSomething();
MemonyLeak memonyLeak3 = new MemonyLeak();
memonyLeak3.printSomething();
MemonyLeak memonyLeak4 = new MemonyLeak();
memonyLeak4.printSomething();
MemonyLeak memonyLeak5 = new MemonyLeak();
memonyLeak5.printSomething();
MemonyLeak memonyLeak6 = new MemonyLeak();
memonyLeak6.printSomething();
}
}
执行了好半天,结果报错了
解决办法:
将成员变量写到方法printSomething()里面
public void printSomething(){
Map<String, List<String>> a;
ArrayList<String> content = new ArrayList<>();
for(int i=0;i<10000000;i++){
content.add(i+i+i+i+System.currentTimeMillis()+"");
}
a = new HashMap<>();
a.put("aa", content);
System.out.println(a.hashCode());
}
执行结果
可见对于内存泄漏的问题可能来源了对象的作用域定义不合理,成员变量或全局变量的对象作用域比较宽,gc来不及回收容易造成内存泄漏
java核心-JVM-gc面试题的更多相关文章
- Java中JVM相关面试题-整理
1.JVM内存模型 •程序计数器:当前线程字所执行节码的行号指示器,用于记录正在执行的虚拟机字节指令地址,线程私有. •Java虚拟机栈:存放基本数据类型,对象的引用,方法出口等,线程私有. •本地方 ...
- Java 核心内容相关面试题【2】
第一,谈谈final, finally, finalize的区别. final?修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此一个类不能既被声明为 ...
- Java 核心内容相关面试题【3】
目录 面向对象编程(OOP) 常见的Java问题 Java线程 Java集合类 垃圾收集器 异常处理 Java小应用程序(Applet) Swing JDBC 远程方法调用(RMI) Servlet ...
- Java 核心内容相关面试题【4】
spingmvc 和 structs的区别 我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置. spring3 mvc可以认为已经100%零配置了(除了配置spring mv ...
- Java 核心内容相关面试题【1】
1.什么是 transient 变量? transient 变量是指不会被序列化的变量. 2.什么是同步(synchronization)? 在多线程环境中,同步是指控制多个线程访问共享资源的方式.没 ...
- 万字长文,62道Java核心面试题,一次性打包送给积极向上的你
先看再点赞,给自己一点思考的时间,微信搜索[沉默王二]关注这个靠才华苟且的程序员.本文 GitHub github.com/itwanger 已收录,里面还有一线大厂整理的面试题,以及我的系列文章. ...
- JVM探究 面试题 JVM的位置 三种JVM:HotSpot 新生区 Young/ New 养老区 Old 永久区 Perm 堆内存调优GC的算法有哪些?标记清除法,标记压缩,复制算法,引用计数法
JVM探究 面试题: 请你弹弹你对JVM的理解?Java8虚拟机和之前的变化更新? 什么是OOM?什么是栈溢出StackOverFlowError?怎么分析 JVM的常用调优参数有哪些? 内存快照如何 ...
- 金三银四面试季节之Java 核心面试技术点 - JVM 小结
原文:https://github.com/linsheng9731/notebook/blob/master/java/JVM.md 描述一下 JVM 的内存区域 程序计数器(PC,Program ...
- 月薪30k的Java架构师JVM常见面试题解析
在做程序员的路上经常会遇到的JVM一些经典面试题,今天给大家分享出我自己的解题思路,希望对大家有帮助,后续有空会持续更新. 1.什么情况下会发生栈内存溢出. 思路: 描述栈定义,再描述为什么会溢出,再 ...
- 31道Java核心面试题,一次性打包送给你
先看再点赞,给自己一点思考的时间,微信搜索[沉默王二]关注这个靠才华苟且的程序员.本文 GitHub github.com/itwanger 已收录,里面还有一线大厂整理的面试题,以及我的系列文章. ...
随机推荐
- Python 基础之函数初识与函数参数
一.函数初识 定义:满足某一个方法 满足某一个功能#(1)功能(包裹一部分代码 实现某一个功能 达成某一个目的)#(2)可以反复调用,提高代码的复用性,提高开发效率,便于维护管理#(3)函数的基本格式 ...
- Write-up-Bob_v1.0.1
关于 下载地址:点我 哔哩哔哩视频:哔哩哔哩 信息收集 网卡:vmnet8:IP在192.168.131.1/24 ➜ ~ ip a show dev vmnet8 5: vmnet8: <BR ...
- Codeforces 598E:Chocolate Bar
E. Chocolate Bar time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- Day2-D-Oil Deposits-POJ-1562
The GeoSurvComp geologic survey company is responsible for detecting underground oil deposits. GeoSu ...
- 嵊州普及Day4T4
题意:求最长上升序列长度和方案数. 思路:经典DP,不需什么别的东西,加一个数组储蓄程序数即可,原题300000可能N2会有问题,但问题不大. 见代码: #include<iostream> ...
- leetcode743 Network Delay Time
""" here are N network nodes, labelled 1 to N. Given times, a list of travel times as ...
- DEDE后台升级后不显示编辑器
dede5.7不显示编辑器不能编辑文章的解决办法:进入系统后台系统配置-系统基本参数-核心设置将fck换成ckeditor保存,当然需要fck编辑器也可以到dede官网下载.dede5.7不显示编辑器 ...
- 再次实践 MySQL chart【转】
学习了 chart 结构和模板的知识后,现在重新实践一次 MySQL chart,相信会有更多收获. chart 安装前的准备 作为准备工作,安装之前需要先清楚 chart 的使用方法.这些信息通常记 ...
- 【LeetCode】三角形最小路径和
[问题]给定一个三角形,找出自顶向下的最小路径和.每一步只能移动到下一行中相邻的结点上.例如,给定三角形: [ [], [,], [,,], [,,,] ] 自顶向下的最小路径和为 (即, + + + ...
- 链表题目汇总(python3)
1.从头到尾打印链表 输入一个链表,按链表值从尾到头的顺序返回一个ArrayList. # -*- coding:utf-8 -*- class ListNode: def __init__(self ...