JVM的一些问题

本文详细解释了内存溢出(OOM)和内存泄漏的概念,以及它们之间的关系。在Java中,内存泄漏可能导致内存溢出,随着时间推移,内存问题会变得严重。文章还讨论了对象在内存中的占用,包括对象头的组成。此外,介绍了JVM的常用启动参数,如堆内存设置(XMX)、GC算法选择和日志配置。最后,提到了Java不同版本的默认垃圾收集器以及如何排查CPU使用率飙升和系统响应变慢的问题。
摘要由CSDN通过智能技术生成

4. 什么是 

内存溢出(OOM)是指可不足 

程序运行需要使用的内存超出最大可用值,如果不进行处理就会影响到其他进程, 

以现在操作系统的处理办法是:只要超出立即报错,比如   

就像杯下,了要溢500ml的容量,倒进 

600ml出造成 

4.1 什么是存泄? 

内存泄漏(Memory Leak)是指本来无用对象却继续占用内存,没有再恰当的释放占 不使用的内存,却没有被释放,称为没回收。 也就是该释放的没释放, 比较典型的场景是 每一个请求进来,或者每一次操作处理,都分配了内存,却有一部分不能回收(或未释放),那么随着处理的请求越来越多,内存泄漏也就越来越 

Java中一般指无用的对的引用不能GC回收清 

4.2 两者有么关 

如果存的内泄漏问然会起内存 内存泄漏一般是资源管理问题和程BUG,内存溢出则是内存空间不足和内存泄漏最终结 

5. 给定一的类,对象的 

public class MyOrder{ private

long orderId; private long 

userId; private byte state; 

private long  createMillis; 

一般来说,MyOrder 类的每会占40个字节 

5.1 怎么计出来? 

计算方 

12字节 

每个long类型的字8字节3long字段占用24字节 byte 字段1 

以上合计 37字节加上8字节对齐,则实际占用40个字 

5.2 对象头包含些部分 

对象头包含个部分 

一个器字,8 

用一机器字就是8字节 如果32GBJVM默认会开启针压只占4个字节 

所以前算中对象头12字节

如果是数组,对象头中还会多出一个部分: 

 int值,4字节 

6. 常用的JVM动参数? 

截止目前(20203),JVM可配置参数已经达到1000多个其中GC 关的JVM就有600多个 

但在绝大部分业务场景下,常用的JVM置参数也就10来个。

例如 

1 # JVM动参不换 

2 # 设置堆内存 

3 Xmx4g Xms4g 

4 # 指定GC算法 

5 XX:+UseG1GC ‐XX:MaxGCPauseMillis=50 

6 # 指定GC行线程数 

7 XX:ParallelGCThreads=4 

8 # 打印GC日志 

9 XX:+PrintGCDetails XX:+PrintGCDateStamps 

10 # 指定GC志文 

11 Xloggc:gc.log

12 # 指定Meta区的 

13 XX:MaxMetaspaceSize=2g 

14 # 设置单线程的大 

15 Xss1m 

16 # 指定堆存溢时自进行Dump 

17 XX:+HeapDumpOnOutOfMemoryError 

18 XX:HeapDumpPath=/usr/local/

此外,些常的属性 

255

1

2

