jvm
fengzhuzhigu
这个作者很懒,什么都没留下…
展开
-
什么时候会发生FullGC
从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为Major GC,而Full GC是对整个堆来说的,在最近几个版本的JDK里默认包括了对永生代即方法区的回收(JDK8中无永生带了),出现Full GC的时候经常伴随至少一次的Minor GC,但非绝对的。Major GC的速度一般会比Minor GC慢10倍以上。下边看看有那种情况触发JV...原创 2020-04-08 10:02:38 · 113 阅读 · 0 评论 -
为什么新生代内存需要有两个Survivor区
1 为什么要有Survivor区先不去想为什么有两个Survivor区,第一个问题是,设置Survivor区的意义在哪里?如果没有Survivor,Eden区每进行一次Minor GC,存活的对象就会被送到老年代。老年代很快被填满,触发Major GC(因为Major GC一般伴随着Minor GC,也可以看做触发了Full GC)。老年代的内存空间远大于新生代,进行一次Full GC消耗的...原创 2020-04-07 23:07:22 · 162 阅读 · 0 评论 -
jvm面试整理:内存与垃圾收集相关(涉及深入理解java虚拟机2-3章内容)
1.JVM内存结构方法区和堆是所有线程共享的内存区域;而java栈、本地方法栈(主要存放c++方法)和程序员计数器是运行是线程私有的内存区域。Java堆(Heap),是Java虚拟机所管理的内存中最大的一块。Java堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存,所有对象的实例以及数组都要在堆上分配。方法区(...原创 2020-02-25 23:07:59 · 253 阅读 · 0 评论 -
invok*家族
invokestatic :调用静态方法。invokespecial:调用实例构造器init方法、私有方法和父类方法。invokevirtual:调用所有的虚方法。nvokeinterface:调用接口方法,会在运行时期再确定一个实现此接口的对象。 invokedynamic:现在运行时期动态解析出调用点限定符所引用的方法,然后再执行该方法,在此之前的4条指令,分派逻辑都是固化在虚拟机里面的...原创 2020-02-19 23:05:01 · 231 阅读 · 0 评论 -
<clinit>与<init>的区别
clinit()Java 类加载的初始化过程中,编译器按语句在源文件中出现的顺序,依次自动收集类中的所有类变量的赋值动作和静态代码块中的语句合并产生 clinit() 方法。 如果类中没有静态语句和静态代码块,那可以不生成clinit()` 方法。并且 clinit() 不需要显式调用父类(接口除外,接口不需要调用父接口的初始化方法,只有使用到父接口中的静态变量时才需要调用)的初始化方法 cl...原创 2020-02-18 00:01:33 · 749 阅读 · 0 评论