随笔分类 - JVM
发表于 2020-11-16 00:48阅读:326评论:1推荐:0
摘要:可以先看看我的深入理解java虚拟机笔记 深入理解java虚拟机笔记Chapter2 深入理解java虚拟机笔记Chapter3-垃圾收集器 深入理解java虚拟机笔记Chapter3-内存分配策略 深入理解java虚拟机笔记Chapter4 深入理解java虚拟机笔记补充-JVM常见参数设置 深入
阅读全文 »
发表于 2020-10-08 14:33阅读:181评论:0推荐:0
摘要:(本节笔记的线程收录在线程/并发相关的笔记中,未在此处提及) Java内存模型 Java 内存模型主要由以下三部分构成:1 个主内存、n 个线程、n 个工作内存(与线程一一对应) 主内存与工作内存 Java内存模型的主要目标是定义程序中各个变量的访问规则 – 虚拟机中将变量存储到内存和从内存中取出变
阅读全文 »
发表于 2020-10-08 14:00阅读:183评论:0推荐:0
摘要:运行期优化 即时编译 什么是即时编译? 当虚拟机发现某个方法或某段代码运行的特别频繁时,会把这段代码认为成热点代码; 在运行时,虚拟机会将这段代码编译成平台相关的机器码,并进行各种层次的优化。 HotSpot 虚拟机内的即时编译器运作过程 我们主要通过以下 5 个问题来了解 HotSpot 虚拟机的
阅读全文 »
发表于 2020-10-07 21:04阅读:149评论:0推荐:0
摘要:运行时栈帧结构 栈帧(Stack Frame)是用于支持虚拟机进行方法调用和方法执行的数据结构,它是虚拟机运行时数据区中的虚拟机栈(Virtual Machine Stack)的栈元素。栈帧存储了方法的局部变量表、操作数栈、动态连接和方法返回地址等信息。每一个方法从调用开始至执行完成的过程,都对应着
阅读全文 »
发表于 2020-10-07 19:15阅读:162评论:0推荐:0
摘要:虚拟机类的加载机制 概述 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类的加载机制。 类加载的时机 JVM 会在程序第一次主动引用类的时候,加载该类,被动引用时并不会引发类加载的操作。也就是说,JVM
阅读全文 »
发表于 2020-10-06 16:30阅读:219评论:0推荐:0
摘要:JVM 常见参数设置 内存设置 参数 -Xms:初始堆大小,JVM 启动的时候,给定堆空间大小。 -Xmx:最大堆大小,如果初始堆空间不足的时候,最大可以扩展到多少。 -Xmn:设置年轻代大小。整个堆大小 = 年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为 64M,所以增大年轻代后
阅读全文 »
发表于 2020-10-06 15:51阅读:121评论:0推荐:0
摘要:JDK命令行工具 其中的重中之重是 jstat 命令!而它最常用的参数就是 -gcutil,使用格式如下: jstat -gcutil [pid] [intervel] [count] 输出如下 D:\Java\jdk1.6.0_21\bin > jstat -gcutil 2764 s0 s1 E
阅读全文 »
发表于 2020-10-06 15:12阅读:156评论:0推荐:0
摘要:内存分配策略 新生代和老年代的 GC 操作 新生代 GC 操作:Minor GC 发生的非常频繁,速度较块。 老年代 GC 操作:Full GC / Major GC 经常伴随着至少一次的 Minor GC; 速度一般比 Minor GC 慢上 10 倍以上。 优先在 Eden 区分配 Eden 空
阅读全文 »
发表于 2020-10-06 14:46阅读:136评论:0推荐:0
摘要:垃圾收集器 垃圾收集(Garbage Collection,GC),它的任务是解决以下 3 件问题: 哪些内存需要回收? 什么时候回收? 如何回收? 本节补充知识: ① s:Survivor区 新生代(Young Generation):大多数对象在新生代中被创建,其中很多对象的生命周期很短。每次新
阅读全文 »
发表于 2020-10-06 10:50阅读:220评论:0推荐:0
摘要:java虚拟机运行时数据区 首先获取一个直观的认识: 程序计数器 线程私有。各条线程之间计数器互不影响,独立存储。 当前线程所执行的字节码行号指示器。字节码解释器工作时通过改变这个计数器值选取下一条需要执行的字节码指令(分支、循环、跳转、异常处理都需要依赖此计数器)。 多线程运行时通过此计数器在线程
阅读全文 »