面试还不懂如何回答面试JVM相关的问题,看这一篇就够了

回答阿里社招面试如何准备,顺便谈谈对于Java程序猿学习当中各个阶段的建议 社招面试如何准备以及JAVA各阶段如何学习。 阅读详情

1.JVM常用的参数有哪些?

标准参数

-version
-help
-server
-cp

3.1.2 -X参数

非标准参数,也就是在JDK各个版本中可能会变动

-Xint     解释执行
-Xcomp    第一次使用就编译成本地代码
-Xmixed   混合模式,JVM自己来决定

3.1.3 -XX参数

使用得最多的是参数类型

非标准化参数,相对不稳定,主要用于JVM调优和Debug

a.Boolean类型
格式:-XX:[+-]<name>            +或-表示启用或者禁用name属性
比如:-XX:+UseConcMarkSweepGC   表示启用CMS类型的垃圾回收器
 -XX:+UseG1GC              表示启用G1类型的垃圾回收器
b.非Boolean类型  
格式:-XX<name>=<value>表示name属性的值是value
比如:-XX:MaxGCPauseMillis=500

3.1.4 其他参数

-Xms1000M等价于-XX:InitialHeapSize=1000M
-Xmx1000M等价于-XX:MaxHeapSize=1000M
-Xss100等价于-XX:ThreadStackSize=100

所以这块也相当于是-XX类型的参数

3.1.5 查看参数

java -XX:+PrintFlagsFinal -version > flags.txt

**值得注意的是"="表示默认值,":="表示被用户或JVM修改后的值**
**要想查看某个进程具体参数的值,可以使用jinfo,这块后面聊**
**一般要设置参数,可以先查看一下当前参数是什么,然后进行修改**

由于文章的篇幅有限,老师这里只能为大家展示部分内容,同时JVM相关的问题全部给大家整理成了PDF,需要领取的直接点赞、转发文章之后,私信我【666】获取即可!

3.1.6 设置参数的常见方式

  • 开发工具中设置比如IDEA,eclipse
  • 运行jar包的时候:java -XX:+UseG1GC xxx.jar
  • web容器比如tomcat,可以在脚本中进行设置
  • 通过jinfo实时调整某个java进程的参数(参数只有被标记为manageable的flags可以被实时修改)

3.1.7 实践和单位换算

1Byte(字节)=8bit(位)
1KB=1024Byte(字节)
1MB=1024KB
1GB=1024MB
1TB=1024GB
(1)设置堆内存大小和参数打印
-Xmx100M -Xms100M -XX:+PrintFlagsFinal
(2)查询+PrintFlagsFinal的值
:=true
(3)查询堆内存大小MaxHeapSize
:= 104857600
(4)换算
104857600(Byte)/1024=102400(KB)
102400(KB)/1024=100(MB)
(5)结论
104857600是字节单位

3.1.8 常用参数含义

参数

含义

说明

-XX:CICompilerCount=3

最大并行编译数

如果设置大于1,虽然编译速度会提高,但是同样影响系统稳定性,会增加JVM崩溃的可能

-XX:InitialHeapSize=100M

初始化堆大小

简写-Xms100M

-XX:MaxHeapSize=100M

最大堆大小

简写-Xms100M

-XX:NewSize=20M

设置年轻化的大小

-XX:MaxNewSize=50M

年轻代最大大小

-XX:OldSize=50M

设置老年代大小

-XX:MetaspaceSize=50M

设置方法区大小

-XX:MaxMetaspaceSize=50M

方法区最大大小

-XX:+UseParallelGC

使用UseParallelGC

新生代,吞吐量优先

-XX:+UseParallelOldGC

使用UseParallelOldGC

老年代,吞吐量优先

-XX:+UseConcMarkSweepGC

使用CMS

老年代,停顿时间优先

-XX:+UseG1GC

使用G1GC

新生代,老年代,停顿时间优先

-XX:NewRatio

新老生代的比值

**比如-XX:Ratio=4,则表示新生代:老年代=1:4,也就是新生代占整个堆内存的1/5**