 # 指定默的连超时 

2 Dsun.net.client.defaultConnectTimeout=2000 

3 Dsun.net.client.defaultReadTimeout=2000 

4 # 指定时 

5 Duser.timezone=GMT+08 

6 # 设置默的文编码UTF8 

7 Dfile.encoding=UTF8 

8 # 指定随数熵(Entropy Source) 

9 Djava.security.egd=file:/dev/./urandom

6.1 设置堆XMX应该考哪些 

需要根据系统的配置来确定,要给操作系JVM本身留定的剩余空间。推荐配或容里可用 70-80% 最好 

6.2 假设物内存8G置多大堆内存比? 

比如说统有 8G 物理内存自己能会用 7.5G 可以用,那 

么建议配 

 

,如果统里明确使内存方, 

说明 

个值 

6.3 

‐Xmx 

设置的值与JVM进程所用的存有什? 

JVM总内存=++非堆++Native 

6.4 怎样开GC 

一般来说,JDK8以下数来开GC 

XX:+PrintGCDetails XX:+PrintGCDateStamps ‐Xloggc:gc.log 

如果是在JDK9上的版格式不同 

Xlog:gc*=info:file=gc.log:time:filecount=0 

6.5 请指定使G1圾收集来启 

java XX:+UseG1GC 

Xms4g 

Xmx4g 

Xloggc:gc.log 

XX:+PrintGCDetails 

XX:+PrintGCDateStamps 

Hello 

Hello  

7. Java8默认使用的垃器是什? 

Java8版本的Hotspot JVM,默认情况下使用的是并行垃圾收集Parallel GC他厂商供的JDK8基本上使行垃 

7.1 Java11的默认圾收集是什? 

Java9之后,JDK默认使的垃圾收集器G1 

7.2 常见的圾收器有哪? 

常见的集器 

串行垃圾集器 ‐XX:+UseSerialGC 

并行垃圾集器 ‐XX:+UseParallelGC 

CMS垃圾收 

‐XX:+UseConcMarkSweepGC 

G1垃圾收 

XX:+UseG1GC 

7.3 什么是行垃收集? 

就是只单个worker线程来执行GC 

7.4 什么是行垃收集? 

并行垃,是使用多GC worker 线程并行垃收集, CPU的能力缩短圾收集时间 

除了单线程的GC其他的集器 PSCMS G1等新的圾收使 

用了多线来并GC工作 

7.5 什么是发垃收集? 

并发垃圾收集器,是指在应用程序在正常执行时,有一部GC任务,由GC线程用线程发执行。 

例如 CMS/G1的各种并发阶 

7.6 什么是量式圾收? 

首先 G1的堆内不再为年代和老分为多通常是 2048 

个)可对象小块堆smaller heap regions 

每个小能一被定义 Eden 区,一会被 Survivor 区或者 Old 区。 

这样划分之后,使 G1 不必每次都去回整个堆空间,而是以增量的方式来进理: 每次处理一部为此 GC collection set 下一次GC时在本次的基础上,再选定一定的区域来进行回收。增量式垃圾收集大大降GC暂停的 

7.7 什么是轻代 

年轻代是分垃圾集算法中的个概,相对于老代而,年轻代一包括: 

新生代,Eden 

年轻GC时,用区来保存对象 存活区 

一般2个存活,所以来回 

7.8 什么GC(GC pause)? 

因为GC过程中,有一部分操作需要等所有应用线程都到达安全点,暂停之后才行,这GC停顿,叫做GC暂停 

7.9 GC顿与STW停顿有么区 

这两者以认就是同 

8. 如果CPU使用率突然你会怎 

缺乏经,针当前问使具来集信息 

收集不同的指标CPU,内存,磁盘IO,网络等等)  

分析GC日志 

线并分

获取堆转储来进分析 

8.1 如果系响应慢,你怎么 

一般根据APM控来排查应本身问题 

有时候使Chrome浏览器等工具来排查外,比络问 

8.2 系统性一般么衡量 

可量化的3个性能指 

系统容量:比如配置,设计容量; 

观的TPS 
就是统延迟服务延时和 

这些指标。可以具体拓展到单机并发,总体并发,数据量,用户数,预算成本等等 

9. 使用过哪些JVM相关的工具? 

这个问据实情况回Linux命令,或者JDK供的工 

9.1 查看JVM的命令? 

可以使 

 

等等 

9.2 怎么查剩余? 

比如 

,

,

命令等 

9.3 查看线栈的具是什么? 

一般先使用 jps 再使 

9.4 用什么具来取堆内? 

一般使用 jmap 来获快照 

9.5 内存Dump哪些注? 

根据实际情况来看,获取内存快照可能会让系统暂停或阻塞一段时间,根据内存量 

使用jmap时,如指定  参数,发一FullGC,需注意 

9.6 使用JMAP堆内存致的数怎么 

示例 

jmap dump:format=b,file=3826.hprof 3826 

9.7 为什么储文 

.hprof 

结尾? 

JVM有一个内置的分析器叫做HPROF, 堆内存转储文件的,最早就是这款工具义的 

9.8 内存Dump之后,什么具来分? 

一般使用 Eclipse MAT工具,或者 jhat 工具来处理。 

9.9 如果忘了使什么参你一怎么处? 

上网搜较笨办法, 

另外就JDK工具都  选项来查看帮助信息,只要用得比较熟练,即使 

忘记了也很容易根据提示进行操作 

10. 开发性你碰到JVM 

比如GC问题、内存泄漏问题、或者其他疑难杂症等等。然后可一些续的问 

你遇到过的印象深的JVM问题是什 

么分和解决 

哪些得分享? 此问题为开放性问题,请根据自身情况进行回答,可以把自己思考的答案发到本课的微群里逐个行分析 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

向前齐步走

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值