zl程序教程

JVM学习笔记

  • JVM 学习笔记(4):内存分配与回收策略

    JVM 学习笔记(4):内存分配与回收策略

    1、对象优先在 Eden 区分配一般情况下,对象都优先在新生代的 Eden 区中分配,当 Eden 内存不足时将会发起一次 Minor GC。2、大对象直接进入老年代大对象指的是占用大量连续内存的 Java对象,例如长字符串、长数组等,这些大对象的内存分配可能会遭遇总空间充足但连续空间不足而无法分配的情况,或者在复制对象时产生高昂的成本,因此在 Serial 或者 ParNew 虚拟机中可以使用参

    日期 2023-06-12 10:48:40     
  • JVM 学习笔记(3):HotSpot 算法实现的细节

    JVM 学习笔记(3):HotSpot 算法实现的细节

    1、根节点枚举前面讲到了可以作为根节点的对象,但如果需要去遍历寻找这些对象的话成本就太高了,并且这个过程是会造成 STW 的,因此需要一种更高效的枚举手段;HotSpot 中采用一组 OopMap 数据结构记录对象的引用情况,在类加载完成后 HotSpot 会记录下对象中属性的偏移量和类型,在即时编译阶段会在特定位置记录下对象引用情况,OopMap 就是用来记录这两部分内容的,后面扫描时直接找到这

    日期 2023-06-12 10:48:40     
  • JVM 学习笔记(2):垃圾回收GC

    JVM 学习笔记(2):垃圾回收GC

    1、对象存活判断算法1)引用计数算法在对象中添加一个引用计数器,每当有一个地方 引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可 能再被使用的。 这个算法原理简单,判断效率也高,但如果出现对象之间的相互引用(循环引用),那么相应对象的引用计数器将永不为0,也就无法被回收掉,即使他们已经没有存活的意义。2)可达性分析算法GC Root 也称为根对象,代表的是

    日期 2023-06-12 10:48:40     
  • JVM 学习笔记(1):Java内存区域

    JVM 学习笔记(1):Java内存区域

    1、运行时数据区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途,以及创建和销毁的时间,有的区域随着虚拟机进程的启动而一直存在,有些区域则是 依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域。--《深入理解Java虚拟机》 Java 内存布局2、程序计数器1

    日期 2023-06-12 10:48:40     
  • JVM学习笔记——内存结构篇

    JVM学习笔记——内存结构篇

    JVM学习笔记——内存结构篇在本系列内容中我们会对JVM做一个系统的学习,本片将会介绍JVM的内存结构部分我们会分为以下几部分进行介绍:JVM整体介绍程序计数器虚拟机栈本地方法栈堆方法区直接内存JVM整体介绍我们在正式开始学习JVM之前当然需要先简单认识一下JVM了JVM简述首先我们给出JVM的定义:Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运

    日期 2023-06-12 10:48:40     
  • JVM学习笔记——垃圾回收篇

    JVM学习笔记——垃圾回收篇

    JVM学习笔记——垃圾回收篇在本系列内容中我们会对JVM做一个系统的学习,本片将会介绍JVM的垃圾回收部分我们会分为以下几部分进行介绍:判断垃圾回收对象垃圾回收算法分代垃圾回收垃圾回收器垃圾回收调优判断垃圾回收对象本小节将会介绍如何判断垃圾回收对象引用计数法首先我们先来介绍引用计数法的定义:我们为对象附上一个当前使用量当有线程使用时,我们将该值加一;当线程停止使用时,我们将该值减一当当前使用量大于

    日期 2023-06-12 10:48:40     
  • JVM学习笔记之类装载器-ClassLoader

    JVM学习笔记之类装载器-ClassLoader

    JVM体系结构概览类装载器ClassLoader:负责加载class文件,class文件在文件开头有特定的文件标识,将class文件字节码内容加载到内存中,并将这些内容转换成方法区中的运行时数据结构并且ClassLoader只负责class文件的加载,至于class文件是否可以允许,则由Execution Engine决定。本文是由凯哥Java(WXID:kaigejava)分享《JVM系列教程》

    日期 2023-06-12 10:48:40     
  • JVM字节码学习笔记——class 文件结构

    JVM字节码学习笔记——class 文件结构

    0x01 前言本系列学习笔记均来自《深入理解 JVM 字节码》(作者:张亚),本笔记仅用于个人学习知识总结。对于学习 java 安全、想了解 JVM 字节码的童鞋们强烈建议购买正版书去阅读。0x02 class 文件结构java 是跨平台的一门语言,但是 jvm 却不是跨平台的,但是不同平台的 JVM 帮我们屏蔽了差异,通过 JVM 可以把源代码编译成和平台无关的字节码,这样我们的源代码就不用根据

    日期 2023-06-12 10:48:40     
  • JVM学习笔记(一,待整理)

    JVM学习笔记(一,待整理)

    1、 2、 3、 4、-Xint、-Xcomp、-Xmixed 在解释模式(interpreted mode)下,-Xint标记会强制JVM执行所有的字节码,当然这会降低运行速度,通常低10倍或更多。 -Xcomp参数与它(-Xint)正好相反,JVM在第一次使用时会把所有的字节码编译成本地代码,从而带来最大程度的优化。 然而,很多应用在使用-Xcomp也会有一些性能损失,当然这比使用-Xi

    日期 2023-06-12 10:48:40     
  • JVM深入学习笔记七-JVM执行

    JVM深入学习笔记七-JVM执行

    p strong span >运行时栈帧 栈帧( 局部变量表(基本数据类型,对象引用,returnAddress类型 ), 操作数栈 , 动态链接 , 方法返回地址 ) 局部变量表 以Slot为最小的单位。用来存放32位以内的数据类型。像long,double需要连续的两个Slot 局部变量从0位开始会每一个index对应一个变量的值0一般是this Slot可以改变,当程序计数器指针

    日期 2023-06-12 10:48:40     
  • JVM深入学习笔记六-JVM类加载

    JVM深入学习笔记六-JVM类加载

    p span >类加载过程 主要分为了 加载- 链接(验证- 准备- 解析)- 初始化- 使用- 卸载这几个阶段。 加载 三件事 1. 通过类的权限定名称来获取定义此类的二进制字节流(可以是文件,网络,数据库,动态等等等等) 2. 把类的结构放在方法区中 3. 创建Class对象作为访问入口 验证 主要包括了字节码验证,元数据验证(这部分在编译期间基本上避免了),类文件格

    日期 2023-06-12 10:48:40     
  • JVM深入学习笔记五:JVM 监控工具

    JVM深入学习笔记五:JVM 监控工具

    p JDK提供了很多的工具来监控JVM。 /p p 这些工具都是支持RMI远程监控的,暂且不记录远程调试的办法 /p p 1. JPS /p p /p div Process Status.  列出正在执行的虚拟机进程,可以查看到具体的类和进程ID。 /div div pre code_sn JDK提供了很多的工具来监控JVM。 这些工具都是支持RMI远程

    日期 2023-06-12 10:48:40     
  • JVM深入学习笔记四:JVM垃圾收集和内存分配

    JVM深入学习笔记四:JVM垃圾收集和内存分配

    p span >1. 垃圾判断算法 引用计数法,    给对象添加引用计数器,每有一个引用则+1, 没有则-1,为0为已死。python就是使用这种算法。  但是不能解决循环引用的问题。 根搜索算法。     从根开始向下搜索,如果有对象到根不可达则为死对象。 HopSpot使用的是这种算法。   这里的根可以是栈中的引用对象, 方法区常量的引用对象,方法区静态属性的引用对象,JNI的引用

    日期 2023-06-12 10:48:40     
  • JVM深入学习笔记三:JVM 内存模型

    JVM深入学习笔记三:JVM 内存模型

    p 1. JVM运行时内存 图 /p p img src= http://img.blog.csdn.net/20141002191517107?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdGhyZWVfbWFu/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gra 1.

    日期 2023-06-12 10:48:40     
  • JVM深入学习笔记二:Java JIT编译

    JVM深入学习笔记二:Java JIT编译

    解释执行,在当运行次数比较少的时候能够省去编译的操作直接运行字节码。  另外解释更加的节约内存。 而编译为机器码则可以获得更高的效率。 因为各有好处,HotSpot使用了共存的机制,可以使用-Xint强制使用解释模式或者是-Xcomp 编译模式。 此外HotSpot提供了两种编译器Client Compile和Server Compiler,分别针对于更快的编译速度和更好的编译效果。使用

    日期 2023-06-12 10:48:40     
  • JVM深入学习笔记一:Java 编译器初探

    JVM深入学习笔记一:Java 编译器初探

    一、 编译一个文件 首先去搞到源代码。从JDK6开始Java代码开源,放到OPENJDK组织中去,所以从这个网站进行下载: http://hg.openjdk.java.net/jdk6/jdk6/langtools/  下载之后是一个zip包,解压,可以直接导入到eclipse中进行使用,导入之后可能会报错,需要设置一下。 好,下面写一个用作测试的类: import java.

    日期 2023-06-12 10:48:40     
  • JVM类加载原理学习笔记

    JVM类加载原理学习笔记

    (1)类的生命周期包括了:加载(Loading)、验证(Verification)、准备(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)、卸载(Unloading)七个阶段 (2)当Java程序需要使用某个类时,JVM会确保这个类已经被加载、连接(验证、准备和解析)和初始化。 (3)加载阶段:通过一个类的全限定名来获取此类的二

    日期 2023-06-12 10:48:40     
  • JVM学习笔记(一)------基本结构

    JVM学习笔记(一)------基本结构

    从Java平台的逻辑结构上来看,我们能够从下图来了解JVM: 从上图能清晰看到Java平台包括的各个逻辑模块,也能了解到JDK与JRE的差别 对于JVM自身的物理结构,我们能够从下图俯视一下: 对于JVM的学习,在我看来这么几个部分最重要: Java代码编译和运行的整个过程 JVM内存管理及垃圾回收机制 以下将这两个部分进行具体学习

    日期 2023-06-12 10:48:40     
  • JVM学习笔记(一)——内存模型

    JVM学习笔记(一)——内存模型

    对于Java程序员来说,他们相比C++程序员最幸福的一点就是不用自己管理内存,内存的分配和回收都由虚拟机完成。然而,正是由于该原因,一旦虚拟机内存管理出现问题,比如出现内存泄漏或溢出,排查起来将是非常困难的。所以尽管不用亲自动手管理内存,但是了解虚拟机的内存管理机制还是很有必要的。 运行时数据区域 首先来看下Java虚拟机在运行时的数据区域划分,Java虚拟机在Java程序运行时会将内存区域划

    日期 2023-06-12 10:48:40     
  • JVM学习笔记(二)——Class文件结构

    JVM学习笔记(二)——Class文件结构

    Class文件是Java程序跨平台的保证,正是由于有了Class文件架起源码和机器码之间的中间桥梁,JVM虚拟机才可以在各种平台上按照统一的规范标准加载Java代码。 作为“写给虚拟机看的”Java代码,Class文件结构必须设计得足够完善,同时由于Java虚拟机规范并不只针对Java,Class文件又不能引入过多细节。本篇博客我们就来介绍下Class文件的结构。 一个Class文件对应一个J

    日期 2023-06-12 10:48:40     
  • JVM学习笔记(三)——虚拟机类加载机制

    JVM学习笔记(三)——虚拟机类加载机制

    在介绍完class文件格式后,我们来看下虚拟机是如何把一个由class文件描述的类加载到内存中的。具体来说java中类的加载涉及7个阶段:加载、校验、准备、解析、初始化、使用、卸载。 1.加载时机 并不是所有的类在程序启动时即被加载,为提升效率,虚拟机通常秉承的是按需加载的原则,即需要使用到相应的类时才加载对应的类。具体包括如下几个加载时机: 遇到new、getstatic、putstati

    日期 2023-06-12 10:48:40     
  • JVM学习笔记(四)——字节码执行引擎

    JVM学习笔记(四)——字节码执行引擎

    代码编译的结果从机器码转变为字节码,是存储格式的一小步,确实编程语言发展的一大步。正是因为有了字节码这一中间格式才有了Java语言跨平台的特性。 字节码并不能直接基于物理机执行引擎执行,因为物理机执行引擎是建立在特定的处理器,指令集以及操作系统之上的,并不具备跨平台特性。所以执行字节码的责任就交给了虚拟机中的字节码执行引擎。 1 运行时栈帧结构 栈帧是用于刻画Java程序运行时一个方法的调用

    日期 2023-06-12 10:48:40     
  • JVM学习笔记(一)——内存模型

    JVM学习笔记(一)——内存模型

    对于Java程序员来说,他们相比C++程序员最幸福的一点就是不用自己管理内存,内存的分配和回收都由虚拟机完成。然而,正是由于该原因,一旦虚拟机内存管理出现问题,比如出现内存泄漏或溢出,排查起来将是非常困难的。所以尽管不用亲自动手管理内存,但是了解虚拟机的内存管理机制还是很有必要的。 对于Java程序员来说,他们相比C++程序员最幸福的一点就是不用自己管理内存,内存的分配和回收都由虚拟机完成。然

    日期 2023-06-12 10:48:40     
  • JVM学习笔记(二)------Java代码编译和执行的整个过程

    JVM学习笔记(二)------Java代码编译和执行的整个过程

    Java代码编译是由Java源码编译器来完成,流程图如下所示: Java字节码的执行是由JVM执行引擎来完成,流程图如下所示: Java代码编译和执行的整个过程包含了以下三个重要的机制: ● Java源码编译机制 ● 类加载机制 ● 类执行机制 Java源码编译机制 Java 源码编译由以下三个过程组成: ● 分析和输入到符号表 ● 注解处理 ● 语义分析和

    日期 2023-06-12 10:48:40     
  • JVM学习笔记(一)------基本结构

    JVM学习笔记(一)------基本结构

    从Java平台的逻辑结构上来看,我们可以从下图来了解JVM: 从上图能清晰看到Java平台包含的各个逻辑模块,也能了解到JDK与JRE的区别 对于JVM自身的物理结构,我们可以从下图鸟瞰一下: 对于JVM的学习,在我看来这么几个部分最重要: ● Java代码编译和执行的整个过程 ● JVM内存管理及垃圾回收机制 下面将这两个部分进行详细学习。 本文出自seve

    日期 2023-06-12 10:48:40     
  • JVM学习笔记(四)------内存调优

    JVM学习笔记(四)------内存调优

    首先需要注意的是在对JVM内存调优的时候不能只看操作系统级别Java进程所占用的内存,这个数值不能准确的反应堆内存的真实占用情况,因为GC过后这个值是不会变化的,因此内存调优的时候要更多地使用JDK提供的内存查看工具,比如JConsole和Java VisualVM。 对JVM内存的系统级的调优主要的目的是减少GC的频率和Full GC的次数,过多的GC和Full GC是会占用很多的系统资源(

    日期 2023-06-12 10:48:40     
  • JVM学习笔记(一)------的基本结构

    JVM学习笔记(一)------的基本结构

    从Java视台的逻辑结构。我们能够从图中学习JVM: 您可以从图表清楚地看到Java该平台包括各种逻辑模块,还可以学习JDK与JRE差异 于JVM它们的物理结构,我们可以看一下从图计划: 为JVM学习,所以,在我看来,最重要的部分: Java整个过程的代码被编译并运行 JVM内存管理和垃圾收集 下面具体的学习这两部分

    日期 2023-06-12 10:48:40     
  • JVM学习笔记(一)------基本结构

    JVM学习笔记(一)------基本结构

    从Java平台的逻辑结构上来看,我们能够从下图来了解JVM: 从上图能清晰看到Java平台包括的各个逻辑模块,也能了解到JDK与JRE的差别 对于JVM自身的物理结构,我们能够从下图俯视一下: 对于JVM的学习,在我看来这么几个部分最重要: Java代码编译和运行的整个过程 JVM内存管理及垃圾回收机制 以下将这两个部分进行具体学习

    日期 2023-06-12 10:48:40     
  • JVM学习笔记(一)------基本结构

    JVM学习笔记(一)------基本结构

    从Java平台的逻辑结构上来看,我们能够从下图来了解JVM: 从上图能清晰看到Java平台包括的各个逻辑模块,也能了解到JDK与JRE的差别 对于JVM自身的物理结构,我们能够从下图俯视一下: 对于JVM的学习,在我看来这么几个部分最重要: Java代码编译和运行的整个过程 JVM内存管理及垃圾回收机制 以下将这两个部分进行具体学习

    日期 2023-06-12 10:48:40