通常64位JVM消耗的内存会比32位的大1.5倍,这是因为对象指针在64位架构下,长度会翻倍(更宽的寻址)。 对于那些将要从32位平台移植到64位的应用来说,平白无辜多了1/2的内存占用,这是开发者不愿意看到的。 幸运的是,从JDK 1.6 update14开始,64 bit JVM正式支持了 -XX:+UseCompressedOops 这个可以压缩指针,起到节约内存占用的新参数。 什么是 OOP ?

OOP = “ordinary object pointer” 普通对象指针。

启用CompressOops后,会压缩的对象: • 每个Class的属性指针(静态成员变量) • 每个对象的属性指针 • 普通对象数组的每个元素指针

当然,压缩也不是万能的,针对一些特殊类型的指针,JVM是不会优化的。 比如指向PermGen的Class对象指针,本地变量,堆栈元素,入参,返回值,NULL指针不会被压缩。 CompressedOops的原理

原理,解释器在解释字节码时,植入压缩指令(不影响正常和JVM优化后的指令顺序)。 具体逻辑是,当对象被读取时,解压,存入heap时,压缩。

压缩指令伪码

! int R8; oop[] R9; // R9 is 64 bits ! oop R10 = R9[R8]; // R10 is 32 bits ! load compressed ptr from wide base ptr: movl R10, [R9 + R8<<3 + 16] ! klassOop R11 = R10._klass; // R11 is [...]

java 指针 地址压缩_JVM优化之压缩普通对象指针(CompressedOops)相关推荐

  1. RLE压缩及优化--图片压缩

    RLE压缩及优化--图片压缩 分类: 开发经验以及优化 2005-03-23 17:55 535人阅读 评论(0) 收藏 举报 简单的说RLE压缩就是将一串连续的相同数据转化为特定的格式达到压缩的目的 ...

  2. java 压缩oop_JVM优化之压缩普通对象指针(CompressedOops)

    通常64位JVM消耗的内存会比32位的大1.5倍,这是因为对象指针在64位架构下,长度会翻倍(更宽的寻址). 对于那些将要从32位平台移植到64位的应用来说,平白无辜多了1/2的内存占用,这是开发者不 ...

  3. printf 指针地址_c语言入门 第十四章指针

    我们之前研究的数据类型, 语句, 函数等等,这些内容可以认为是编写程序的基础,除了c语言之外,在其他的编程语言当中也会有相似的内容 我们接下来要研究的指针,可以认为是c语言独有的特性,学会如何的使用指 ...

  4. C++指针地址内存,数据结构,文件操控

    该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105043481 指 ...

  5. C++类和对象的使用之对象指针

    类和对象的使用之对象指针 对象指针的一般概念 对象指针:指向类的成员的指针.在C++中,可以说明指向类的数据成员和成员函数的指针. 对象指针遵循一般变量指针的各种规则:类名 *对象指针名: 对象指针名 ...

  6. java 内存压缩_JVM之指针压缩内存如何设置

    在32位到64位的转变中,人们最大的获益是内存容量.在一个32位的系统中,内存地址的宽度就是32位,这就意味着,我们最大能获取的内存空间是2^32(也就是4G)字节.这个容量明显不够用!在一个64位的 ...

  7. java压缩对象_Java 对象指针压缩

    很久之前就看到过 Java 对象指针压缩这个技术,只是一直没具体想为什么要偏移 3 位,好吧,最近才知道原因是因为大多数 JVM 实现都是采用 8 位对齐,所以二进制位中的后三位都是 0. Let's ...

  8. 【Android 内存优化】Android 工程中使用 libjpeg-turbo 压缩图片 ( 初始化压缩对象 | 打开文件 | 设置压缩参数 | 写入压缩图像数据 | 完成压缩 | 释放资源 )

    文章目录 一.使用 libjpeg-turbo 压缩图片流程 二.初始化 JPEG 压缩对象 三.打开文件 四.设置压缩参数 五.开始压缩 六.循环写入压缩数据 七.完成图片压缩及收尾 八.libjp ...

  9. 数据结构与算法Java(二)——字符串、矩阵压缩、递归、动态规划

    不定期补充.修正.更新:欢迎大家讨论和指正 本文以数据结构(C语言版)第三版 李云清 杨庆红编著为主要参考资料,用Java来实现 数据结构与算法Java(一)--线性表 数据结构与算法Java(二)- ...

最新文章

  1. 实现AGI,强化学习就够了?Sutton:奖励机制足够实现各种目标
  2. java定义全局变量_矮油,你知道什么是 Java变量的作用域 嘛?
  3. 每日求一录~20170704
  4. 在yuv域如何降低画面亮度_家庭影院投影机错误地调节了亮度和对比度会得到怎么样的画面?...
  5. python项目代码量_python统计项目代码行数
  6. ActiveMQ objecmessage 无法调用问题。
  7. 7-35 部落 (10 分)
  8. springcloud maven打包部署
  9. C语言 指针与字符串
  10. 简单的全排列问题(给初学者)
  11. linux脚本打印变量的值,linux利用read命令获取变量中的值
  12. 思科下一代模拟器EVE-NG做一个ASA防火墙简单小实验
  13. 家用电冰箱3C认证检测标准
  14. 浅谈IT隔离电源系统在医疗场所的接地设计研究与应用
  15. 用Java算出百钱买百鸡
  16. 软件测试(测试开发之测试工具开发1——helloworld)
  17. 传奇攻城期间禁止玩家下地图打怪的脚本写法
  18. 统计大写字母出现的次数
  19. bigworld源码分析(3)——dbMgr分析
  20. PMP 粗略量级估算与确定性估算

热门文章

  1. Keras学习手册(一)
  2. Cannot obtain the required interface (IID_IDBCreateCommand) from OLE DB provider OraOLEDB.Oracle...
  3. asp.net中打印指定控件内容
  4. 2017百度之星程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】...
  5. Sublime Text[崇高文本]----最性感的编辑器(程序员必备)
  6. 【C++探索之旅】第一部分第四课:内存,变量和引用
  7. 详细bugfree使用教程网址
  8. 【matlab】随意记录
  9. AIX操作系统基本命令
  10. Linux内核设计的艺术:图解Linux操作系统架构设计与实现原理