- 博客(12)
- 资源 (2)
- 收藏
- 关注
原创 Memory Model -- 05 -- 逃逸分析
之前提到了逃逸分析技术,它可能会导致对象实例不一定被分配到堆内存上,现在让我们一起来看看是逃逸分析技术一、即时编译器 (JIT)在这之前,我们首先来认识下 JTT,在部分的商用虚拟机中,Java 程序是通过解释器进行解释执行的,当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为 “热点代码” (Hot Spot Code)为了提高热点代码的执行效率,在运行时,虚拟...
2019-10-30 16:57:03 198
原创 Memory Model -- 04 -- 运行时数据区(四、堆)
一、Java 堆 (java Heap)对于大多数应用来说,Java 堆 (Java Heap) 是 Java 虚拟机所管理的内存中最大的一块,Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存这一点在 Java 虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配,但是随着 JIT ...
2019-10-30 15:00:04 215
原创 Memory Model -- 03 -- 运行时数据区(三、本地方法栈)
一、本地方法栈 (Native Method Stack)本地方法栈 (Native Method Stack) 与虚拟机栈发挥的作用是非常相似的,它们之间的区别不过是虚拟机栈为虚拟机执行 Java 方法 (也就是字节码) 服务,而本地方法栈则为虚拟机使用到的 Native 方法服务在虚拟机规范中对本地方法栈中方法使用的语言、使用方式和数据结构并没有强制规定,因此具体的虚拟机可以...
2019-10-29 21:49:21 311 1
原创 Memory Model -- 02 -- 运行时数据区(二、虚拟机栈)
一、Java 虚拟机栈 (Java Virtual Machine Stacks)与程序计数器一样,Java 虚拟机栈 (Java Virtual Machine Stacks) 也是线程私有的,它的生命周期与线程一样。虚拟机栈描述的是 Java 方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧 (Stack Frame:栈帧是方法运行时的基础数据结构) 用于存储局部变量表、操...
2019-10-27 23:00:51 224
原创 Memory Model -- 01 -- 运行时数据区(一、 程序计数器)
Java 虚拟机在执行 Java 程序的过程中会把它所管理的内存划分为若干个不同的数据区域,这些区域各有各的用途、创建及销毁时间,现在让我们来详细地了解下 Java 的内存模型一、程序计数器 (Program Counter Register)程序计数器 (Program Counter Register) 是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器在虚...
2019-10-17 23:45:27 335 1
原创 Class Loading -- 07 -- forName()和loadClass()的区别
类的加载方式可分为隐式加载和显示加载两种隐式加载:new对于隐式加载而言,当程序在运行过程中,遇到通过 new 方式来生成对象时,会隐式调用类加载器,加载对应的类到虚拟机中显示加载:forName()、loadClass():对于现实加载而言,当我们获取到 Class 对象之后,需要调用 Class 对象的 newInstance() 方法来生成对象实例forNam...
2019-10-15 22:31:45 183
原创 Class Loading -- 06 -- 破坏双亲委派模型
双亲委派模型并不是一个强制性的约束模型,而实 Java 设计者推荐给开发者的类加载器实现方式,在 Java 的世界中大部分的类加载器都遵循这个模型,但也有例外,到目前为止,双亲委派模型主要出现过三次较大规模的 “被破坏” 情况一、第一次被破坏发生在双亲委派模型出现之前,双亲委派模型在 JDK2.0 之后才被引入,为了向前兼容 JDK1.0 已经存在的自定义类加载器,JDK2.0 之后的...
2019-10-15 21:42:58 238
原创 Class Loading -- 05 -- 双亲委派模型
不同的类加载器加载类的方式和路径各有不同,为了实现分工,各自负责各自的区块,使得逻辑更加明确,我们才会有这么多种相互共存的类加载器,为了让它们之间相互协作,形成一个整体,我们需要引入一个模型:双亲委派模型一、双亲委派模型自下而上检查类是否已经被加载,自上而下尝试加载类双亲委派模型要求除了顶层的启动类加载器外,其余的类加载器都应当有自己的父类加载器,且这些类加载器之间的父子关系一...
2019-10-15 20:24:03 179
原创 Class Loading -- 04 -- JVM类加载机制(三、类加载器)
接着我们再来详细地了解下虚拟机中的类加载器一、类与类加载器对于任意一个类,都需要由加载它的类加载器和这个类本身以通确立其在 Java 虚拟机中的唯一性每一个类加载器,都拥有一个独立的类名称空间,通俗地讲:即比较两个类是否 “相等”,只有在这两个类是由同一个类加载器加载的前提下才有意义,不然即使这两个类来源于同一个 Class 文件,被同一个虚拟机加载,但只要加载它们的类加载器不同...
2019-10-14 09:16:46 169
原创 Class Loading -- 03 -- JVM类加载机制(二、类加载过程)
接着我们再来详细地了解下虚拟机中类加载的全过程,主要是加载、验证、准备、解析、初始化这五个阶段所执行的具体动作一、加载 (Loading)在加载阶段,虚拟机需要完成以下三件事通过一个类的全限定名来获取定义此类的二进制字节流从 ZIP 包中读取,是日后 JAR、EAR、WAR 格式的基础从网络中获取,这种场景最典型的应用就是 Applet运行时计算生成,这种场景使...
2019-10-13 21:35:20 205
原创 Class Loading -- 02 -- JVM类加载机制(一、类加载时机)
虚拟机将描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这一过程称之为类加载机制在Java中,类型的加载、连接和初始化过程都是在程序运行期间完成的,依赖于运行期动态加载和动态连接这两个特点,实现了 Java 可以动态扩展的语言特性一、类的生命周期类的生命周期如上所示,其中加载、验证、准备、初始化和卸载这五个阶段...
2019-10-09 21:33:03 174
原创 Class Loading -- 01 -- JVM基本架构
JVM 即 Java Virtual Machine (Java 虚拟机),它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机的功能来实现的在引入 JVM 后,Java 语言实现了平台无关性 (即跨平台性),Java 源码只需要编译一次,就不用在其他操作平台上再次编译了,JVM 屏蔽了与具体操作平台相关的信息,使得 Java 编译程序只需要生成在 JVM 上运行的目标代码 (...
2019-10-09 15:31:58 197
微信公众号开发微信支付工具类
2018-06-11
微信公众号开发消息加解密工具类
2018-06-11
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人