面试刷题24:介绍一枚 JAVA妹妹?
java提供的自动垃圾收集机制大大提高了程序员的开发效率。
但是自动垃圾收集不是万能的,明确jvm的内存结构,工作机制是设计高扩展应用的基础。
也是诊断jvm运行时问题的必备技能。
我是李福春,我在准备面试,今天的题目是:
jvm的内存结构是怎样的?哪些区域容易发生OOM?
答:分3部分回答,具体如上图所示:
1,线程私有的:分为虚拟机栈,本地方法栈,程序计数器;
2,线程共享的:分为堆,方法区(元数据,常量池)
3,jvm之外的:分为直接内存和 code cache ;
然后为每个部分分别展开说明一下。
虚拟机栈: 每个线程的一次方法执行都对应一个虚拟机栈的栈帧,包含方法入参,操作数,动态链接,方法正常结束或者异常退出的定义
本地方法栈:线程调用本地方法对应一个本地方法栈,跟虚拟机栈在同一块区域;
程序计数器:记录线程正在执行的jvm指令地址
堆:java的对象生成区域,所有的线程共享,是垃圾收集的重点照顾区域,可以进一步分为新声代,老年代,xms设置的是堆大小;
方法区:放了java的类对象定义,以及常量池;
发生OOM的区域如图所示,除了程序计数器部分,其它的部分都可能直接或者间接的引起OOM(OutOfMemoryError);
分别说明如下:
1,堆, 如内存泄露,堆大小设置不合理,运行期间对象的回收不及时,都可能引起堆的OOM;
2,栈:栈的无限递归调用直接导致StackOverFlowError,jvm会重新扩展栈空间,引起OOM;
3,方法区:老版本常量池的回收非常不积极;比如字符串缓存堆积;
4,给的元数据空间不足以及直接内存不足也是可能引起OOM;
小结
本节画了java的jvm的内存结构图,分别分析了每一块的用途;
然后针对每一块可能产生OOM的原因做了分类。
原创不易,转载请注明出处。
面试刷题24:介绍一枚 JAVA妹妹?的更多相关文章
- 安利一个基于Spring Cloud 的面试刷题系统。面试、毕设、项目经验一网打尽
推荐: 接近100K star 的Java学习/面试指南 Github 95k+点赞的Java面试/学习手册.pdf 今天给小伙伴们推荐一个朋友开源的面试刷题系统. 这篇文章我会从系统架构设计层面详解 ...
- 面试刷题11:java系统中io的分类有哪些?
随着分布式技术的普及和海量数据的增长,io的能力越来越重要,java提供的io模块提供了足够的扩展性来适应. 我是李福春,我在准备面试,今天的问题是: java中的io有哪几种? java中的io分3 ...
- 面试刷题26:新冠攻击人类?什么攻击java平台?
可恶的新冠病毒攻击人类,搞得IT就业形势相当不好?好在有钟南山院士带领我们提前开展好了防护工作! java作为基础平台安装在各种移动设备,PC,小型机,分布式服务器集群,各种不同的操作系统上.所以,对 ...
- 分享13道上海尚学堂拿回来的Java面试真题,这些都是Java核心常见问题,想拿OFFER必看!
上海尚学堂Java培训学员参加面试带回来的真题,分享出来与大家,希望大家能认真地看看做一遍.后面有详细题解答案,对照下,看看自己做得怎么样,把这些面试遇到的真题全部掌握,做好面试笔试前的准备. 一.1 ...
- 面试刷题21:java并发工具中的队列有哪些?

1. 网络连接基本 //通过指定URL获取原始数据,并返回一个字节流数组. public byte[] getUrlBytes(String urlSpec)throws IOException{ / ...
- 5G时代,会有什么奇葩事儿?
在3GPP RAN第187次会议关于5G短码方案的讨论中,中国华为推荐的PolarCode方案获得认可,成为5G控制信道eMBB场景编码的最终解决方案.坦白讲,笔者在读这个新闻的时候,手里备着一本 ...
- 学了C++不知道怎么搞后台开发?先看看这份学习路线吧!
作者:AJ 在去年结束的秋季招聘中,后台开发或服务器开发的岗位需求一度火热,甚至超过了算法岗.不少同学从诸神黄昏的算法岗战场上退下,转向更偏向工程能力的后台开发岗,从而造成后台开发岗位竞争的大爆发. ...
- IP 多播
IP 多播 一.IP 多播的基本概念 1.1.简介 不使用多播时需要发送 90 次单播: 使用多播时只需要发送 1 次多播: 1.2.IP 多播的一些特点 多播使用组地址:D 类IP地址支持多播.多播 ...
- jstack的使用
一.概述 有些时候我们需要查看下jvm中的线程执行情况,比如,发现服务器的CPU的负载突然增高了.出现了死锁.死循环等,我们该如何分析呢? 由于程序是正常运行的,没有任何的输出,从日志方面也看不出什么 ...
- ORACLE数据库实现主键自增
ORACLE数据库是甲骨文公司的一款关系数据库管理系统. 实现主键自动增长需要四个步骤: 去看 创建表格 去看 创建自增序列 去看 创建触发器 去看 插入测试 1.创建表格(必须有主键) -- 创建学 ...
- swoole(6)Task异步任务
一:什么是task进程? task进程是独立与worker进程的一组进程 ,他主要处理耗时较长的业务逻辑,并且不影响worker进程处理客户端的请求.worker进程通过task()函数把数据投递到 ...