摘要:
直接内存 Direct Memory 不是虚拟机运行时数据区的一部分,也不是《Java 虚拟机规范》中定义的内存区域。 直接内存是在 Java 堆外的、直接向系统申请的内存区间。 来源于 NIO,通过存在堆中的 DirectByteBuffer 操作 Native 内存 类型 传输类型 基于 备注 阅读全文
摘要:
对象实例化内存布局与访问定位 从各自具体的内存分配上来讲 new 的对象放在堆中 对象所属的类型信息是放在方法区的 方法当中的局部变量放在栈空间 这 new 的对象怎么把三块粘合到一起 就是这章的内容了 对象实例化 面试题 美团: 对象在 JVM 中是怎么存储的? 对象头信息里面有哪些东西? **蚂 阅读全文
摘要:
为什么要进行单元测试? 单元测试的目的就在于,当你修改了项目中的其中一部分代码A,可能会影响到其他代码B的逻辑,所以我们在写完代码后需要在每一个代码逻辑上都加上单元测试断言,这样就可以提前判断其他代码的逻辑运行是否符合预期,如果不符合预期,就代表你的修改影响了其他代码的逻辑,不能上传,得保证其他代码 阅读全文
摘要:
方法区 前言 这次所讲述的是运行时数据区的最后一个部分 从线程共享与否的角度来看 ThreadLocal:如何保证多个线程在并发环境下的安全性?典型应用就是数据库连接管理,以及会话管理 栈、堆、方法区的交互关系 下面就涉及了对象的访问定位 Person:存放在元空间,也可以说方法区 person:存 阅读全文
摘要:
堆 堆的核心概念 堆针对一个 JVM 进程来说是唯一的,也就是一个进程只有一个 JVM,但是进程包含多个线程,他们是共享同一堆空间的。 一个 JVM 实例只存在一个堆内存,堆也是 Java 内存管理的核心区域。 Java 堆区在 JVM 启动的时候即被创建,其空间大小也就确定了。是 JVM 管理的最 阅读全文
摘要:
本地方法栈 Java 虚拟机栈于管理 Java 方法的调用,而本地方法栈用于管理本地方法的调用。 本地方法栈,也是线程私有的。 允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的) 如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java 虚拟机将会抛出一个 StackOve 阅读全文
摘要:
本地方法接口 什么是本地方法 简单地讲,**一个 Native Method 是一个 Java 调用非 Java 代码的接囗。**一个 Native Method 是这样一个 Java 方法:该方法的实现由非 Java 语言实现,比如 C。这个特征并非 Java 所特有,很多其它的编程语言都有这一机 阅读全文
摘要:
虚拟机栈 虚拟机栈概述 由于跨平台性的设计,Java 的指令都是根据栈来设计的。不同平台 CPU 架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。 有不少 Java 开发人员一提到 Java 内存结构,就会非常粗粒度地将 阅读全文
摘要:
程序计数器 介绍 JVM 中的程序计数寄存器(Program Counter Register)中,Register 的命名源于 CPU 的寄存器,寄存器存储指令相关的现场信息。CPU 只有把数据装载到寄存器才能够运行。 这里,并非是广义上所指的物理寄存器,或许将其翻译为 PC 计数器(或指令计数器 阅读全文
摘要:
运行时数据区概述及线程 前言 本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段 首先栈、堆与方法区都是在内存中的,都是属于运行时数据区,读入了内存才能被称作运行时。 栈是运行时的单位,而堆是存储的单位。 类似于CPU寄存器和内存的关系,而CPU的架构难以统一,为了跨平台,所以栈 阅读全文