-XX:SurvivorRatio

两个S区和Eden区的比值

**比如-XX:SurvivorRatio=8,也就是(S0+S1):Eden=2:8,也就是一个S占整个新生代的1/10**

-XX:+HeapDumpOnOutOfMemoryError

启动堆内存溢出打印

当JVM堆内存发生溢出时,也就是OOM,自动生成dump文件

-XX:HeapDumpPath=heap.hprof

指定堆内存溢出打印目录

表示在当前目录生成一个heap.hprof文件

-XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintGCDateStamps -Xloggc:g1-gc.log

打印出GC日志

可以使用不同的垃圾收集器,对比查看GC情况

-Xss128k

设置每个线程的堆栈大小

经验值是3000-5000最佳

-XX:MaxTenuringThreshold=6

提升年老代的最大临界值

默认值为 15

-XX:InitiatingHeapOccupancyPercent

启动并发GC周期时堆内存使用占比

G1之类的垃圾收集器用它来触发并发GC周期,基于整个堆的使用率,而不只是某一代内存的使用比. 值为 0 则表示”一直执行GC循环”. 默认值为 45.

-XX:G1HeapWastePercent

允许浪费对空间的占比

默认是10%,如果并发标记可回收的空间小于10%,则不会触发MixedGC。

-XX:MaxGCPauseMillis=200ms

G1最大停顿时间

暂停时间不能太小,太小的话就会导致出现G1跟不上垃圾产生的速度。最终退化成Full GC。所以对这个参数的调优是一个持续的过程,逐步调整到最佳状态。

-XX:ConcGCThreads=n

并发垃圾收集器使用的线程数量

默认值随JVM运行的平台不同而不同

-XX:G1MixedGCLiveThresholdPercent=65

混合垃圾回收周期中要包括的旧区域设置占用率阈值

默认占用率为 65%

-XX:G1MixedGCCountTarget=8

设置标记周期完成后,存活数据上限为
G1MixedGCLIveThresholdPercent 的旧区域执行混合垃圾回收的目标次数

默认8次混合垃圾回收,混合回收的目标是要控制在此目标次数以内

-XX:G1OldCSetRegionThresholdPercent=1

描述Mixed GC时,Old Region被加入到CSet中

默认情况下,G1只把10%的Old Region加入到CSet中

2.JVM中常用的命令有哪些?

2.1.1 jps

查看java进程

The jps command lists the instrumented Java HotSpot VMs on the target system. The command is limited to reporting information on JVMs for which it has the access permissions.

2.1.2 jinfo

(1)实时查看和调整JVM配置参数

The jinfo command prints Java configuration information for a specified Java process or core file or a remote debug server. The configuration information includes Java system properties and Java Virtual Machine (JVM) command-line flags.

(2)查看用法

jinfo -flag name PID 查看某个java进程的name属性的值

jinfo -flag MaxHeapSize PID 
jinfo -flag UseG1GC PID

(3)修改

参数只有被标记为manageable的flags可以被实时修改

jinfo -flag [+|-] PID
jinfo -flag <name>=<value> PID

(4)查看曾经赋过值的一些参数

jinfo -flags PID

2.1.3 jstat

(1)查看虚拟机性能统计信息

The jstat command displays performance statistics for an instrumented Java HotSpot VM. The target JVM is identified by its virtual machine identifier, or vmid option.

(2)查看类装载信息

jstat -class PID 1000 10   查看某个java进程的类装载信息,每1000毫秒输出一次,共输出10次

(3)查看垃圾收集信息

jstat -gc PID 1000 10

2.1.4 jstack

(1)查看线程堆栈信息

The jstack command prints Java stack traces of Java threads for a specified Java process, core file, or remote debug server.

(2)用法

jstack PID

(4)排查死锁案例

  • DeadLockDemo
