对象的实例化

对象的内存布局

图解

对象的访问定位


句柄访问

好处

reference中存储稳定句柄地址,对象被移动(垃圾收集时移动对象很普遍)时只会改变句柄中实例数据指针即可,reference本身不需要被修改。

直接指针(hotspot采用)

直接内存(Direct Memory)

概述

不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。

直接内存是在Java堆外的、直接向系统申请的内存区间。

来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存

通常,访问直接内存的速度会优于Java堆。即读写性能高。

因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。

Java的NIo库允许Java程序使用直接内存,用于数据缓冲区

也可能导致outofMemoryError异常

由于直接内存在Java堆外,因此它的大小不会直接受限于-xmx指定的最大堆大小,但是系统内存是有限的,Java堆和直接内存的总和依然受限于操作系统能给出的最大内存。

缺点

分配回收成本较高不受

JVM内存回收管理

直接内存大小可以通过MaxDirectMemorysize设置

如果不指定,默认与堆的最大值-xmx参数值一致

案列

package com.fs.method;import java.nio.ByteBuffer;
import java.util.Scanner;public class BufferTest {private static final int BUFFER = 1024 * 1024 * 1024; //1GBpublic static void main(String[] args) {ByteBuffer byteBuffer = ByteBuffer.allocateDirect(BUFFER);System.out.println("直接内存分配完,请求指示! ");Scanner scanner = new Scanner(System.in);scanner.next();System.out.println("直接内存开始释放! ");byteBuffer = null;System.gc();scanner.next();}}

运行后内存占用情况


释放直接内存后的内存占用情况

为什么直接内存读取速度要由于jvm堆的内存

使用IO

读写文件,需要与磁盘交互,需要由用户态切换到内核态。在内核态时,需要内存如右图的操作。
使用IO,见下图。这里需要两份内存存储重复数据,效率低。

使用NIO

使用NIO时,如右图。操作系统划出的直接缓存区可以被java代码直接访问,只有一份。NIo适合对大文件的读写操作。

JVM学习笔记之-对象的实例化,内存布局与访问定位,直接内存(Direct Memory)相关推荐

  1. 第 10 章 对象的实例化内存布局与访问定位

    第 10 章 对象的实例化内存布局与访问定位 1.对象的实例化 大厂面试题 美团: 对象在JVM中是怎么存储的? 对象头信息里面有哪些东西? 蚂蚁金服: 二面:java对象头里有什么 对象实例化 1. ...

  2. java 句柄池_深入理解JVM之Java对象的创建、内存布局、访问定位详解

    本文实例讲述了深入理解JVM之Java对象的创建.内存布局.访问定位.分享给大家供大家参考,具体如下: 对象的创建 一个简单的创建对象语句Clazz instance = new Clazz();包含 ...

  3. JVM---对象的实例化内存布局与访问定位

    对象的实例化内存布局与访问定位 面试题 对象在JVM中是怎么存储的? 对象头信息里面有哪些东西? Java对象头有什么? 从对象创建的方式和步骤开始: 对象创建的方式 new:最常见的方式.单例类中调 ...

  4. 10-对象实例化、内存布局与访问定位

    对象实例化内存布局与访问定位 对象实例化 面试题 对象在JVM中是怎么存储的? 对象头信息里面有哪些东西? Java对象头有什么? 从对象创建的方式 和 步骤开始说 对象创建方式 new:最常见的方式 ...

  5. Java对象的创建、内存布局和访问定位

    在Java运行时数据区中,我们知道了虚拟机内存的概况,本文介绍虚拟机内存中的数据的其它细节,如对象如何创建.如何布局以及如何访问. 基于实用的原则,这里以HotSpot虚拟机和常用的内存区域Java堆 ...

  6. JVM:对象的实例化、内存布局与访问定位

    对象的实例化 创建对象的方式 new关键字 最常见的方式 变形1:Xxx的静态方法(单例模式) 变形2:XxxBuilder/XxxFactory的静态方法 Class的newInstance() 反 ...

  7. 欧尼酱讲JVM(18)——对象实例化内存布局与访问定位

    目录 对象的实例化 创建对象的几种方式 从字节码角度看对象的创建过程 对象创建的六个步骤 第一步:判断对象对应的类是否加载.链接.初始化 第二步:为这个对象分配内存 第三步:处理并发安全问题 第四步: ...

  8. 0x00000000指令引用的内存不能为written_JVM03——对象实例化,内存布局,访问定位...

    从字节码角度看对象的创建过程 public class ObjectTest { public static void main(String[] args) { Object obj = new O ...

  9. java对象实例化内存布局与访问定位

    文章目录 1. 对象实例化方式 2. 对象创建的步骤 3. 对象的内存布局 4. 对象的访问定位 1. 对象实例化方式 通过new的方式,例如 Persion p = new Persion() 通过 ...

最新文章

  1. python构建t检验(Student’s t-test)
  2. [解决方案记录]No module named fused(stylegan2的bug,已更新)
  3. Unity HDRP中的光照烘焙测试(Mixed Lighing )和间接光
  4. RHEL7 USB installation problem and solving
  5. 女朋友在家是怎么利用我的模型的​
  6. 剑指offer(刷题1-10)--c++,Python版本
  7. 股票型基金和期货有什么区别?
  8. 标准C字符和字符串函数
  9. 利用Javacsv实现Java读写csv文件
  10. SAP Client Copy
  11. 怎么卸载apowerrec_如何卸载win10自带的游戏中心
  12. 软件测试难不难?不是计算机专业也能学吗?
  13. Android音频子系统(七)------数字耳机播192KHz音乐卡顿问题解析
  14. 1.函数的结构,调用,传参,形参,实参,args,kwargs,名称空间,高阶函数
  15. dom4j api 详解
  16. python将图片转成灰度图
  17. 实验一.Python安装与开发环境搭建
  18. QQ机器人官方插件加载配置方法【beta2版本】
  19. Google左侧排名优化
  20. 计算机网络管理技术参考文献,报文网络论文,关于计算机网络管理相关技术相关参考文献资料-免费论文范文...

热门文章

  1. step5 . day2 网络编程 基于TPC协议的网络编程流程及API
  2. ES6常用知识总结(20%的知识占80%的份额)
  3. 21.Odoo产品分析 (三) – 人力资源板块(2) – 工时表(1)
  4. 2017软件工程第三次作业--效能分析
  5. NYOJ--1236--挑战密室(第八届河南省程序设计大赛)
  6. python-mysql驱动64位
  7. 夺命雷公狗---PHP开发APP接口---1(手动编写json)
  8. jquery.cookie 使用文档,$.cookie() 文档教程, js 操作 cookie 教程文档。
  9. zabbix搭建并结合mikoomi插件监控hadoop集群
  10. Effective C# 原则50:了解ECMA标准(译)