类的初始化过程 类的加载过程.png加载 将 Class 文件以二进制的形式加载到内存中 验证 校验 Class 文件是否安全,是否被正确的修改等 准备 为类变量申请内存,设置默认值,(初始化变量的默认值,比如int初始化为0,reference初始化为null) 但是达到类的初始化之前都没有初始化为真正的值。零值.png解析 将符号引用转换为直接引用 初始化 搜集并执行static代码块,以及 方法的执行, 是静态变量以及static 代码块组成 使用 为新对象申...
Java SE / Java EE Hotspot, JRockit(Oracle) J9, JikesRVM(IBM) Zulu, Zing (Azul) Android / Android兼容系统 Dalvik / ART 研究性质的JVM Jikes RVM Maxine VM Graal VM 整理自R大点赞 收藏分享文章举报菠萝科技发布了323 篇原创文章 · 获赞 139 · 访问量 113万+他的留言板 关注
1. GC垃圾搜索算法 1.1 内存泄露和内存溢出内存泄漏:是指程序中已动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果 内存溢出:通俗的说就是系统内存不够,导致程序崩溃,一般内存泄漏很严重会导致内存溢出。 1.2 引用计数算法 对象中存在一个引用计数器,一旦该对象被引用则计数器加1,一旦对象应用被释放,则计数器减1。因为这种算法无法解决相互引用的问题,...
5.1概述 上文介绍了处理Java虚拟机内存问题的知识与工具,在处理实际项目的问题时,除了知识与工具外,经验同样是一个很重要的因素。因此本章将与读者分享几个比较有代表性的实际案例。考虑到虚拟机故障处理和调优主要面向各类服务端应用,而大部分Java程序员较少有机会直接接触生产环境的服务器,因此本章还准备了一个所有开发人员都能够进行“亲身实战”的练习,希望通过实践使读者获得故障处理和调优的经验。 5.2案例分析 5.2.1...
前言 之前写博客一直比较随性,主题也很随意,就是想到什么写什么,对什么感兴趣就写什么。虽然写起来无拘无束,自在随意,但也带来了一些问题,每次写完一篇后就要去纠结下一篇到底写什么,看来选择太多也不是好事儿,更重要的是不成体系的内容对读者也不够友好。所以以后的博客尽量按系列来写,不过偶尔也会穿插其他的内容。接下来一段时间我会把写博客的重点放在 JVM (Java Virtual Machine) 和 JUC (java util concurrent ) 上...
《深入理解Java虚拟机》(第三版)读书笔记(八):第十一章 后端编译与优化 文章目录《深入理解Java虚拟机》(第三版)读书笔记(八):第十一章 后端编译与优化即时编译器解释器和编译器编译对象和触发条件编译器优化技术方法内联:最重要的优化技术之一逃逸分析:最前沿的优化技术之一公共子表达式消除:语言无关的经典优化技术之一数组边界检查消除:语言相关的经典优化技术之一 ? ? ? ? ? ? 如无特殊说明,本章中所提及的即时...
不管学习什么,我一直追求的是知其然,还要知其所以然,对真理的追求可以体现在方方面面。人生短短数十载,匆匆一世似烟云,我认为,既然来了,就应该留下一些有意义的东西。本系列文章是结合张龙老师的《深入理解JVM》视频做的一个笔记,其中将自己在学习过程中的实践记录、思考理解整合在了一起。希望在巩固自己的知识时让更多的朋友能够通过我的整合文章少走一些弯路。文中不免会有错误之处,无论什么东西,都应该带着怀疑的眼光...
文章目录4.1 概述4.2 JDK的命令行工具4.2.1 jps:虚拟机进程状态工具4.2.2 jstat:虚拟机统计信息监视工具4.2.3 jinfo:java配置信息工具4.2.4 jmap:java内存映像工具4.2.5 jhat: 虚拟机堆转储快照分析工具4.2.6 jstack:java堆栈跟踪工具4.2.7 HSDIS:JIT生辰代码反汇编4.3 JDK的可视化工具4.3.1 JConsole:java监视与管理控制台4.3.2 VisualVM:多合一故障处理工具 4.1 概述 4.2 JDK的命令行工具 [外链图片转存失败,源站可能有...
《深入理解Java虚拟机》(第三版)读书笔记(五):第七章 虚拟机类加载机制 文章目录《深入理解Java虚拟机》(第三版)读书笔记(五):第七章 虚拟机类加载机制类加载的时机类加载的过程加载验证准备解析初始化类加载器类与类加载器双亲委派模型破坏双亲委派模型Java模块化系统模块化下的类加载器 ? ? ? ? ? ? ? ? 读书笔记(四)对Class文件存储格式进行了记录,第七章讲的内容就是怎么加载这些Class文件,以及加载到虚拟机之后...
一、晚期(运行期)优化 #栈空间大小 -xssJDK1.7开始,栈空间默认为1M,JDK1.8同 #gc日志对应的参数列表 -XX:+PrintGC 输出GC日志-XX:+PrintGCDetails 输出GC的详细日志-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)-XX:+PrintHeapAtGC 在进行GC的前后打印出堆的信息-Xloggc:../logs/gc.log 日志文件的输出路径#示例,sas的...
https://blog.csdn.net/m0_38075425/article/details/81627349点赞 收藏分享文章举报stay hungry,stay you发布了155 篇原创文章 · 获赞 7 · 访问量 1万+私信 关注
什么是栈帧? 正如大家所了解的,Java虚拟机的内存区域被划分为程序计数器、虚拟机栈、本地方法栈、堆和方法区。(什么?你还不知道,赶紧去看看《Java虚拟机内存结构及编码实战》)这次要介绍的栈帧(Stack Frame),就是Java虚拟机中的虚拟机栈(Virtual Machine Stack)的基本元素,它也是用于支持Java虚拟机进行方法调用和方法执行背后的数据结构,了解了它就可以更好地理解Java虚拟机执行引擎是如何运行的。 每一个方法从调用...
什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写,是一个虚构出来的计算机,它屏蔽了与具体操作系统平台相关的信息,使得Java程序只需生成在Java虚拟机上运行的目标代码(字节码,ByteCode), 就可以在多种平台上不加修改地运行。这背后其实就是JVM把字节码翻译成具体平台上的机器指令,从而实现“一次编写,到处运行(Write Once, Run Anywhere)”。 Java为什么能够跨平台? Java引入了字节码的概念,jvm 只能认识字节...
第一章 走近Java Java技术体系 JDK(Java Development Kit):Java程序设计语言、Java虚拟机、Java API类库。 JRE(Java Runtime Environment):Java API类库的Java SE API子集和Java虚拟机。 JDK是用于支持Java程序开发的最小环境。 JRE是支持Java程序运行的标准环境。 Java ME(Micro Edition):支持Java程序运行在移动终端(手机、PDA)上的平台,对Java API有所精简,并加入了针对移动终端的支持,这个版本以前称为J2ME。 Jav...
?按照Java系统的功能划分为: 一、Java语言,即使用Java编程语言进行软件开发。 二、开发过程中使用的工具和API(API(Application Programming Interface,应用程序接口),是一些预先定义的程序接口,这些接口往往已经实现了系统底层级别或基础服务级别的程序实现,开发人员只要调用这些已经成熟的接口即可实现自己软件设计中的功能。) 包括: javac:编译一个.java文件,产生.class文件。 ...