//运行主类
public class DeadLockDemo
{
    public static void main(String[] args)
    {
        DeadLock d1=new DeadLock(true);
        DeadLock d2=new DeadLock(false);
        Thread t1=new Thread(d1);
        Thread t2=new Thread(d2);
        t1.start();
        t2.start();
    }
}
//定义锁对象
class MyLock{
    public static Object obj1=new Object();
    public static Object obj2=new Object();
}
//死锁代码
class DeadLock implements Runnable{
    private boolean flag;
    DeadLock(boolean flag){
        this.flag=flag;
    }
    public void run() {
        if(flag) {
            while(true) {
                synchronized(MyLock.obj1) {
                    System.out.println(Thread.currentThread().getName()+"----if获得obj1锁");
                    synchronized(MyLock.obj2) {
                        System.out.println(Thread.currentThread().getName()+"----if获得obj2锁");
                    }
                }
            }
        }
        else {
            while(true){
                synchronized(MyLock.obj2) {
                    System.out.println(Thread.currentThread().getName()+"----否则获得obj2锁");
                    synchronized(MyLock.obj1) {
                        System.out.println(Thread.currentThread().getName()+"----否则获得obj1锁");

                    }
                }
            }
        }
    }
}
  • 运行结果

  • jstack分析

把打印信息拉到最后可以发现

2.1.5 jmap

(1)生成堆转储快照

The jmap command prints shared object memory maps or heap memory details of a specified process, core file, or remote debug server.

(2)打印出堆内存相关信息

jmap -heap PID
jinfo -flag UsePSAdaptiveSurvivorSizePolicy 35352
-XX:SurvivorRatio=8

(3)dump出堆内存相关信息

jmap -dump:format=b,file=heap.hprof PID

(4)要是在发生堆内存溢出的时候,能自动dump出该文件就好了

一般在开发中,JVM参数可以加上下面两句,这样内存溢出时,会自动dump出该文件

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heap.hprof

设置堆内存大小: -Xms20M -Xmx20M
启动,然后访问localhost:9090/heap,使得堆内存溢出

面试官问你项目中的JVM性能优化你怎么聊?

性能优化

JVM的性能优化可以分为代码层面和非代码层面。

在代码层面,大家可以结合字节码指令进行优化,比如一个循环语句,可以将循环不相关的代码提取到循环体之外,这样在字节码层面就不需要重复执行这些代码了。

在非代码层面,一般情况可以从内存、gc以及cpu占用率等方面进行优化。

注意,JVM调优是一个漫长和复杂的过程,而在很多情况下,JVM是不需要优化的,因为JVM本身已经做了很多的内部优化操作。

那今天我们就从内存、gc以及cpu这3个方面和大家一起探讨一下JVM的优化,但是大家要注意的是****不要为了调优和调优。

4.1 内存

4.1.1 内存分配

正常情况下不需要设置,那如果是促销或者秒杀的场景呢?

每台机器配置2c4G,以每秒3000笔订单为例,整个过程持续60秒

4.1.2 内存溢出(OOM)

一般会有两个原因:

(1)大并发情况下

(2)内存泄露导致内存溢出

4.1.2.1 大并发[秒杀]

浏览器缓存、本地缓存、验证码

CDN静态资源服务器

集群+负载均衡

动静态资源分离、限流[基于令牌桶、漏桶算法]

应用级别缓存、接口防刷限流、队列、Tomcat性能优化

异步消息中间件

Redis热点数据对象缓存

分布式锁、数据库锁

5分钟之内没有支付,取消订单、恢复库存等

4.1.2.2 内存泄露导致内存溢出

ThreadLocal引起的内存泄露,最终导致内存溢出

