JVM
java虚拟机相关
Mounsey
一只小菜鸟
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
JVM-双亲委派机制
双亲委派模型的工作机制是:当类加载器收到类加载请求时,它不会自己去尝试加载这个类,而是把这个请求委派给父加载器去完成,只有当父类加载器反馈自己无法完成这个加载请求时,子加载器才会尝试自己去加载类。JDK代码实现:public class ClassLoader { protected Class<?> loadClass(String name, boolean resolve) throws ClassNotFoundException{ synchroni原创 2020-12-11 20:30:43 · 232 阅读 · 0 评论 -
JVM-垃圾回收器分析对比
垃圾回收器进行回收时,会停止Java系统的所有工作线程,禁止创建对象,进入“Stop the World”状态。所以无论是新生代GC还是老年代GC,都要避免频率过高、持续时间过长,影响系统正常运行。1、新生代垃圾回收器–ParNew使用多线程垃圾回收机制,默认设置的垃圾回收线程数量是和CPU的核数是一样的,标记转移Eden和Survivor1的对象到Survivor2中去,然后尽快一次性回收掉Eden和Survivor1中的垃圾对象,回复Java工作线程的运行。2、老年代垃圾回收器–CMS一般老年原创 2020-12-11 20:28:26 · 1160 阅读 · 1 评论 -
JVM-垃圾收集器与内存分配策略
Java内存运行时区域中,程序计数器、虚拟机栈、本地方法栈随着线程的消失而消失,因此垃圾回收主要关注Java堆和方法区的内存回收。方法区的回收主要回收废弃的常量和不再使用的类型。判定一个类型是否属于“不再使用”需要满足以下条件:(1)该类所有的实例都已经被回收,即Java堆中不存在该类及该类的任何派生子类的实例;(2)加载该类的类加载器都已经被回收;(3)该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该类的方法。怎样判断对象是否需要回收1、引用计数算原创 2020-12-11 20:21:41 · 202 阅读 · 0 评论 -
JVM-类加载机制
1、虚拟机的类加载机制类加载子系统负责从文件系统或者网络中加载Class文件,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。ClassLoader只负责class文件的加载,至于它是否可以运行,取决于ExecutionEngine。加载的类信息存放于一块称为方法区的内存空间,还存放运行时常量池信息,包括字符串字面量和数字常量。一个类的生命周期包括加载、验证、准备、解析、初始化、使用和卸载七个阶段,其中验证、准备、解析统称为连接。解析阶段顺序不固定2、触发类加载的时机原创 2020-11-26 08:29:16 · 166 阅读 · 0 评论 -
JVM-内存的分代模型
根据写代码的方式不同,采用不同的方式来创建和使用对象,对象的生存周期是不同的,所以JVM将Java堆内存划分为了两个区域,一个是年轻代,一个是老年代。年轻代:创建和使用完之后立马就要回收的对象;老年代:创建之后要长期存放一个栗子:Kafka类中的静态变量 fetcher 引用了ReplicaFetcher对象,该对象需要长期贮存在内存中使用,进入老年代。进入main()方法后,执行loadReplicasFromDisk()方法,该方法的栈帧会入栈,该方法中创建了一个ReplicaManage原创 2020-11-11 14:59:24 · 353 阅读 · 0 评论 -
JVM-Java内存区域与内存溢出异常
一、运行时数据区域1、程序计数器如果当前执行的是java方法,记录正在执行的虚拟机字节码指令的地址;如果是native方法,则为空(undifined)2、Java栈存储局部变量表(基本数据类型和对象引用)、操作数栈、动态链接、方法出口等信息。局部变量表在编译初期分配完成。每个线程都有自己的Java虚拟机栈,用来存放自己执行的哪些方法的局部变量(如某一个对象的地址)。如果线程执行了一个方法,就会给这个线程分配一个栈帧,栈帧里存储这个方法的局部变量表、操作数栈、动态链接、方法出口,方法执行完毕后出原创 2020-09-23 14:52:35 · 245 阅读 · 0 评论
分享