jvm 订阅
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。 展开全文
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。引入Java语言虚拟机后,Java语言在不同平台上运行时不需要重新编译。Java语言使用Java虚拟机屏蔽了与具体平台相关的信息,使得Java语言编译程序只需生成在Java虚拟机上运行的目标代码(字节码),就可以在多种平台上不加修改地运行。
信息
软件语言
Java
简    称
JVM
应用学科
计算机软件
中文名
Java虚拟机
外文名
Java Virtual Machine
JVM概述
Java虚拟机有自己完善的硬件架构,如处理器、堆栈等,还具有相应的指令系统。Java虚拟机本质上就是一个程序,当它在命令行上启动的时候,就开始执行保存在某字节码文件中的指令。Java语言的可移植性正是建立在Java虚拟机的基础上。任何平台只要装有针对于该平台的Java虚拟机,字节码文件(.class)就可以在该平台上运行。这就是“一次编译,多次运行”。Java虚拟机不仅是一种跨平台的软件,而且是一种新的网络计算平台。该平台包括许多相关的技术,如符合开放接口标准的各种API、优化技术等。Java技术使同一种应用可以运行在不同的平台上。Java平台可分为两部分,即Java虚拟机(Java virtual machine,JVM)和Java API类库。 [1] 
收起全文
精华内容
参与话题
问答
  • JVM

    千次阅读 2018-08-06 19:47:22
    JVM JDK1.8 JVM内存模型 JVM(1):Java 类的加载机制 JVM(2):JVM内存结构 JVM(3):Java GC算法 垃圾收集器 JVM(4):Jvm调优-命令篇 JVM(5):tomcat性能调优和性能监控(visualvm) JVM(6):JVM调优-...
    展开全文
  • 常见JVM面试题及答案整理

    万次阅读 多人点赞 2019-08-26 11:35:04
    总结了JVM一些经典面试题,分享出我自己的解题思路,希望对大家有帮助,有哪里你觉得不正确的话,欢迎指出,后续有空会更新。 1.什么情况下会发生栈内存溢出。 思路: 描述栈定义,再描述为什么会溢出,再说明一下...

    前言

    总结了JVM一些经典面试题,分享出我自己的解题思路,希望对大家有帮助,有哪里你觉得不正确的话,欢迎指出,后续有空会更新。

    1.什么情况下会发生栈内存溢出。

    思路: 描述栈定义,再描述为什么会溢出,再说明一下相关配置参数,OK的话可以给面试官手写是一个栈溢出的demo。

    我的答案:

    • 栈是线程私有的,他的生命周期与线程相同,每个方法在执行的时候都会创建一个栈帧,用来存储局部变量表,操作数栈,动态链接,方法出口等信息。局部变量表又包含基本数据类型,对象引用类型
    • 如果线程请求的栈深度大于虚拟机所允许的最大深度,将抛出StackOverflowError异常,方法递归调用产生这种结果。
    • 如果Java虚拟机栈可以动态扩展,并且扩展的动作已经尝试过,但是无法申请到足够的内存去完成扩展,或者在新建立线程的时候没有足够的内存去创建对应的虚拟机栈,那么Java虚拟机将抛出一个OutOfMemory 异常。(线程启动过多)
    • 参数 -Xss 去调整JVM栈的大小

    2.详解JVM内存模型

    思路: 给面试官画一下JVM内存模型图,并描述每个模块的定义,作用,以及可能会存在的问题,如栈溢出等。

    我的答案:

    • JVM内存结构

     

    程序计数器:当前线程所执行的字节码的行号指示器,用于记录正在执行的虚拟机字节指令地址,线程私有。

    Java虚拟栈:存放基本数据类型、对象的引用、方法出口等,线程私有。

    Native方法栈:和虚拟栈相似,只不过它服务于Native方法,线程私有。

    Java堆:java内存最大的一块,所有对象实例、数组都存放在java堆,GC回收的地方,线程共享。

    方法区:存放已被加载的类信息、常量、静态变量、即时编译器编译后的代码数据等。(即永久带),回收目标主要是常量池的回收和类型的卸载,各线程共享

    3.JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor。

    思路: 先讲一下JAVA堆,新生代的划分,再谈谈它们之间的转化,相互之间一些参数的配置(如: –XX:NewRatio,–XX:SurvivorRatio等),再解释为什么要这样划分,最好加一点自己的理解。

    我的答案:

    1)共享内存区划分

    • 共享内存区 = 持久带 + 堆
    • 持久带 = 方法区 + 其他
    • Java堆 = 老年代 + 新生代
    • 新生代 = Eden + S0 + S1

    2)一些参数的配置

    • 默认的,新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ,可以通过参数 –XX:NewRatio 配置。
    • 默认的,Edem : from : to = 8 : 1 : 1 ( 可以通过参数 –XX:SurvivorRatio 来设定)
    • Survivor区中的对象被复制次数为15(对应虚拟机参数 -XX:+MaxTenuringThreshold)

    3)为什么要分为Eden和Survivor?为什么要设置两个Survivor区?

    • 如果没有Survivor,Eden区每进行一次Minor GC,存活的对象就会被送到老年代。老年代很快被填满,触发Major GC.老年代的内存空间远大于新生代,进行一次Full GC消耗的时间比Minor GC长得多,所以需要分为Eden和Survivor。
    • Survivor的存在意义,就是减少被送到老年代的对象,进而减少Full GC的发生,Survivor的预筛选保证,只有经历16次Minor GC还能在新生代中存活的对象,才会被送到老年代。
    • 设置两个Survivor区最大的好处就是解决了碎片化,刚刚新建的对象在Eden中,经历一次Minor GC,Eden中的存活对象就会被移动到第一块survivor space S0,Eden被清空;等Eden区再满了,就再触发一次Minor GC,Eden和S0中的存活对象又会被复制送入第二块survivor space S1(这个过程非常重要,因为这种复制算法保证了S1中来自S0和Eden两部分的存活对象占用连续的内存空间,避免了碎片化的发生)

    4.JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代

    思路: 先描述一下Java堆内存划分,再解释Minor GC,Major GC,full GC,描述它们之间转化流程。

    我的答案:

    • Java堆 = 老年代 + 新生代
    • 新生代 = Eden + S0 + S1
    • 当 Eden 区的空间满了, Java虚拟机会触发一次 Minor GC,以收集新生代的垃圾,存活下来的对象,则会转移到 Survivor区。
    • 大对象(需要大量连续内存空间的Java对象,如那种很长的字符串)直接进入老年态
    • 如果对象在Eden出生,并经过第一次Minor GC后仍然存活,并且被Survivor容纳的话,年龄设为1,每熬过一次Minor GC,年龄+1,若年龄超过一定限制(15),则被晋升到老年态。即长期存活的对象进入老年态
    • 老年代满了而无法容纳更多的对象,Minor GC 之后通常就会进行Full GC,Full GC 清理整个内存堆 – 包括年轻代和年老代
    • Major GC 发生在老年代的GC清理老年区,经常会伴随至少一次Minor GC,比Minor GC慢10倍以上

    5.你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms和G1,包括原理,流程,优缺点。

    思路: 一定要记住典型的垃圾收集器,尤其cms和G1,它们的原理与区别,涉及的垃圾回收算法。

    我的答案:

    1)几种垃圾收集器:

    • Serial收集器: 单线程的收集器,收集垃圾时,必须stop the world,使用复制算法。
    • ParNew收集器: Serial收集器的多线程版本,也需要stop the world,复制算法。
    • Parallel Scavenge收集器: 新生代收集器,复制算法的收集器,并发的多线程收集器,目标是达到一个可控的吞吐量。如果虚拟机总共运行100分钟,其中垃圾花掉1分钟,吞吐量就是99%。
    • Serial Old收集器: 是Serial收集器的老年代版本,单线程收集器,使用标记整理算法。
    • Parallel Old收集器: 是Parallel Scavenge收集器的老年代版本,使用多线程,标记-整理算法。
    • CMS(Concurrent Mark Sweep) 收集器: 是一种以获得最短回收停顿时间为目标的收集器,标记清除算法,运作过程:初始标记,并发标记,重新标记,并发清除,收集结束会产生大量空间碎片。
    • G1收集器: 标记整理算法实现,运作流程主要包括以下:初始标记,并发标记,最终标记,筛选标记。不会产生空间碎片,可以精确地控制停顿。

    2)CMS收集器和G1收集器的区别:

    • CMS收集器是老年代的收集器,可以配合新生代的Serial和ParNew收集器一起使用;
    • G1收集器收集范围是老年代和新生代,不需要结合其他收集器使用;
    • CMS收集器以最小的停顿时间为目标的收集器;
    • G1收集器可预测垃圾回收的停顿时间
    • CMS收集器是使用“标记-清除”算法进行的垃圾回收,容易产生内存碎片
    • G1收集器使用的是“标记-整理”算法,进行了空间整合,降低了内存空间碎片。

    6.JVM内存模型的相关知识了解多少,比如重排序,内存屏障,happen-before,主内存,工作内存。

    思路: 先画出Java内存模型图,结合例子volatile ,说明什么是重排序,内存屏障,最好能给面试官写以下demo说明。

    我的答案:

    1)Java内存模型图:

     

    Java内存模型规定了所有的变量都存储在主内存中,每条线程还有自己的工作内存,线程的工作内存中保存了该线程中是用到的变量的主内存副本拷贝,线程对变量的所有操作都必须在工作内存中进行,而不能直接读写主内存。不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量的传递均需要自己的工作内存和主存之间进行数据同步进行。

    2)指令重排序。

    在这里,先看一段代码

    public class PossibleReordering {
    static int x = 0, y = 0;
    static int a = 0, b = 0;
    
    public static void main(String[] args) throws InterruptedException {
        Thread one = new Thread(new Runnable() {
            public void run() {
                a = 1;
                x = b;
            }
        });
    
        Thread other = new Thread(new Runnable() {
            public void run() {
                b = 1;
                y = a;
            }
        });
        one.start();other.start();
        one.join();other.join();
        System.out.println(“(” + x + “,” + y + “)”);
    }

    运行结果可能为(1,0)、(0,1)或(1,1),也可能是(0,0)。因为,在实际运行时,代码指令可能并不是严格按照代码语句顺序执行的。大多数现代微处理器都会采用将指令乱序执行(out-of-order execution,简称OoOE或OOE)的方法,在条件允许的情况下,直接运行当前有能力立即执行的后续指令,避开获取下一条指令所需数据时造成的等待3。通过乱序执行的技术,处理器可以大大提高执行效率。而这就是指令重排

    3)内存屏障

    内存屏障,也叫内存栅栏,是一种CPU指令,用于控制特定条件下的重排序和内存可见性问题。

    • LoadLoad屏障:对于这样的语句Load1; LoadLoad; Load2,在Load2及后续读取操作要读取的数据被访问前,保证Load1要读取的数据被读取完毕。
    • StoreStore屏障:对于这样的语句Store1; StoreStore; Store2,在Store2及后续写入操作执行前,保证Store1的写入操作对其它处理器可见。
    • LoadStore屏障:对于这样的语句Load1; LoadStore; Store2,在Store2及后续写入操作被刷出前,保证Load1要读取的数据被读取完毕。
    • StoreLoad屏障:对于这样的语句Store1; StoreLoad; Load2,在Load2及后续所有读取操作执行前,保证Store1的写入对所有处理器可见。它的开销是四种屏障中最大的。 在大多数处理器的实现中,这个屏障是个万能屏障,兼具其它三种内存屏障的功能。

    4)happen-before原则

    • 单线程happen-before原则:在同一个线程中,书写在前面的操作happen-before后面的操作。 锁的happen-before原则:同一个锁的unlock操作happen-before此锁的lock操作。
    • volatile的happen-before原则:对一个volatile变量的写操作happen-before对此变量的任意操作(当然也包括写操作了)。
    • happen-before的传递性原则:如果A操作 happen-before B操作,B操作happen-before C操作,那么A操作happen-before C操作。
    • 线程启动的happen-before原则:同一个线程的start方法happen-before此线程的其它方法。
    • 线程中断的happen-before原则 :对线程interrupt方法的调用happen-before被中断线程的检测到中断发送的代码。
    • 线程终结的happen-before原则: 线程中的所有操作都happen-before线程的终止检测。
    • 对象创建的happen-before原则: 一个对象的初始化完成先于他的finalize方法调用。

    7.简单说说你了解的类加载器,可以打破双亲委派么,怎么打破。

    思路: 先说明一下什么是类加载器,可以给面试官画个图,再说一下类加载器存在的意义,说一下双亲委派模型,最后阐述怎么打破双亲委派模型。

    我的答案:

    1) 什么是类加载器?

    类加载器 就是根据指定全限定名称将class文件加载到JVM内存,转为Class对象。

    • 启动类加载器(Bootstrap ClassLoader):由C++语言实现(针对HotSpot),负责将存放在<JAVA_HOME>\lib目录或-Xbootclasspath参数指定的路径中的类库加载到内存中。
    • 其他类加载器:由Java语言实现,继承自抽象类ClassLoader。如:
    • 扩展类加载器(Extension ClassLoader):负责加载<JAVA_HOME>\lib\ext目录或java.ext.dirs系统变量指定的路径中的所有类库。
    • 应用程序类加载器(Application ClassLoader)。负责加载用户类路径(classpath)上的指定类库,我们可以直接使用这个类加载器。一般情况,如果我们没有自定义类加载器默认就是用这个加载器。

    2)双亲委派模型

    双亲委派模型工作过程是:

    如果一个类加载器收到类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委派给父类加载器完成。每个类加载器都是如此,只有当父加载器在自己的搜索范围内找不到指定的类时(即ClassNotFoundException),子加载器才会尝试自己去加载。

    双亲委派模型图:

     

    3)为什么需要双亲委派模型?

    在这里,先想一下,如果没有双亲委派,那么用户是不是可以自己定义一个java.lang.Object的同名类java.lang.String的同名类,并把它放到ClassPath中,那么类之间的比较结果及类的唯一性将无法保证,因此,为什么需要双亲委派模型?防止内存中出现多份同样的字节码

    4)怎么打破双亲委派模型?

    打破双亲委派机制则不仅要继承ClassLoader类,还要重写loadClass和findClass方法。

    8.说说你知道的几种主要的JVM参数

    思路: 可以说一下堆栈配置相关的,垃圾收集器相关的,还有一下辅助信息相关的。

    我的答案:

    1)堆栈配置相关

    java -Xmx3550m -Xms3550m -Xmn2g -Xss128k 
    -XX:MaxPermSize=16m -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxTenuringThreshold=0

    -Xmx3550m: 最大堆大小为3550m。

    -Xms3550m: 设置初始堆大小为3550m。

    -Xmn2g: 设置年轻代大小为2g。

    -Xss128k: 每个线程的堆栈大小为128k。

    -XX:MaxPermSize: 设置持久代大小为16m

    -XX:NewRatio=4: 设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。

    -XX:SurvivorRatio=4: 设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6

    -XX:MaxTenuringThreshold=0: 设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。

    2)垃圾收集器相关

    -XX:+UseParallelGC
    -XX:ParallelGCThreads=20
    -XX:+UseConcMarkSweepGC 
    -XX:CMSFullGCsBeforeCompaction=5
    -XX:+UseCMSCompactAtFullCollection:

    -XX:+UseParallelGC: 选择垃圾收集器为并行收集器。

    -XX:ParallelGCThreads=20: 配置并行收集器的线程数

    -XX:+UseConcMarkSweepGC: 设置年老代为并发收集。

    -XX:CMSFullGCsBeforeCompaction:由于并发收集器不对内存空间进行压缩、整理,所以运行一段时间以后会产生“碎片”,使得运行效率降低。此值设置运行多少次GC以后对内存空间进行压缩、整理。

    -XX:+UseCMSCompactAtFullCollection: 打开对年老代的压缩。可能会影响性能,但是可以消除碎片

    3)辅助信息相关

    -XX:+PrintGC
    -XX:+PrintGCDetails

    -XX:+PrintGC 输出形式:

    [GC 118250K->113543K(130112K), 0.0094143 secs] [Full GC 121376K->10414K(130112K), 0.0650971 secs]

    -XX:+PrintGCDetails 输出形式:

    [GC [DefNew: 8614K->781K(9088K), 0.0123035 secs] 118250K->113543K(130112K), 0.0124633 secs] [GC [DefNew: 8614K->8614K(9088K), 0.0000665 secs][Tenured: 112761K->10414K(121024K), 0.0433488 secs] 121376K->10414K(130112K), 0.0436268 secs

    9.怎么打出线程栈信息。

    思路: 可以说一下jps,top ,jstack这几个命令,再配合一次排查线上问题进行解答。

    我的答案:

    • 输入jps,获得进程号。
    • top -Hp pid 获取本进程中所有线程的CPU耗时性能
    • jstack pid命令查看当前java进程的堆栈状态
    • 或者 jstack -l > /tmp/output.txt 把堆栈信息打到一个txt文件。
    • 可以使用fastthread 堆栈定位,fastthread.io/

    10.强引用、软引用、弱引用、虚引用的区别?

    思路: 先说一下四种引用的定义,可以结合代码讲一下,也可以扩展谈到ThreadLocalMap里弱引用用处。

    我的答案:

    1)强引用

    我们平时new了一个对象就是强引用,例如 Object obj = new Object();即使在内存不足的情况下,JVM宁愿抛出OutOfMemory错误也不会回收这种对象。

    2)软引用

    如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。

    SoftReference<String> softRef=new SoftReference<String>(str);     // 软引用

    用处: 软引用在实际中有重要的应用,例如浏览器的后退按钮。按后退时,这个后退时显示的网页内容是重新进行请求还是从缓存中取出呢?这就要看具体的实现策略了。

    (1)如果一个网页在浏览结束时就进行内容的回收,则按后退查看前面浏览过的页面时,需要重新构建

    (2)如果将浏览过的网页存储到内存中会造成内存的大量浪费,甚至会造成内存溢出

    如下代码:

    Browser prev = new Browser();               // 获取页面进行浏览
    SoftReference sr = new SoftReference(prev); // 浏览完毕后置为软引用        
    if(sr.get()!=null){ 
        rev = (Browser) sr.get();           // 还没有被回收器回收,直接获取
    }else{
        prev = new Browser();               // 由于内存吃紧,所以对软引用的对象回收了
        sr = new SoftReference(prev);       // 重新构建
    }

    3)弱引用

    具有弱引用的对象拥有更短暂的生命周期。在垃圾回收器线程扫描它所管辖的内存区域的过程中,一旦发现了只具有弱引用的对象,不管当前内存空间足够与否,都会回收它的内存。

    String str=new String("abc");    
    WeakReference<String> abcWeakRef = new WeakReference<String>(str);
    str=null;
    等价于
    str = null;
    System.gc();

    4)虚引用

    如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收。虚引用主要用来跟踪对象被垃圾回收器回收的活动。

    11.JVM知识点精华汇总

    用XMind画了一张思维导图(源文件对部分节点有详细备注和参考资料,需要的朋友可以关注我的微信公众号:Java团长,然后回复“JVM”获取):

    參考与感谢


    作者:Jay_huaxiao
    链接:https://juejin.im/post/5d35ca5b518825449c64bc31
    来源:掘金
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    展开全文
  • JVM原理详解

    千人学习 2018-12-20 18:34:03
    1,通俗讲解JVM运行原理,各组成部分的作用,包括栈、堆等 2,使用visio视图,直观介绍JVM组成 3,介绍线程安全产生的原因 4,面试题中存在的些许JVM题目讲解
  • JVM_虚拟机目录

    千次阅读 多人点赞 2019-06-28 11:44:22
  • JVM调优

    千次阅读 多人点赞 2019-04-08 10:47:28
    因为我们的项目,web服务器中间件都用的是Tomcat,所以jvm的调优一般都是针对Tomcat的调优。调优工具可以可以借用jdk自带的VisualVM工具,到JDK安装目录/bin目录下,双击jvisualvm.exe文件,直接启动,就可以查看到...

    因为我们的项目,web服务器中间件都用的是Tomcat,所以jvm的调优一般都是针对Tomcat的调优。调优工具可以可以借用jdk自带的VisualVM工具,到JDK安装目录/bin目录下,双击jvisualvm.exe文件,直接启动,就可以查看到当前的堆空间大小分配情况、线程监控情况和垃圾回收监控等。根据这些信息,再进行相应的调整。

    我觉的Jvm调优的重点就是垃圾回收(gc,garbage collection)和内存管理。垃圾回收的时候会导致,整个虚拟机暂停服务。因此,应该尽可能地缩短垃圾回收的处理时间。

    Java中垃圾回收机制是jvm自动完成的,我们不用操作,但可以通过修改一些配置对他进行影响;

    首先可以开启server模式,这样虽
    然启动慢点,但是长期运行效率高;(修改%JAVA_HOME%/jre/lib/i386/jvm.cfg文件开启)
    2、针对JVM堆的设置,JVM初始堆内存分配有-Xms指定,默认是物理内存的1/64;

    最大分配堆内存有-Xmx指定,默认是物理内存的1/4;当堆内存小于40%时,JVM就会自动增加,直到最大值。当空余堆内存大于70%时,JVM就会自动减少,直到最小值。因此,为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,我们通常把最大、最小设置为相同的值;

    3、配置年轻代(Xmn)的值,持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

    4、设置个线程的堆栈大小Xss,每个线程默认堆栈大小为1M,可根据应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数也是有限制的,不能无限生成,经验值在3000~5000左右。

    5、回收器的选择,JVM给了三种选择:串行收集器、并行收集器、并发收集器,JVM会根据当前系统配置进行判断,自动选择。但我们可以对一些参数进行设置。串行收集器只适用于小数据量的情况,一般不用处理;可以配置年轻代使用并发收集器,老年代使用并行收集器;如果响应时间有限,就选择并发收集器,尽可能设大年轻代;

    如果吞吐量优先就选择并行收集器,也尽可能设大年轻代;

    6、禁用Tomcat的DNS查询。(当 Web 应用程序记录客户端的信息时,它也会记录客户端的 IP 地址或者通过域名服务器查找机器名转换为 IP 地址。 DNS 查询需要占用网络,并且可能从很多很远的服务器或者不起作用的服务器上去获取对应的 IP, 这样会消耗一定的时间。为了消除 DNS 查询对性能的影响,可以关闭 DNS 查询。方法是修改 server.xml 文件中的 enableLookups 参数值。)

    7、线程数配置:Tomcat连接数过大可能引起的死机。所以,可以根据并发量在Tomcat的server.xml中修改他的最大线程数、初始化线程数等参数。(一般也就估计这配置,小了就配大点。也没有具体评估过)

    我们在项目中,一般也就是项目出现问题以后,再去优化。Tomcat在年老代溢出(java.lang.OutOfMemoryError: Java heap space)、持久代溢出(java.lang.OutOfMemoryError: PermGen space)、堆栈溢出(java.lang.StackOverflowError)、线程溢出(Fatal: Stack size too smal)、内存溢出(java.lang.OutOfMemoryError: unable to create new native thread)是会抛出不同溢出。根据溢出去进行修改。

    展开全文
  • jvm基础--JVM内存模型

    千次阅读 2019-04-27 01:49:47
    jvm基础–JVM内存模型 文章目录jvm基础--JVM内存模型1.JVM内存模型 1.JVM内存模型 参考: 深入理解JVM-JVM内存模型 面试必问之JVM原理 深入理解JVM-内存模型(jmm)和GC ...
  • 聊一聊JVM的类加载器机制

    万次阅读 2019-07-17 11:20:24
    聊一聊JVM的类加载器机制 目录 聊一聊JVM的类加载器机制 01 怎么获取类加载器?哪几种类加载器 02 各个加载器加载的路径? 01 怎么获取类加载器?哪几种类加载器 BootStrapClassLoader 引导类加载器 ...
  • JVM内存模型

    千次阅读 2011-11-27 12:25:21
    JVM内存模型(详见附件)
  • Java虚拟机(JVM)面试题(2020最新版)

    万次阅读 多人点赞 2020-02-19 12:26:32
    文章目录Java内存区域说一下 JVM 的主要组成部分及其作用?说一下 JVM 运行时数据区深拷贝和浅拷贝说一下堆栈的区别?队列和栈是什么?有什么区别?HotSpot虚拟机对象探秘对象的创建为对象分配内存处理并发安全问题...
  • JVM运行原理详解

    万次阅读 多人点赞 2017-05-31 15:01:45
    1.JVM简析: 作为一名Java使用者,掌握JVM的体系结构也是很有必要的。 说起Java,我们首先想到的是Java编程语言,然而事实上,Java是一种技术,它由四方面组成:Java编程语言、Java类文件格式、Java虚拟机和Java...
  • JVM调优总结

    千次阅读 2019-08-13 18:42:08
    JVM调优
  • Microsoft JVM 以及 Taobao JVM 的介绍

    万次阅读 2020-09-14 02:16:36
    Microsoft JVM 微软为了在IE3浏览器中支持Java Applets,开发了Microsoft JVM。 Microsoft JVM只能在windows平台下运行,但确实是当时windows平台上性能最好的java虚拟机。 1997年,Sun指控微软侵犯商标成功,微软赔...
  • JVM的参数类型

    万次阅读 2018-10-19 16:28:36
    标准参数 -help -server, -client -version, -showversion -cp, -classpath ... 非标准化参数(在各个JDK版本中可能会变,但是变动比较小) ... -Xmixed :混合模式,JVM自己来决定是否编译成本地代码 XX...
  • jvm之java类加载机制和类加载器(ClassLoader)的详解

    万次阅读 多人点赞 2018-08-13 15:05:46
    当程序主动使用某个类时,如果该类还未被加载到内存中,则JVM会通过加载、连接、初始化3个步骤来对该类进行初始化。如果没有意外,JVM将会连续完成3个步骤,所以有时也把这个3个步骤统称为类加载或类初始化。 一...
  • JVM:图文详解Java虚拟机的内存结构

    万次阅读 多人点赞 2019-09-29 07:33:11
    本文将全面讲解Java虚拟机中的内存模型 & 分区,希望你们会喜欢
  • 小仙女讲JVM(1)—综述

    万次阅读 多人点赞 2019-06-18 16:04:03
    本仙女怀着用毕生所学回报社会的热忱,打算花大手笔进行JVM的讲解。 1、首先,对以上的四部分进行解释。 (1)自动内存管理讲的是java运行时数据区里的部分,分为内存划分和垃圾收集器。 (2)执行子系统讲的是画...
  • JVM之内存结构详解

    万次阅读 多人点赞 2019-10-18 12:49:05
    对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bug。同时,JVM也是面试环节的中重灾区。今天开始,《JVM详解》系列开启,带大家深入了解JVM相关知识。 我们不能为了面试而面试...
  • JVM核心知识体系

    万次阅读 2019-04-15 13:26:06
    1.问题 1、如何理解类文件结构布局? 2、如何应用类加载器的工作原理进行将应用辗转腾挪? ... 3、热部署与热替换有何区别,如何隔离类冲突?... 4、JVM如何管理内存,有何内存淘汰机制?... 8、JVM...
  • 一次性精通JVM JAVA虚拟机

    千人学习 2019-12-13 20:27:37
    为什么要学JVM JVM是JAVA的老祖宗,一切JAVA代码都运行在JVM之上,只有深入理解和掌握虚拟机才能写出更强大的代码。 JVM是高级程序员的必备技能,是程序员进阶,拿高薪的必备技能。 ...
  • IDEA设置JVM运行参数

    万次阅读 多人点赞 2018-07-15 13:49:23
    前言 有时候我们需要在程序运行的时候对程序设置环境变量,恰巧我也遇到了这个问题,所以在此记录一下IDEA是如何设置环境变量的。作用 -Dproperty=Value 该参数通常用于设置系统级全局变量值,如配置文件路径,保证...
  • jvm 内存模型

    万次阅读 多人点赞 2019-08-15 14:28:51
    2. jvm 内存模型划分 根据JVM规范,JVM 内存共分为虚拟机栈,堆,方法区,程序计数器,本地方法栈五个部分。 程序计数器(线程私有): 是当前线程锁执行字节码的行号治时期,每条线程都有一个独立的程序计数器...
  • JVM性能调优

    万次阅读 2014-07-20 15:25:25
    最近因项目存在内存泄漏,故进行大规模的JVM性能调优,现把经验做一记录。 一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) 永久代(Perm) 其中New...
  • 查看JVM运行时参数

    万次阅读 2018-10-19 16:44:11
    常用的一些如下: -XX:+PrintFlagslnitial(可设置参数的初始值) 显示的参数如果是:=则表示是修改过的,=则表示是默认值 -XX:PrintFlagsFinal -XX:UnlockExperimentalVMOptions解锁实验参数(先决条件) ...
  • 您的浏览器没有获得Java Virtual Machine(JVM)支持。可能由于没有安装JVM或者已安装但是没有启用。请安装JVM1.5或者以上版本,如果已经安装则启用它。 二、尝试失败的方法 1.更换错误的浏览器登陆:一...
  • JVM架构内存结构图

    万次阅读 2020-09-14 03:40:54
    在线分享地址:JVM内存结构图
  • JVM初探 -JVM内存模型

    万次阅读 多人点赞 2016-12-02 18:47:48
    JVM是每个Java开发每天都会接触到的东西, 其相关知识也应该是每个人都要深入了解的. 但接触了很多人发现: 或了解片面或知识体系陈旧. 因此最近抽时间研读了几本评价较高的JVM入门书籍, 算是总结于此. 本系列博客的...
  • JVM架构和GC垃圾回收机制(JVM面试不用愁)

    万次阅读 多人点赞 2017-06-10 16:49:15
    JVM架构和GC垃圾回收机制详解 JVM架构图分析 下图:参考网络+书籍,如有侵权请见谅 (想了解Hadoop内存溢出请看: Hadoop内存溢出(OOM)分类、参数调优化) JVM被分为三个主要的子系统 (1)类加载器子系统(2...

空空如也

1 2 3 4 5 ... 20
收藏数 213,766
精华内容 85,506
关键字:

jvm