
Jvm
敲代码的拉布拉多
这个作者很懒,什么都没留下…
展开
-
JVM字节码执行引擎(二)——方法调用(解析、动态分派、静态分派)
参考文章:JVM(十四)方法调用方法调用阶段就是确定被调用方法的版本,即调用哪一个方法。解析我们已经知道,class文件中需要调用的方法都是一个符号引用,而在方法调用中的解析阶段,就是要把一部分符号引用转化为直接引用。能在解析阶段将方法的符号引用转化成直接引用的的方法,必须在方法运行前就确定一个可调用的版本,并且这个版本在运行阶段是不可改变的。“编译期可知,运行期不可变”,符合这个规则的...原创 2020-01-29 11:13:01 · 377 阅读 · 0 评论 -
虚拟机字节码执行引擎(一)——运行时栈帧结构
栈帧中包括:局部变量表、操作数栈、动态链接、方法出口。动态连接在Java虚拟机类加载机制(二)——类加载的过程中已介绍过类加载过程中的解析阶段,是将符号引用转换为直接引用,但是是静态的。在与运行期间转化为直接引用就是动态连接。其他部分可参考阅读JVM底层结构通过Java字节码深入理解Java执行过程及JVM底层结构...原创 2020-01-26 19:19:01 · 262 阅读 · 0 评论 -
Java堆内存介绍及简单性能调优
Java底层最重要的一部分就是jvm堆内存,它影响着Java的性能。这篇博客主要介绍Java堆内存的分区及简单的Java调优。我感觉这篇我真的用心在写。收获很大原创 2019-11-22 01:54:13 · 660 阅读 · 0 评论 -
Java虚拟机类加载机制(三)——类加载器
类加载器:实现 “ 通过类的全限定名来获取描述此类的二进制字节流 ” 的模块 类加载器种类:启动类加载器:负责加载支撑JVM运行的位于jre/lib目录下的核心类库(例如:String、Object类),在虚拟机启动时就会加载完,以支撑虚拟机的运行。对于hotspot,这个类加载器使用C++实现。扩展类加载器:负责加载支撑JVM运行的位于jre/lib/ext中的JAR包。由Java...原创 2020-01-26 15:43:14 · 300 阅读 · 0 评论 -
Java虚拟机类加载机制(二)——类加载的过程
加载将类的.class文件中的二进制数据读入到内存中将其放在运行时数据区的方法区内然后再内存中创建一个java.lang.Class对象用来封装类在方法区内的数据结构简单地说,加载:在硬盘上查找并通过IO读入字节码文件验证目的:确保Class文件字节流中包含的信息符合当前虚拟机的要求,并且不会危害虚拟机自身的安全。主要分为四个检验部分:文件格式验证:检验是否为class文件...原创 2020-01-22 22:18:31 · 230 阅读 · 0 评论 -
Java虚拟机类加载机制(一)——类加载的时机
虚拟机如何加载Class文件?Class文件里的信息进入虚拟机会发生怎样的变化?虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是类加载机制类加载的时机类从被加载到内存到卸载出内存,生命周期:加载、连接(验证、准备、解析)、初始化、使用、卸载初始化遇到new、getstatic、putstati...原创 2020-01-22 18:55:33 · 278 阅读 · 0 评论 -
通过Java字节码深入理解Java执行过程及JVM底层结构
在读本文时,可以参考我的另外两篇介绍jvm的博客。JVM底层结构Java堆内存介绍及简单性能调优生成一个字节码文件首先我们编写一个简单的Java文件在文件夹中找到这个文件,可以看到只有一个.java 文件在命令行使用Javac命令,生成.class文件使用Javap -c命令,生成字节码文件看到这个乱七八糟的代码,你可能会问,,这tm是什么鬼。下面通过JVM指令手册从J...原创 2020-01-21 11:41:37 · 671 阅读 · 0 评论 -
JVM底层结构
引言Java的优点:一次编写,处处执行,即跨平台。Java如何做到跨平台呢?首先看这张图片,我们写的Java代码,通过Javac编译成字节码文件,然后通过Java命令进入jvm。但是在不同的平台上机器码不一样,所以jvm一个宏观上的理解就是:从软件层面屏蔽不同操作系统在底层硬件与指令上的区别。JVM虚拟机结构图JVM各组成部分:运行时数据区(内存模型)类转载子系统字节码执行引擎...原创 2019-11-30 23:04:01 · 665 阅读 · 0 评论 -
内存分配与回收策略
对象优先在Eden分配大多数情况,对象在Eden新生代分配,当没有足够的空间时,会发生Minor GC大对象直接进入老年代(PretenureSizeThreshold)目的:避免在Eden区和俩Survivor区发生大量的内存复制长期存活的对象将进入老年代给对象加一个age计数器,每经历一次Minor GC,就给他加一岁,当达到设定的年龄时(一般是MaxTenuringThreshol...原创 2020-01-04 17:37:02 · 135 阅读 · 0 评论 -
HotSpot 对象存活判定、垃圾回收算法
在进行全局性的垃圾回收时,JVM为保持一致性,Stop The World ,(原因在JVM性能调优已经提到过,为了防止在某个链条上新产生的垃圾对象永远无法被发现)。枚举根节点当发生STW停下来之后,JVM并不需要检查所有的引用位置,只需要知道哪里存着这些对象,所以就有了OopMap数据结构存储位置安全点OopMap内容变化的指令很多,不能为每一条指令都生成对应的OopMap,HotSpo...原创 2020-01-04 17:13:08 · 170 阅读 · 0 评论 -
Java垃圾收集方法
对象是否已死引用计数算法给对象添加一个引用计数器,每当一个地方要引用它时,计数器的值就加一;当引用失效,计数器值就减一。看似合理,但是没法解决对象间互相引用的问题。可达性分析算法通过“GC Roots”的对象作为起始点,向下搜索,当一个对象到GC Roots没有任何引用链相连,则说明对象不可达,即对象不可用。可以作为GC Roots 的对象包括:栈帧中引用的对象方法区静态类属性引...原创 2020-01-04 00:23:34 · 228 阅读 · 0 评论 -
JVM参数Xms、Xmx、Xmn、SurvivorRatio...含义
-Xmx:应用程序能够使用的最大内存数-Xms:用来设置程序初始化的时候内存栈的大小,增加这个值会提高程序的启动性能-Xmn:新生代大小SurvivorRatio:设置两个survivor与Eden之比,8表示每个survivor:Eden=1:8MaxTenuringThreshold:年龄阈值(对象的复制次数)...原创 2019-12-10 22:46:32 · 1808 阅读 · 0 评论