深入理解Java虚拟机
文章平均质量分 91
深入理解Java虚拟机:JVM分类总结
Anton丶
前路不尽,心已明,行将远......
展开
-
深入理解Java虚拟机之【垃圾回收器】
Serial收集器采用复制算法,串行回收和STW机制的方式执行内存回收除了年轻代,还有用于执行老年代的Serial old收集器,同样采取了串行回收,但是用标记压缩算法优势:简单而高效,对于限定单个CPU的环境来说,由于没有线程交互的开销,可以获取最高的单线程收集效率但是,对于交互强的应用而言,不会采取串行垃圾......原创 2022-08-16 15:43:13 · 335 阅读 · 0 评论 -
深入理解Java虚拟机之【垃圾回收相关算法】
可触及的:从根节点开始,可以到达这个对象可复活的:对象的所有引用都被释放了,但是对象有可能在finalize()中复活不可触及的:对象的finalize()被调用,并且没有复活,那么就会进入不可触及状态。不可触及的对象不可能被复活,因为finalize()只会被调用一次。...原创 2022-08-15 16:42:47 · 227 阅读 · 0 评论 -
深入理解Java虚拟机之【方法区】
方法区看作是一块独立于Java堆的内存空间,它和Java堆一样,是各个线程共享的内存区域方法区在JVM启动的时候被创建,并且它的实际的物理内存空间和Java堆区一样,都是可以不连续的方法区的大小和堆空间一样,可以选择固定大小或者可扩展关闭JVM就会释放这个区域的内存方法区可以选择固定大小或者可扩展,它的大小决定了系统可以保存多少个类,如果定义太多类,加载大量的第三方的Jar包,Tomcat部署过多工程,导致方法区溢出,虚拟机同样会抛出OOM。...原创 2022-08-12 08:58:42 · 807 阅读 · 0 评论 -
深入理解Java虚拟机之【堆】
堆是Java内存管理的核心区域,一个JVM实例只存在一个堆内存,在JVM启动时被创建并确认空间大小。堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。所有的线程共享Java堆,但是可以划分线程私有的缓冲区(TLAB)堆是GC执行垃圾回收的重点区域,方法结束后,堆中的对象不会马上被移除,仅仅在垃圾收集的时候才会被移除。-Xms :表示堆空间的起始内存。-Xmx:表示堆空间的最大内存。...原创 2022-08-10 19:26:18 · 1040 阅读 · 0 评论 -
深入理解Java虚拟机之【类加载子系统】
目的:隔离加载类、修改类加载的方式、扩展加载源、防止源码泄露实现步骤继承抽象类java.lang.ClassLoader类的方式,实现自己的类加载器1.2之前,继承并重写loadClass方法,1.2之后,建议把自定义的类加载逻辑写在findClass()方法中如果没有太过复杂的需求,可以直接继承URLClassLoader类,可以避免自己编写 findClass() 方法,及其获取字节码流的方式,更简洁。......原创 2022-08-08 19:43:05 · 158 阅读 · 0 评论 -
深入理解Java虚拟机之【虚拟机栈】
基本内容栈主管Java程序的运行,保存方法的局部变量(8种基本数据类型,对象的引用地址),部分结果,并参与方法的调用和返回。每个线程创建时都会创建一个虚拟机栈,内部保存一个个栈帧,对应着一次次的Java方法调用他的生命周期和线程的一致优点虚拟机栈的访问速度仅次于程序计数器,是一种快速有效的存储方式JVM直接对JAVA栈的操作只有两个:方法执行入栈、执行结束出栈栈不存在垃圾回收,但是存在OOM:栈的大小是动态或者固定不变的。如果是动态扩展,无法申请到足够的内存就会导致OOM;...原创 2022-08-09 21:54:10 · 502 阅读 · 0 评论