第2章 认识JAVA虚拟机的基本结构】的更多相关文章

2.1 虚拟机的内存划分 垃圾回收系统既回收堆,也回收方法区和直接内存 直接内存其实是一块不受JVM管理的内存,但是收到计算机内存的限制 2.2 虚拟机参数 -Xmx:虚拟机最大可用内存 2.3 堆 新生对象在eden和s0或者s1,每一次垃圾回收幸存下来的对象会倒腾到另一个s区并且岁数增大,大到一定程度就放到老年代. 2.4 栈 栈对应线程私有内存,线程每次调用方法对应一个栈帧入栈,方法正常返回或者抛出异常对应栈帧出栈. 栈的深度决定函数调用的最大的次数,如果栈满了回在此区域发生OOM. 2.…
本规范描述的是一种抽象化的虚拟机的行为,而不是任何一种(译者注:包括 Oracle 公司自己的 HotSpot 和 JRockit 虚拟机)被广泛使用的虚拟机实现. 记住:JVM规范是一种高度抽象行为的描述,而不是具体虚拟机的实现. 所有在虚拟机规范之中没有明确描述的实现细节,都不应成为虚拟机设计者发挥创造性的牵绊,设计者可以完全自主决定所有规范中不曾描述的虚拟机内部细节,例如:运行时数据区的内存如何布局.选用哪种垃圾收集的算法.是否要对虚拟机字节码指令进行一些内部优化操作(如使用即时编译器把字…
一条 Java 虚拟机指令由一个特定操作的操作码和零至多个操作所使用到的操作数所构成. 虚拟机指令 = 操作码 + 操作数. 其中,操作码值分别为 254(0xfe)和 255(0xff),助记符分别为 impdep1 和 impdep2的两个操作码是作为"后门"和"陷阱"出现,目的是在某些硬件和软件中提供一些与实现相关的功能.第三个操作码值分别为 202(0xca).助记符为 breakpoint 的操作码是用于调试器实现断点功能. 三个保留操作码: 254(0x…
1 java虚拟机的基本结构如图: 1)类加载子系统负责从文件系统或者网络中加载Class信息,加载的类信息存放于一块称为方法区的内存空间.除了类的信息外,方法区中可能还会存放运行时常量池信息,包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射). 2)java堆在虚拟机启动的时候建立,它是java程序最主要的内存工作区域.几乎所有的java对象实例都存放在java堆中.堆空间是所有线程共享的,这是一块与java应用密切相关的内存空间. 3)java的NIO库允许j…
注意: 我们可以看到的就是InstanceData的数据. 先转载一篇文章作为开头,因为讲的非常详细,我就简单加工下放到这里: 对象结构 在HotSpot虚拟机中,对象在内存中存储的布局可以分为3块区域:对象头(Header).实例数据(Instance Data)和对齐填充(Padding).下图是普通对象实例与数组对象实例的数据结构: 对象头 HotSpot虚拟机的对象头包括两部分信息: markword 第一部分markword,用于存储对象自身的运行时数据,如哈希码(HashCode).…
第一部分 走进Java第1章 走进Java 第二部分 自动内存管理机制 第2章 Java内存区域与内存溢出异常2.1 概述2.2 运行时数据区域2.2.1 程序计数器2.2.2 java虚拟机栈2.2.3 本地方法栈2.2.4 Java堆2.2.5 方法区2.2.6 运行时常量池2.2.7 直接内存2.3 HotSpot虚拟机对象探秘2.3.1 对象的创建2.3.2 对象的内存布局2.3.3 对象的访问定位2.4 实战:OutOfMemoryError异常2.4.1 Java堆溢出2.4.2 虚…
Java 的基本程序设计结构 现在, 假定已经成功地安装了 JDK,并且能够运行第 2 章中给出的示例程序.我们从现在开始将介绍 Java 应用程序设计.本章主要介绍程序设计的基本概念(如数据类型.分支以及循环)在 Java 中的实现方式. 非常遗憾, 需要告诫大家, 使用 Java 编写 GUI 应用程序并不是一件很容易的事情, 编程者需要掌握很多相关的知识才能够创建窗口. 添加文本框以及能响应的按钮等.介绍基于 GUI 的 Java 应用程序设计技术与本章将要介绍的程序设计基本概念相差甚远,…
我们都知道虚拟机的内存划分了多个区域,并不是一张大饼.那么为什么要划分为多块区域呢,直接搞一块区域,所有用到内存的地方都往这块区域里扔不就行了,岂不痛快.是的,如果不进行区域划分,扔的时候确实痛快,可用的时候再去找怎么办呢,这就引入了第一个问题,分类管理,类似于衣柜,系统磁盘等等,为了方便查找,我们会进行分区分类.另外如果不进行分区,内存用尽了怎么办呢?这里就引入了内存划分的第二个原因,就是为了方便内存的回收.如果不分,回收内存需要全部内存扫描,那就慢死了,内存根据不同的使用功能分成不同的区域,…
前言简介 class文件是源代码经过编译后的一种平台中立的格式 里面包含了虚拟机运行所需要的所有信息,相当于 JVM的机器语言 JVM全称是Java Virtual Machine  ,既然是虚拟机,他终归要运行在物理机上 在操作系统中体现出来的也就是一个进程 操作系统会给他分配资源,割一块内存作为他的地盘 class文件是静态的,想要运行程序,JVM需要将class文件中的信息加载到加载到他的地盘 然后处理他可以处理的数据类型的数据   JVM将这块内存按照功能进行了更细的划分,不过终究是一个…
1.为什么Java可以跨平台 因为有java虚拟机,跨平台是因为字节码即class文件具有平台无关性,java代码会经过java虚拟机转换为字节码 2.class文件的结构 class文件主要是以8位字节码为基本单位的二进制文件,主要的存储方式是以类似于c语言的结构体来存储,其中的两种基本类型为无符号数和表,其中表中又会有其他的表和一些无符号数.就好比结构体中有一些变量,还有一些其他的结构体 class文件的不同位置是固定的,第一个字节码是魔数,紧接着是次版本.主版本.常量池变量数,常量池变量表…