精华内容
下载资源
问答
  • jvm常见面试题

    千次阅读 2019-04-22 00:34:45
    GC垃圾回收中的垃圾指的是什么?简单的来说是内存中已经不再使用到的空间就是垃圾 如何判断一个对象是否应该回收? 引用计数法 枚举根节点可达性分析(GCRoots) ...你说你做过jvm优化和参数配置,请问如何盘点查...
    1. GC垃圾回收中的垃圾指的是什么?

      • 简单的来说是内存中已经不再使用到的空间就是垃圾
    2. 如何判断一个对象是否应该回收?

      • 引用计数法
      • 枚举根节点可达性分析(GCRoots)
    3. java中可以作为GCRoots的对象有哪些?

      • 虚拟机栈中引用的对象(局部变量)
      • 方法区的静态属性引用的对象
      • 方法区中常量引用的对象
      • 本地方法栈中native方法引用的对象
    • JVM的参数类型

    • 标配参数

      • java -version
      • java -help
    • x参数(了解)

      • -Xcomp:第一次使用就编译成本地代码
      • -Xint:解释执行
    • xx参数

      • Boolean类型
        - [ ] -XX:+或者-某个属性值 +表示开启 -表示关闭 -XX:-PrintGCDetails / -XX: +PrintGCDetails
      • KV设值类型
        • -XX:属性key=属性值value -XX:MetaspaceSize=128m/-XX:MaxTenuringThreadhold=15
      • jinfo举例,如何查看当前运行程序的配置
    • 你说你做过jvm优化和参数配置,请问如何盘点查看jvm系统默认值?

      • java -XX:+PrintFlagsInitial
    E:\spring-boot\spring-boot-quickstart>java -XX:+PrintFlagsInitial
    [Global flags]
        intx ActiveProcessorCount                      = -1                                  {product}
       uintx AdaptiveSizeDecrementScaleFactor          = 4                                   {product}
       uintx AdaptiveSizeMajorGCDecayTimeScale         = 10                                  {product}
       uintx AdaptiveSizePausePolicy                   = 0                                   {product}
       uintx AdaptiveSizePolicyCollectionCostMargin    = 50                                  {product}
       uintx AdaptiveSizePolicyInitializingSteps       = 20                                  {product}
       uintx AdaptiveSizePolicyOutputInterval          = 0                                   {product}
       AllocatePrefetchStepSize                  = 16                                  {product}
        .......
    
    • java -XX:+PrintFlagsFinal -version
         .......
        intx WorkAroundNPTLTimedWaitHang               = 1                                   {product}
        uintx YoungGenerationSizeIncrement              = 20                                  {product}
        uintx YoungGenerationSizeSupplement             = 80                                  {product}
        uintx YoungGenerationSizeSupplementDecay        = 8                                   {product}
        uintx YoungPLABSize                             = 4096                                {product}
         bool ZeroTLAB                                  = false                               {product}
         intx hashCode                                  = 5                                   {product}
    java version "1.8.0_201"
    Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
    Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
    

    另外说明下:= 代表修改过

    • 查看默认的垃圾回收器
      java -XX:+PrintCommandLineFlags -version
    E:\spring-boot\spring-boot-quickstart>java -XX:+PrintCommandLineFlags -version
    -XX:InitialHeapSize=132843328 -XX:MaxHeapSize=2125493248 -XX:+PrintCommandLineFlags -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC
    java version "1.8.0_201"
    Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
    Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
    

    jps -l

        E:\spring-boot\spring-boot-quickstart>jps -l
        10016 org.jetbrains.jps.cmdline.Launcher
        11504 sun.tools.jps.Jps
        1572 org.jetbrains.jps.cmdline.Launcher
        7252 org.jetbrains.idea.maven.server.RemoteMavenServer
        10680 org.jetbrains.jps.cmdline.Launcher
        2488 com.demo.springbootquickstart.SpringBootQuickstartApplication
        2920
      jinfo -flag
       ````java
    E:\spring-boot\spring-boot-quickstart>jinfo -flag MetaspaceSize 2488
    -XX:MetaspaceSize=134217728
    E:\spring-boot\spring-boot-quickstart>jinfo -flag MaxTenuringThreshold 2488
    -XX:MaxTenuringThreshold=15
    

    jinfo -flags

    Attaching to process ID 2488, please wait...
    Debugger attached successfully.
    Server compiler detected.
    JVM version is 25.201-b09
    Non-default VM flags: -XX:-BytecodeVerificationLocal -XX:-BytecodeVerificationRemote -XX:CICompilerCount=3 -XX:InitialHeapSize=134217728 -XX:+ManagementServer -XX:MaxHeapSize=2126512128 -XX:MaxNewSize=708837376 -XX:MetaspaceSize
    =134217728 -XX:MinHeapDeltaBytes=524288 -XX:NewSize=44564480 -XX:OldSize=89653248 -XX:TieredStopAtLevel=1 -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseFastUnorderedTimeStamps -XX:-UseLargePagesIndividualAllocat
    ion -XX:+UseParallelGC
    Command line:  -XX:MetaspaceSize=128m -XX:TieredStopAtLevel=1 -Xverify:none -Dspring.output.ansi.enabled=always -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=51823 -Dcom.sun.management.jmxremote.authenticate
    =false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=localhost -Dspring.liveBeansView.mbeanDomain -Dspring.application.admin.enabled=true -javaagent:E:\Idea\IntelliJ IDEA 2018.2.3\lib\idea_rt.jar=51824:E:\I
    dea\IntelliJ IDEA 2018.2.3\bin -Dfile.encoding=UTF-8
    
    • 美团的一个坑题
      -Xms,-Xmx属于jvm参数类型的哪种?x?orXX?
      其实-Xms,-Xmx类似数据库的别名一样,-Xms为:InitialHeapSize -Xmx为:MaxHeapSize

    • 你工作中用的jvm常用基本配置参数有哪些?
      (-Xmx与与-Xms配成一致)

      • -Xms 初始大小内存,默认为物理内存的1/64 等价于 -XX:InitialHeapSize
      • -Xmx 最大分配内存,默认为物理内存的1/4 等价于 -XX:MaxHeapSize
      • -Xss 设置单个线程栈的大小,一般为512k~1024k 等价于 -XX:ThreadStackSize
      • -Xmn 设置新生代大小
      • -XX 设计元空间大小
        元空间和永久代类似,都是jvm规范方法区的是实现。不过元空间和永久代最大的区别在于:元空间并不在虚拟机中而是使用本地内存。因此,默认情况下,元空间的大小受到 本地内存的限制
    • -XX:+PrintGCDetails
      -Xms10m -Xmx10m -XX:+PrintGCDetails

      byte[] b = new byte[50*1024*1024];  //创建一个超大对象  模拟OutOfMemoryError
      

    运行上述代码直接OutOfMemoryError,如下报错细信息
    [GC (Allocation Failure) [PSYoungGen: 1657K->488K(2560K)] 1657K->680K(9728K), 0.0015944 secs] [Times: user=0.02 sys=0.00, real=0.00 secs]
    [GC (Allocation Failure) [PSYoungGen: 488K->456K(2560K)] 680K->648K(9728K), 0.0009643 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
    [Full GC (Allocation Failure) [PSYoungGen: 456K->0K(2560K)] [ParOldGen: 192K->623K(7168K)] 648K->623K(9728K), [Metaspace: 3213K->3213K(1056768K)], 0.0049357 secs] [Times: user=0.00 sys=0.00, real=0.01 secs]
    [GC (Allocation Failure) [PSYoungGen: 0K->0K(2560K)] 623K->623K(9728K), 0.0044222 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
    [Full GC (Allocation Failure) Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
    at java8.T.main(T.java:17)
    说明:
    在这里插入图片描述
    在这里插入图片描述

    • -XX:SurvivorRatio 默认 -XX:SurvivorRatio=8,Eden:SO1:SO2=8:1:1 美[ˈreɪʃioʊ]
    • -XX:NewRatio 新生代与老年代的比例 默认-XX:NewRatio =2 新生代1 老年代2 一般不用调
    • -XX:MaxTenuringThreshold 设置垃圾最大年龄 默认-XX:MaxTenuringThreshold=15 是有范围的我们修改只能在0-15之间

    请你谈谈强引用 弱引用 软引用 虚引用分别是什么?

    展开全文
  • JVM常见面试题

    2018-04-04 17:06:31
    1. 内存模型以及分区,需要详细到每个区...5. GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路?6. GC收集器有哪些?CMS收集器与G1收集器的特...

    1. 内存模型以及分区,需要详细到每个区放什么。

    2. 堆里面的分区:Eden,survival from to,老年代,各自的特点。

    3. 对象创建方法,对象的内存分配,对象的访问定位。

    4. GC的两种判定方法:引用计数与引用链。

    5. GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路?

    6. GC收集器有哪些?CMS收集器与G1收集器的特点。

    7. Minor GC与Full GC分别在什么时候发生?

    8. 几种常用的内存调试工具:jmap、jstack、jconsole。

    9. 类加载的五个过程:加载、验证、准备、解析、初始化。

    10. 双亲委派模型:Bootstrap ClassLoader、Extension ClassLoader、ApplicationClassLoader。

    11. 分派:静态分派与动态分派。


    展开全文
  • JVM必备面试题(一)

    2020-12-28 20:41:51
    JVM是Java运行基础,面试时一定会遇到JVM的有关问题,内容相对集中,但对只是深度要求较高. 其中内存模型,类加载机制,GC是重点方面.性能调优部分更偏向应用,重点突出实践能力.编译器优化和执行模式部分偏向于理论基础,...

    目录:

    1、知识点汇总
    2、知识点详解
    3、类加载与卸载
    4、堆和栈的区别
    5、什么时候会触发FullGC

    面试题目:

    1、知识点汇总
    JVM是Java运行基础,面试时一定会遇到JVM的有关问题,内容相对集中,但对只是深度要求较高.
    在这里插入图片描述
    其中内存模型,类加载机制,GC是重点方面.性能调优部分更偏向应用,重点突出实践能力.编译器优化和执行模式部分偏向于理论基础,重点掌握知识点.

    需了解
    内存模型各部分作用,保存哪些数据.

    类加载双亲委派加载机制,常用加载器分别加载哪种类型的类.

    GC分代回收的思想和依据以及不同垃圾回收算法的回收思路和适合场景.

    性能调优常有JVM优化参数作用,参数调优的依据,常用的JVM分析工具能分析哪些问题以及使用方法.

    执行模式解释/编译/混合模式的优缺点,Java7提供的分层编译技术,JIT即时编译技术,OSR栈上替换,C1/C2编译器针对的场景,C2针对的是server模式,优化更激进.新技术方面Java10的graal编译器

    编译器优化javac的编译过程,ast抽象语法树,编译器优化和运行器优化.、

    2、知识点详解:
    (1)JVM内存模型:
    线程独占:栈,本地方法栈,程序计数器
    线程共享:堆,方法区

    (2)栈:
    又称方法栈,线程私有的,线程执行方法是都会创建一个栈阵,用来存储局部变量表,操作栈,动态链接,方法出口等信息.调用方法时执行入栈,方法返回式执行出栈.

    (3)本地方法栈
    与栈类似,也是用来保存执行方法的信息.执行Java方法是使用栈,执行Native方法时使用本地方法栈.

    (4)程序计数器
    保存着当前线程执行的字节码位置,每个线程工作时都有独立的计数器,只为执行Java方法服务,执行
    Native方法时,程序计数器为空.

    (5)堆
    JVM内存管理最大的一块,对被线程共享,目的是存放对象的实例,几乎所欲的对象实例都会放在这里,当堆没有可用空间时,会抛出OOM异常.根据对象的存活周期不同,JVM把对象进行分代管理,由垃圾回收器进行垃圾的回收管理

    (6)方法区:
    又称非堆区,用于存储已被虚拟机加载的类信息,常量,静态变量,即时编译器优化后的代码等数据.1.7的永久代和1.8的元空间都是方法区的一种实现

    (7)JVM 内存可见性
    在这里插入图片描述
    MM是定义程序中变量的访问规则,线程对于变量的操作只能在自己的工作内存中进行,而不能直接对主

    内存操作.由于指令重排序,读写的顺序会被打乱,因此JMM需要提供原子性,可见性,有序性保证.
    MM是定义程序中变量的访问规则,线程对于变量的操作只能在自己的工作内存中进行,而不能直接对主内存操作.由于指令重排序,读写的顺序会被打乱,因此JMM需要提供原子性,可见性,有序性保证.

    3、类加载与卸载
    加载过程
    在这里插入图片描述
    其中验证,准备,解析合称链接
    加载通过类的完全限定名,查找此类字节码文件,利用字节码文件创建Class对象.

    验证确保Class文件符合当前虚拟机的要求,不会危害到虚拟机自身安全.

    准备进行内存分配,为static修饰的类变量分配内存,并设置初始值(0或null).不包含final修饰的静态变量,
    因为final变量在编译时分配.

    解析将常量池中的符号引用替换为直接引用的过程.直接引用为直接指向目标的指针或者相对偏移量等.
    初始化主要完成静态块执行以及静态变量的赋值.先初始化父类,再初始化当前类.只有对类主动使用时才会初始化.

    触发条件包括,创建类的实例时,访问类的静态方法或静态变量的时候,使用Class.forName反射类的时候,或者某个子类初始化的时候.

    Java自带的加载器加载的类,在虚拟机的生命周期中是不会被卸载的,只有用户自定义的加载器加载的类才可以被卸.

    (1)加载机制-双亲委派模式
    在这里插入图片描述
    双亲委派模式,即加载器加载类时先把请求委托给自己的父类加载器执行,直到顶层的启动类加载器.父类加载器能够完成加载则成功返回,不能则子类加载器才自己尝试加载.*
    优点:

    1. 避免类的重复加载
    2. 避免Java的核心API被篡改

    (2)分代回收
    分代回收基于两个事实:大部分对象很快就不使用了,还有一部分不会立即无用,但也不会持续很长时间.
    在这里插入图片描述
    年轻代->标记-复制
    老年代->标记-清除

    (3)回收算法
    a、G1算法
    1.9后默认的垃圾回收算法,特点保持高回收率的同时减少停顿.采用每次只清理一部分,而不是清理全部的增量式清理,以保证停顿时间不会过长

    其取消了年轻代与老年代的物理划分,但仍属于分代收集器,算法将堆分为若干个逻辑区域(region),一部分用作年轻代,一部分用作老年代,还有用来存储巨型对象的分区.

    同CMS相同,会遍历所有对象,标记引用情况,清除对象后会对区域进行复制移动,以整合碎片空间.

    年轻代回收:
    并行复制采用复制算法,并行收集,会StopTheWorld.

    老年代回收:
    会对年轻代一并回收

    初始标记完成堆root对象的标记,会StopTheWorld.
    并发标记 GC线程和应用线程并发执行.
    最终标记完成三色标记周期,会StopTheWorld.
    复制/清楚会优先对可回收空间加大的区域进行回收

    b、ZGC算法
    前面提供的高效垃圾回收算法,针对大堆内存设计,可以处理TB级别的堆,可以做到10ms以下的回收停顿时间.
    在这里插入图片描述
    1.着色指针
    2.读屏障
    3.并发处理
    4.基于region
    5.内存压缩(整理)

    roots标记:标记root对象,会StopTheWorld.
    并发标记:利用读屏障与应用线程一起运行标记,可能会发生StopTheWorld.
    清除会清理标记为不可用的对象.
    roots重定位:是对存活的对象进行移动,以腾出大块内存空间,减少碎片产生.重定位最开始会
    StopTheWorld,却决于重定位集与对象总活动集的比例.
    并发重定位与并发标记类似.

    4、堆和栈的区别

    栈是运行时单位,代表着逻辑,内含基本数据类型和堆中对象引用,所在区域连续,没有碎片;堆是存储单位,代表着数据,可被多个栈共享(包括成员中基本数据类型、引用和引用对象),所在区域不连续,会有碎片。

    (1)功能不同
    栈内存用来存储局部变量和方法调用,而堆内存用来存储Java中的对象。无论是成员变量,局部变量,还是类变量,它们指向的对象都存储在堆内存中。

    (2)共享性不同
    栈内存是线程私有的。
    堆内存是所有线程共有的。

    (3)异常错误不同
    如果栈内存或者堆内存不足都会抛出异常。
    栈空间不足:java.lang.StackOverFlowError。
    堆空间不足:java.lang.OutOfMemoryError。

    (4)空间大小
    栈的空间大小远远小于堆的。

    5、 什么时候会触发FullGC
    除直接调用System.gc外,触发Full GC执行的情况有如下四种。

    (1)旧生代空间不足
    旧生代空间只有在新生代对象转入及创建为大对象、大数组时才会出现不足的现象,当执行Full GC后空间仍然不足,则抛出如下错误:
    java.lang.OutOfMemoryError: Java heap space
    为避免以上两种状况引起的FullGC,调优时应尽量做到让对象在Minor GC阶段被回收、让对象在新生
    代多存活一段时间及不要创建过大的对象及数组。

    (2) Permanet Generation空间满
    PermanetGeneration中存放的为一些class的信息等,当系统中要加载的类、反射的类和调用的方法较多时,Permanet Generation可能会被占满,在未配置为采用CMS GC的情况下会执行Full GC。如果经过Full GC仍然回收不了,那么JVM会抛出如下错误信息:
    java.lang.OutOfMemoryError: PermGen space
    为避免Perm Gen占满造成Full GC现象,可采用的方法为增大Perm Gen空间或转为使用CMS GC。

    (3) CMS GC时出现promotion failed和concurrent mode failure
    对于采用CMS进行旧生代GC的程序而言,尤其要注意GC日志中是否有promotion failed和concurrent
    mode failure两种状况,当这两种状况出现时可能会触发Full GC。
    promotionfailed是在进行Minor GC时,survivor space放不下、对象只能放入旧生代,而此时旧生代
    也放不下造成的;concurrent mode failure是在执行CMS GC的过程中同时有对象要放入旧生代,而此时旧生代空间不足造成的。
    应对措施为:增大survivorspace、旧生代空间或调低触发并发GC的比率,但在JDK 5.0+、6.0+的版本中有可能会由于JDK的bug29导致CMS在remark完毕后很久才触发sweeping动作。对于这种状况,可通过设置-XX:CMSMaxAbortablePrecleanTime=5(单位为ms)来避免。

    (4)统计得到的Minor GC晋升到旧生代的平均大小大于旧生代的剩余空间
    这是一个较为复杂的触发情况,Hotspot为了避免由于新生代对象晋升到旧生代导致旧生代空间不足的
    现象,在进行Minor GC时,做了一个判断,如果之前统计所得到的Minor GC晋升到旧生代的平均大小大于旧生代的剩余空间,那么就直接触发Full GC。
    例如程序第一次触发MinorGC后,有6MB的对象晋升到旧生代,那么当下一次Minor GC发生时,首先
    检查旧生代的剩余空间是否大于6MB,如果小于6MB,则执行Full GC。
    当新生代采用PSGC时,方式稍有不同,PS GC是在Minor GC后也会检查,例如上面的例子中第一次
    Minor GC后,PS GC会检查此时旧生代的剩余空间是否大于6MB,如小于,则触发对旧生代的回收。
    除了以上4种状况外,对于使用RMI来进行RPC或管理的Sun JDK应用而言,默认情况下会一小时执行一次Full GC。可通过在启动时通过- java-Dsun.rmi.dgc.client.gcInterval=3600000来设置Full GC执行的间隔时间或通过-XX:+ DisableExplicitGC来禁止RMI调用System.gc。

    更多的面试题更新请关注下期!

    展开全文
  • 上文提到了阿里最常用的四种性能优化,本文带大家来了解下jvm性能优化JVM 是小白 Java 程序员成长路上的一道坎,学习JVM之前,只需要知道代码编译成 Class,虚拟机加载 Class 运行就可以了,学习 JVM 之后,可以...

    上文提到了阿里最常用的四种性能优化,本文带大家来了解下jvm性能优化。

    JVM 是小白 Java 程序员成长路上的一道坎,学习JVM之前,只需要知道代码编译成 Class,虚拟机加载 Class 运行就可以了,学习 JVM 之后,可以深入理解代码从编译到加载的过程、内存中对象的创建与垃圾回收、日常开发中快速定位性能问题等,当然也是面试不可缺少的加分项,面对阿里等一线大企业的面试中也是必问之一!面试题答案已经整理在这

    JVM内存区域常见问题

    Java 内存分配?

    Java 堆的结构是什么样子的?

    什么是堆中的永久代(Perm Gen space)?

    简述各个版本内存区域的变化?

    说说各个区域的作用?

    Java 中会存在内存泄漏吗,简述一下?

    JVM的执行子系统常见问题

    Java 类加载过程?

    描述一下 JVM 加载 Class 文件的原理机制?

    什么是类加载器?

    类加载器有哪些?

    什么是tomcat类加载机制?

    类加载器双亲委派模型机制?

    垃圾回收常见问题

    什么是GC? 为什么要有 GC?

    简述一下Java 垃圾回收机制?

    如何判断一个对象是否存活?

    垃圾回收的优点和原理,并考虑 2 种回收机制?

    垃圾回收器的基本原理是什么?

    垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?

    深拷贝和浅拷贝?

    System.gc() 和 Runtime.gc() 会做些什么?

    如果对象的引用被置为 null,垃圾收集器是否会立即释放对象占用的内存?

    什么是分布式垃圾回收(DGC)?它是如何工作的?

    串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?

    在 Java 中,对象什么时候可以被垃圾回收?

    简述Minor GC 和 Major GC?

    JVM 的永久代中会发生垃圾回收么?

    Java 中垃圾收集的方法有哪些?

    性能优化常见问题

    讲讲你理解的性能评价及测试指标?

    常用的性能优化方式有哪些?

    说说分布式缓存和一致性哈希?

    同步与异步?阻塞与非阻塞?

    什么是GC调优?

    常见异步的手段有哪些?

    如何正确系统的学习JVM和性能调优?

    所谓系统学习法,是指把所学内容当成是一个系统看待,力求从大方向出发指导学习,这样,在学习和复习的时候不是按部就班按章节行进,而是先模糊概括,再逐渐在大框架下逐步明晰细节、完善结构、针对缺陷和不足专攻的学习方法。区分一个程序猿技术水平和视野的一个重要指标是性能优化,所以面试时,面试官总会问你一个问题,如何进行性能优化呢?

    Java内存区域

    运行时数据区域(程序计数器、堆、栈等)

    站在线程角度来看堆和栈

    深入辨析堆和栈

    方法的出入栈

    虚拟机中的对象

    堆参数设置和内存溢出实战

    垃圾回收器和内存分配策略

    判断对象的存活

    辨析强、弱等各种引用

    GC算法

    分代收集

    Stop The World现象

    GC日志解读

    内存分配与回收策略,内存泄漏和内存溢出辨析

    JDK为我们提供的工具

    了解MAT

    垃圾回收器

    深入了解性能优化

    常用的性能评价/测试指标

    常用的性能优化手段

    详细了解应用服务性能优化

    编写高效优雅Java程序

    JVM的执行子系统

    Class类文件本质,Class文件格式

    字节码指令

    类加载机制

    栈桢详解

    方法调用详解

    基于栈的字节码解释执行引擎

    如果看到这时你的头脑还是一片空白,或是靠死记硬背还是靠着之前的经历,答一下压缩代码,打包代码,事件代理,这说明你对性能优化还是缺乏一个整体,系统的掌握,对性能优化还只是处于听说过一个方法就加上去的阶段。这样也就无从去更好的优化性能。思维导图详情见上文。

    最后

    针对于上面的JVM面试题我总结出了答案及一些JVM性能调优的架构视频资料和互联网公司java程序员面试涉及到的绝大部分面试题及答案做成了文档和架构视频资料免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。


     

    展开全文
  • 1. 调优时机:a. heap 内存(老年代)持续上涨达到设置的最大内存值;b. Full GC 次数频繁;c....d....e....f....2. 调优原则:a. 多数的Java应用不需要在服务器上进行JVM优化;b. 多数导致GC问题的Java应用,都不是因为...
  • JVM面试真题集

    2020-12-04 18:03:55
    编译器优化 问题排查经验与思路 JVM调优经验和调优思路 了解最新的技术趋势(ZGC和Graalvm) 真题汇总 简单描述一下JVM的内存模型。和JMM有什么区别? 什么时候会触发FullGC? Java类加载器有几种,关系怎样的? ...
  • 1 jvm优化静态变量的常量池 题目: 写出下面程序的执行结果 public class Demo { final static int num=10; final int ns = 11; static { System.out.println("Demo静态块"); } public Demo() { System.out...
  • @[TOC](Java虚拟机(JVM) 学习笔记) java内存模型 JMM JMM决定一个线程对共享变量的写入何时对另一个线程可见。从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(main ...
  • jvm面试题

    2017-02-22 17:56:15
    1. 内存模型以及分区,需要详细到每个区放什么。 2. 堆里面的分区:Eden...5. GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路? 6. GC收
  • 前言 Java虚拟机有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统。 Java虚拟机本质上就是一个程序,当它在命令行上启动...该平台包括许多相关的技术,如符合开放接口标准的各种API、优化技术等。Java技.
  • 你可能花过很多精力学习 JVM 的知识,但在面对真实生产...不知如何了解线上应用的垃圾回收状况不论是在问题现场还是跳槽面试,面对这些问题,如何快速定位和解决问题,需要你对 Java虚拟机的实现和优化,有极为深刻...
  • 40 道JVM面试题解答

    2021-01-19 00:32:56
    某些对象没有逃逸出方法,可能被优化为在栈上分配 2、谈谈 JVM 中的常量池 JDK 1.8 开始 字符串常量池:存放在堆中,包括 String 对象执行intern() 方法后存的地方、双引号直接引用的字符串 运行时常量池:...
  • 前言 Java虚拟机有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统。 Java虚拟机本质上就是一个程序,当它在命令行上启动...该平台包括许多相关的技术,如符合开放接口标准的各种API、优化技术等。Java技.
  • 你可能花过很多精力学习 JVM 的知识,但在面对真实生产...不知如何了解线上应用的垃圾回收状况不论是在问题现场还是跳槽面试,面对这些问题,如何快速定位和解决问题,需要你对 Java虚拟机的实现和优化,有极为深刻...
  • 【Java面试系列】JVM与调优面试题

    万次阅读 2020-04-30 15:59:21
    目录 一、JVM 内存区域划分 1.程序计数器(线程私有) 二、JVM 执行子系统 1.Class 类文件结构 三....五、性能优化 1.常用的性能评价/测试指标 六.JVM详解篇 Java虚拟机(JVM)原理篇 ...
  • JVM常考面试题

    2020-06-27 16:17:08
    1.JVM调优的6大步骤 监控GC的状态 生成堆的dump文件 分析dump文件 分析结果,判断是否需要优化 调整GC类型和内存分配 不断地分析和调整
  • JVM面试习题(1)

    2020-12-16 21:25:59
    某些对象没有逃逸出方法,可能被优化为在栈上分配 2、谈谈 JVM 中的常量池 JDK 1.8 开始 字符串常量池:存放在堆中,包括 String 对象执行 intern() 方法后存的地方、双引号直接引用的字符串 运行时常量池:存放在...
  • Java面试题汇总与解答(JVM与性能优化篇) 文章目录Java面试题汇总与解答(JVM与性能优化篇)1. 描述一下 JVM 加载 Class 文件的原理机制?2. 什么是类加载器?3. 类加载器有哪些?4. 什么是tomcat类加载机制?5. 类...
  • 你可能花过很多精力学习 JVM 的知识,但在面对真实生产...不知如何了解线上应用的垃圾回收状况不论是在问题现场还是跳槽面试,面对这些问题,如何快速定位和解决问题,需要你对 Java虚拟机的实现和优化,有极为深刻...
  • 本文转载自:Java性能优化JVM、Tomcat、MySQL面试题一次彻底扫盲 性能优化是什么?性能优化,简而言之,就是在不影响系统运行正确性的前提下,使之运行地更快,完成特定功能所需的时间更短。 在JAVA程序中,性能...
  • 遇到了这样一个面试题 String str = "hi," + "lao" + "wang"; String str2 = "hi,laowang"; System.out.println(str == str2); 输出结果如你所料,正是true 但是为什么会是ture呢 首先我们了解一下字符串, ...
  • 某些对象没有逃逸出方法,可能被优化为在栈上分配2、谈谈 JVM 中的常量池JDK 1.8 开始字符串常量池:存放在堆中,包括 String 对象执行 intern() 方法后存的地方、双引号直接引用的字符串运行时常量池:存放在方法区...
  • jvm常见的面试题

    千次阅读 2016-09-04 21:45:52
    1. 内存模型以及分区,需要详细到每个区放什么。 2. 堆里面的分区:Eden...5. GC的三种收集方法:标记清除、标记整理、复制算法的原理与特点,分别用在什么地方,如果让你优化收集方法,有什么思路? 6. GC收

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 660
精华内容 264
关键字:

jvm优化面试题