jvm
lloyvet
不追求完美,只追求进步
展开
-
Java中对象的实例化,内存布局和访问定位
对象的实例化创建对象的方式newClass的newInstance():反射的方式,只能调用空参的构造器,权限必须时publicConstructor的newInstance,反射的方式,可以调用空参,带参使用clone:实现Cloneable,实现clone使用反序列化第三方库创建对象的步骤判断对象对应的类是否加载,链接,初始化虚拟机遇到一条new指令,首先区检查这个指令的参数是否能在MetaSpace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载,原创 2020-12-09 12:52:22 · 384 阅读 · 0 评论 -
JVM方法区详述
堆,栈,方法区的交互关系运行时数据区线程共享图交互关系方法区的理解方法区在哪里在《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或进行压缩”,但对于HotSpotJVM而言,方法区还有一个别名叫做Non-Heap(非堆),目的就是和堆分开所以,方法区看做是一块独立于Java堆的内存空间方法区的基本理解方法区(Method Area)与Heap一样,是各个线程共享的内存区域方法区在JVM启动的时候被创建,并且它的实原创 2020-07-02 14:06:17 · 1965 阅读 · 0 评论 -
JVM堆详述
堆得核心概述一个JVM实例只存在一个堆内存,堆也是java内存管理的核心区域Java堆区在jvm启动的时候被创建,其空间大小也就确定了。是jvm管理的最大一块内存空间。(堆内存的大小可以调节)《java虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的所有的线程共享java堆,在这里还可以划分线程私有的缓冲区《Java虚拟机规范》中对Java堆的描述是:所有对象实例以及数组都应该运行时分配在堆上数组和对象可能永远不会存储在栈上,因为栈帧中保存引用,这个引用指向对原创 2020-07-01 11:35:23 · 615 阅读 · 2 评论 -
JVM类加载器子系统
类加载器子系统作用类加载器子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特点的文件标识ClassLoader只负责class文件的加载,至于它是否可以运行,则有Execution Engine决定加载的类信息存放于一块称为方法区的内存空间,除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量类的加载过程加载通过一个类的全限定名获取此类的二进制字节流将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构在内存中生成一个代原创 2020-06-27 12:54:48 · 229 阅读 · 0 评论 -
JVM的整体结构
Chapter1JVM的整体结构java代码执行流程JVM架构模型基于栈式架构的特点设计和实现更简单,适用于资源受限的系统;避开了寄存器的分配难题:使用零地址指令方式分配。指令流中的指令大部分是零地址指令,其执行过程依赖于操作栈。指令集更小,编译器容易实现。不需要硬件支持,可移植性更好,更好实现跨平台基于寄存器架构的特点典型的应用是x86的二进制指令集:比如传统的PC以及Android的Davlik虛拟机。指令集架构则完全依赖硬件,可移植性差性能优秀和执行更高效;花费原创 2020-06-26 19:20:01 · 197 阅读 · 0 评论