public class TLController { @RequestMapping(value = "/tl") public String tl(HttpServletRequest request) { ThreadLocal<Byte[]> tl = new ThreadLocal<Byte[]>(); // 1MB tl.set(new Byte[1024*1024]); return "ok"; } }

(1)上传到阿里云服务器

jvm-case-0.0.1-SNAPSHOT.jar

(2)启动

java -jar -Xms1000M -Xmx1000M -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=jvm.hprof  jvm-case-0.0.1-SNAPSHOT.jar

(3)使用jmeter模拟10000次并发

39.100.39.63:8080/tl

(4)top命令查看

top
top -Hp PID

(5)jstack查看线程情况,发现没有死锁或者IO阻塞的情况

jstack PID
java -jar arthas.jar   --->   thread

(6)查看堆内存的使用,发现堆内存的使用率已经高达88.95%

jmap -heap PID
java -jar arthas.jar   --->   dashboard

(7)此时可以大体判断出来,发生了内存泄露从而导致的内存溢出,那怎么排查呢?

jmap -histo:live PID | more
获取到jvm.hprof文件,上传到指定的工具分析,比如heaphero.io

4.2 GC

这里以G1垃圾收集器调优为例

4.2.1 是否选用G1

官网:
https://docs.oracle.com/javase/8/docs/technotes/guides/vm/G1.html#use_cases

(1)50%以上的堆被存活对象占用
(2)对象分配和晋升的速度变化非常大
(3)垃圾回收时间比较长

4.2.2 G1调优

(1)使用G1GC垃圾收集器: -XX:+UseG1GC

修改配置参数,获取到gc日志,使用GCViewer分析吞吐量和响应时间

Throughput       Min Pause       Max Pause      Avg Pause       GC count
  99.16%         0.00016s         0.0137s        0.00559s          12

(2)调整内存大小再获取gc日志分析

-XX:MetaspaceSize=100M
-Xms300M
-Xmx300M

比如设置堆内存的大小,获取到gc日志,使用GCViewer分析吞吐量和响应时间

Throughput       Min Pause       Max Pause      Avg Pause       GC count
  98.89%          0.00021s        0.01531s       0.00538s           12

(3)调整最大停顿时间

-XX:MaxGCPauseMillis=200    设置最大GC停顿时间指标

比如设置最大停顿时间,获取到gc日志,使用GCViewer分析吞吐量和响应时间

Throughput       Min Pause       Max Pause      Avg Pause       GC count
  98.96%          0.00015s        0.01737s       0.00574s          12

(4)启动并发GC时堆内存占用百分比

-XX:InitiatingHeapOccupancyPercent=45 
G1用它来触发并发GC周期,基于整个堆的使用率,而不只是某一代内存的使用比例。值为 0 则表示“一直执行GC循环)'. 默认值为 45 (例如, 全部的 45% 或者使用了45%).

比如设置该百分比参数,获取到gc日志,使用GCViewer分析吞吐量和响应时间

Throughput       Min Pause       Max Pause      Avg Pause       GC count
  98.11%          0.00406s        0.00532s       0.00469s          12

4.2.3 G1调优最佳实战

官网:
https://docs.oracle.com/javase/8/docs/technotes/guides/vm/gctuning/g1_gc_tuning.html#recommendations)

(1)不要手动设置新生代和老年代的大小,只要设置整个堆的大小

why:https://blogs.oracle.com/poonam/increased-heap-usage-with-g1-gc

G1收集器在运行过程中,会自己调整新生代和老年代的大小 其实是通过adapt代的大小来调整对象晋升的速度和年龄,从而达到为收集器设置的暂停时间目标 如果手动设置了大小就意味着放弃了G1的自动调优

(2)不断调优暂停时间目标

一般情况下这个值设置到100ms或者200ms都是可以的(不同情况下会不一样),但如果设置成50ms就不太合理。暂停时间设置的太短,就会导致出现G1跟不上垃圾产生的速度。最终退化成Full GC。所以对这个参数的调优是一个持续的过程,逐步调整到最佳状态。暂停时间只是一个目标,并不能总是得到满足。

(3)使用-XX:ConcGCThreads=n来增加标记线程的数量

IHOP如果阀值设置过高,可能会遇到转移失败的风险,比如对象进行转移时空间不足。如果阀值设置过低,就会使标记周期运行过于频繁,并且有可能混合收集期回收不到空间。 IHOP值如果设置合理,但是在并发周期时间过长时,可以尝试增加并发线程数,调高ConcGCThreads。

**(4)MixedGC调优 **

-XX:InitiatingHeapOccupancyPercent -XX:G1MixedGCLiveThresholdPercent -XX:G1MixedGCCountTarger -XX:G1OldCSetRegionThresholdPercent

(5)适当增加堆内存大小

(6)不正常的Full GC

有时候会发现系统刚刚启动的时候,就会发生一次Full GC,但是老年代空间比较充足,一般是由Metaspace区域引起的。可以通过MetaspaceSize适当增加其大家,比如256M。

4.3 JVM性能优化指南

垃圾回收的预调优

1.上线前内存的配置是否符合并发要求,不符合需要调整

从对象的内存布局开始计算,计算出堆内存大小,然后*并发时间,算出堆内存占用情况,然后计算内存是否扛得住,考虑负载均衡以及冗余情况

2.压测的吞吐是多少 ,一般控制在95%以上

极限吞吐的情况下,不超过1%的偏差,调整停顿时间,使用GC view或者其他GC工具分析

Throughput       Min Pause       Max Pause      Avg Pause       GC count
  99.16%         0.00016s         0.0137s        0.00559s          12

3.Full GC的频率以及Young GC的频率,是否需要更换GC收集器

比如前面讲的G1

4.可靠性观测:会不会出现内存泄露,这个可以观测出来的,根据内存变化情况

可以进行两次GC,然后对于Dump出的文件,分析文件内存移动回收情况

5.垃圾收集器的参数是否要改变,这个也是根据吞吐量以及GC来确定的

这个跟第2个情况配合使用

6.CPU的使用率情况

分析死锁以及内存泄漏相关情况

死锁:jstack

04目标检测-Two-stage的目标检测算法 前面我们对进行了对比分析,同时上一篇我们介绍了传统算法在目标检测的原理和效果,此篇我们记录了我学习目标检测算法的深度,深入讲述一下深度学习算法在目标检测的原理和效果。原文链接:https://blog.youkuaiyun.com/qq_41946216/article/details/132800752。版权声明:本文为优快云博主「爱吃面的猫」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。One-stage(YOLO和SSD系列):直接回归目标位置。 阅读详情

相关推荐

手把手教你解决COLMAP编译中的Ceres CUDA支持问题(附详细配置步骤)

本文详细解析了COLMAP编译中Ceres CUDA支持问题的完整解决方案,包括环境准备、Ceres Solver的CUDA编译配置、COLMAP的CUDA集成配置等关键步骤。通过优化CMake参数和解决常见错误,帮助技术人员充分利用GPU加速优势,提升三维重建效率。

vodka的博客 862

拜托,面试别再问我JVM了!!!

搞了N年Java,不少朋友困惑:JavaWeb开发不成问题,DAO和MyBatis也用得很熟,但总感觉到了瓶颈,对JVM也深入不下去,到底该怎么办?画外音:兄弟姐妹们有没...

架构师之路 1936

ic后端学习笔记-floorplan

floorplan是布图规划,规划包括定义芯片的大小,定义芯片内各种模块、hard macros(硬核。比如RAM,ROM及其他IP模块等)、IO等的大小和位置,有时候还需要提前定义一些placement blockages,groups/regions等等,是后端设计的第一步,也是后续所有P&R工作的基础。floorplan与placement的区别是。

tfrofc的博客 5832

面试必问之JVM原理

1:什么是JVMJVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。Java虚拟机包括一套字节码指令集、一组寄存器、一个栈、一个垃圾回收堆和一个存储方法域。 JVM屏蔽了与具体操作系统平台相关的信息,使Java程序只需生成在Java虚拟机上运行的目标代码(字节码),...

weixin_33889245的博客 5737

开发者的避坑指南:在Apple Silicon Mac上构建RocketMQ Python客户端的完整心路历程

本文详细记录了在Apple Silicon Mac上构建RocketMQ Python客户端的完整过程,重点解决了架构兼容性问题。通过源码编译rocketmq-client-cpp库,修复构建脚本和CMake配置,最终成功在M2芯片MacBook Pro上部署RocketMQ Python客户端,为开发者提供了实用的避坑指南。

Pepper的专栏 696

ServiceNow Discovery & CMDB Interview Questions and Answers (2025)

【代码】ServiceNow Discovery & CMDB Interview Questions and Answers (2025)

weixin_47584092的博客 910

面试的时候突然遇到答不上的问题怎么办?

前言 今天给大家讲讲面试过程当中最长遇到的窘境,也是最能体现一个候选人临场应变能力的地方,那就是当我们在面试的过程当中,遇到的问题回答不上来的时候,该怎么办。 误区 在开始讲解之前,先纠正一个误区,那就是对于一场面试而言,最后的结果**好坏并不完全取决于面试当中的问题是否都回答了上来。能不能录取和是否回答出所有问题并没有直接的联系。**换句话说,我自己经历过的,无论是面试也好,还是面别人也罢,问题...

beibei_programme的博客 7万+

NVIDIA显卡在Linux下的功率限制问题:RTX 3060 Laptop的解决方案与避坑指南

本文针对NVIDIA RTX 3060 Laptop显卡在Linux系统下遭遇功率限制的问题,提供了详细的诊断与解决方案。通过使用nvidia-smi工具监控显卡状态,并重点介绍了通过升级驱动、启用nvidia-powerd服务来激活Dynamic Boost 2.0功能,从而安全、智能地解锁额外显卡功率,有效提升性能。

weixin_29290947的博客 637

Java初中级工程师面试指南:从理论到实战的完美回答

Java面试备战指南:15大核心问题精解 本文为Java初中级工程师提供全面的面试解决方案,涵盖Java基础、JVM并发、数据库、框架和项目架构五大核心领域。精选15个高频面试题,每个问题包含: 回答思路 - 逻辑清晰的解题框架 示例代码 - 典型场景的代码实现 完美回答 - 专业简洁的应答模板 重点内容: 集合框架:ArrayList与LinkedList的底层对比 多线程:Thread与Runnable的优劣势分析 JVM内存:堆栈区别及OOM问题解决方案 MySQL索引:B+树原理与索引优化实践 缓存

私聊前往站内信:https://i.youkuaiyun.com/#/msg/chat/weixin_44976692 2405

微信电脑版本不会自动下载图片吗?——没有找到解决方法。——只会默认下载doc等文件,图片不行,需要自己另存为——有什么办法解决吗?

微信电脑版本不会自动下载图片吗?——没有找到解决方法。——只会默认下载doc等文件,图片不行,需要自己另存为——有什么办法解决吗?此外,用户还可以选择将接收到的图片、视频和文件保存到指定的文件夹中。‌用户可以在微信设置中调整这一设置。

qq_15963745的博客 5094

c#仿热血江湖

Int32_1 = (int) table.Rows[i]["FLD_初级附魂"],Int32_2 = (int) table.Rows[i]["FLD_中级附魂"],Int32_3 = (int) table.Rows[i]["FLD_是否绑定"],Int32_0 = (int) table.Rows[i]["FLD_进化"],Form1.smethod_1(2, "加载百宝阁物品----没有百宝阁数据");Form1.smethod_1(2, "加载物品商店----没有物品数据");

weixin_42132177的博客 143

【Java面试题】如何回答GC相关问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/zjkC050818/article/details/78376588 </div> <link rel="stylesheet" href="https://csdnimg.cn/release/pho...

super-yong的博客 658

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java面试问题笔记——JVM

1、知识点汇总 JVM是Java运行基础,面试时一定会遇到JVM的有关问题,内容相对集中,但对只是深度要求较高. 其中内存模型,类加载机制,GC是重点方面.性能调优部分更偏向应用,重点突出实践能力.编译器优化和执行模式部分偏向于理论基础,重点掌握知识点. 需了解 内存模型各部分作用,保存哪些数据. 类加载双亲委派加载机制,常用加载器分别加载哪种类型的类. GC分代回收的思想和依据以及不同垃圾回收...

努力学习的大小宝 8633

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

2022年最新面试JVM面试追魂夺命17问,教科书级回答

文章目录前言1.JVM的运行时数据区有哪些?2.什么是堆内存?堆内存包含哪些部分?3.什么是内存溢出?4.什么是内存泄漏?与内存溢出有什么关系?与内存溢出的关系!5.你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms和G1,包括原理,流程,优缺点。CMS收集器和G1收集器的区别6.常用的JVM启动参数有哪些?7.设置堆空间的最大值(-Xmx)应该要考虑哪些因素?8.什么是STW?什么是安全点,什么是安全区域?安全点安全区域9.如果CPU使用率突然飙升,你会怎么排查?10.判断一个对象应该被回收11.回收方

一名很普通的互联网打工人 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

15个经典面试问题及回答思路,很多人死在了最后一个问题上

无论是哪家公司,都很重视高并发高可用的技术,重视基础,重视JVM。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。最后我整理了一些面试真题资料,技术知识点剖析教程,还有和广大同仁一起交流学习共同进步,还有一些职业经验的分享。的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。

芯_v_648374雨馨博客 1559

《不看后悔》超赞!来一份常见 JVM 面试题+“答案”!

原创:小姐姐味道(微信公众号ID:xjjdog),欢迎分享,转载请保留出处。任何不保留此声明的转载都是抄袭。年底了,xjjdog决定来一篇实用的硬核文章。本篇文章多达38道面试题,照顾到...

小姐姐味道 2020

介绍一下JVM内存结构面试回答(后续会继续补充)

Java对于内存的管理是采用分区的方式进行管理的、不同区域的特性、存储的数据都是不同的。根据《Java虚拟机规范》的规定、Java虚拟机所管理的内存将会包括以下几个运行时数据区域分析:首先介绍一下程序计数器。它是一块一块较小的内存空间、每个线程都有独立的程序计数器、是线程的它记录了当前线程所执行的字节码指令地址(也就是说下一条将要执行的指令)。如果执行的是 Java 方法、它记录的是正在执行的字节码地址如果执行的是Native方法、则为空。程序计数器是唯一一个不会出现。

wy990880的博客 1282

记JVM相关一些常见面试题

只有两者都相同的情况,才认为两个类是相同的。每个类加载器都有自己的命名空间(由该加载器及所有父类加载器所加载的类组成,在同一个命名空间中,不会出现类的完整名字(包括类的包名)相同的两个类;答:主要是为了安全性,避免用户自己编写的类动态替换 Java 的一些核心类,比如 String,同时也避免了重复加载,因为 JVM 中区分不同类,不仅仅是根据类名,相同的 class 文件被不同的 ClassLoader 加载就是不同的两个类,如果相互转型的话会抛java.lang.ClassCaseException.

奋斗男孩的博客 1363

大厂面试官必问的那些JVM问题。到底应该怎么回答

这是传说中程序员的一天:8:00 闹铃第N遍响起,木然起床;9:00 地铁里各种气味交织,拼命把手机端到脸前;10:00 嚼着公司楼下的煎饼,开始敲敲敲敲敲代码12:00...

weixin_43167418的博客 1282

当面试被问到jvm(Java虚拟机)时,如何将面试官引入自己的节奏?

作为一名Java开发工程师,不管是校招还是社招jvm一定是必问必会的知识点。虽然说真正开发中用到的不多,甚至可以说用不到(对于刚入行或者Java初级),但是当面试官问出来,就是想考察你对知识的一个广度,如果你能答得很好,那么恭喜你,你已经赢得面试官的好感。在接下来的面试中你会很自信。当然如果你对jvm了解的很深刻,你还可以将面试官引导到自己的节奏。在做自我介绍的时候可以可以强调自己熟悉jvm,那么面试官就有很大概率问到jvm。这篇文章就来详细的介绍一下面试中遇到有关jvm相关面试题该怎么回答。

唯有努力,方可自信! 1万+
上一篇: 顶配版 Spring 全家桶高级笔记+300道硬核面试题,跪着啃完了
下一篇: RocketMQ 地推模式和拉模式有什么区别?
JavaMonsterr
博客等级 码龄4年 211粉丝 481原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值