ClassLoader类加载器

ClassLoader类加载器加载将类的.class文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在内存上创建一个java.lang.Class对象用来封装类在方法区内的数据结构作为这个类的各种数据的访问入口验证主要是为了确保class文件中的字节流包含的信息是否符合当前jvm     阅读全文
丁起男's avatar
丁起男 01月 13,2021

jvm-对象一定创建在堆上吗

jvm-对象一定创建在堆上吗结论:不一定,看对象经过了逃逸分析后发现该变量只是用到方法区时,则jvm会自动优化,在栈上创建该对象逃逸分析逃逸分析(escapeanalysis)简单来讲就是:javahotspot虚拟机可以分析新创建对象的使用范围,并决定是否在java堆上分配内存标量替换标量替换:j     阅读全文
丁起男's avatar
丁起男 12月 30,2020

jvm-new个对象

jvm-new个对象一个java类从编码到最终完成执行,主要包括两个过程:编译、运行编译:将我们写好的.java文件通过javac命令编译成.class文件运行:把编译生成的.class文件交由jvm执行jvm运行class类的时候,并不是一次性将所有的类都加载到内存中,而是用到哪个就加载哪个,并且     阅读全文
丁起男's avatar
丁起男 12月 30,2020

jvm-三色标记

jvm-三色标记gms、g1标记的时候一般用的是三色标记法,根据可达性分析从GCRoots开始进行遍历访问,可达的则为存活对象,而最终不可达说明就是需要被GC对象大致流程是把遍历对象图过程中遇到的对象,按是否访问过这个条件标记成三种颜色:白色:尚未访问过黑色:本对象已经访问过,而且本对象引用到的其他     阅读全文
丁起男's avatar
丁起男 12月 30,2020

jvm-垃圾回收算法

jvm-垃圾回收算法为了回收垃圾操作系统一般会使用标记清除、复制算法、标记整理三种算法标记清除原理算法分为标记和清除两个阶段:首先标记出所有需要回收的对象,在标记完成后统一回收所有被标记的对象缺点标记清除之后会产生大量不连续的内存碎片,导致触发gc标记复制原理将可用内存按容量划分为大小相等的两块,每     阅读全文
丁起男's avatar
丁起男 12月 30,2020

jvm-判断对象是否存活

jvm-判断对象是否存活jvm空间不够就需要GarbageCollection了一般共享区的都是要被回收比如堆区以及方法区。在进行内存回收之前要做的事情就是判断哪些对象是死的,哪些是活的。常用方法有两种引用计数法和可达性分析引用计数法思路是给java对象添加一个引用计数器,每当一个地方引用它时,计数     阅读全文
丁起男's avatar
丁起男 12月 29,2020

jvm-线程私有区域

jvm-线程私有区域程序计数器、虚拟机栈、本地方法栈跟线程的声明周期是一样的程序计数器程序计数器用于记录当前线程下虚拟机正在执行的字节码的指令地址特性线程私有:多线程情况下,在同一时刻为了让线程切换后依然能恢复到原位,每条线程都需要有各自独立的程序计数器没有规定OutOfMemoryError:程序     阅读全文
丁起男's avatar
丁起男 12月 29,2020

jvm-直接内存区域

jvm-直接内存区域一般使用native函数操作c++代码来实现直接分配堆外内存,不是虚拟机运行时数据区的一部分,也不是java虚拟机规范中定义的内存区域。这块内存不受java堆空间大小的限制,但是受本机总内存大小限制所有也会出现oom异常。分配空间后避免了在java堆跟native堆中来回复制数据     阅读全文
丁起男's avatar
丁起男 12月 29,2020

jvm-线程共享区域

jvm-线程共享区域堆区堆区heap是jvm中最大的一块内存区域,基本上所有的对象实例都是在堆上分配空间。堆区分为年轻代和老年代,其中年轻代又分为eden、s0、s1三个部分,他们默认的比例是8:1:1方法区在《java虚拟机规范》中只是规定了有方法区这么个概念跟它的作用。HotSpot在jdk8之     阅读全文
丁起男's avatar
丁起男 12月 29,2020

强引用、软引用、弱引用、虚引用

强引用、软引用、弱引用、虚引用jvm垃圾回收中,gc判断堆中的对象实例或数据是不是垃圾的方法有引用计数法和可达性算法两种无论是通过引用计数算法判断对象的引用数量,还是通过根搜索算法判断对象的引用链是否可达,判断对象是否存活都与"引用"有关引用jdk1.2之前,java中的引用的定     阅读全文
丁起男's avatar
丁起男 12月 29,2020