java 32位可用内存_JVM内存不要超过32G
1、将Java Heap Size设置的大于32G会对性能有什么影响?
开门见山的说,结果有几点(这几点其实也是内部关联):
触发JVM的临界值,优化策略Compressed OOPS失效(之前Heap Size在[4G~32G]区间内采用此优化)
由于优化策略失效,同时堆内存>32G,所以JVM被迫使用8字节(64位)来对Java对象寻址(之前4字节(32位)就够了)
通常64位JVM消耗的内存会比32位的大1.5倍,这是因为对象指针在64位架构下,长度会翻倍(事实上当内存到达40-50GB的时候,有效内存才相当于使用Compressed OOPS技术时候的32G内存)
更大的指针在主内存和缓存器(例如LLC, L1等)之间移动数据的时候,会占用更多的带宽
让JVM的GC面临更大压力的指针对象(在实际应用中构建大于12-16G的堆时,若无很好的性能调优与测评,你很容易就会引起一个耗时数分钟的完全GC)
1.1 JVM的OOPS
OOP = “ordinary object pointer” 普通对象指针
启用CompressOops后,会压缩的对象:
每个class的属性指针(静态成员变量)
每个对象的属性指针
普通对象数组的每个元素指针
1.2 JVM的优化策略Compressed OOPS
从JDK 1.6 update14开始,64 bit JVM正式支持了 -XX:+UseCompressedOops ,这个可以压缩指针,起到节约内存占用的新参数。
Compressed OOPS,即大雾的对象压缩技术,压缩引用到32位,以降低堆的占用空间。其伪代码原理就不贴了,
在堆大小在[4G~32G]的时候,这项技术会被触发,在JVM执行时加入编/解码指令,即
JVM在将对象存入堆时编码,在堆中读取对象时解码
内存地址确定公式类似于
Zero Based Compressed OOPS(零基压缩优化)则进一步将基地址置为0(并不一定是内存空间地址为0,只是JVM相对的逻辑地址为0,如可用CPU的寄存器相对寻址) 这样转换公式变为:
从而进一步提高了压解压效率。
使用Zero Based Compressed OOPS后,它的指针不再表示对象在内存中的精确位置,而是表示偏移量。这意味着32位的指针可以引用40亿个对象,而不是40亿个字节。
1.3 Zero Based Compressed OOPS的多种策略
它可以针对不同的堆大小使用多种策略,具体可以 ps + grep查看:
堆小于4G,无需编/解码操作,JVM会使用低虚拟地址空间(low virutal address space,64位下模拟32位)
小于32G而大于4G,使用Zero Based Compressed OOPS
大于32G,不使用Compressed OOPS
2、结论
Compressed OOPS,可以让跑在64位平台下的JVM,不需要因为更宽的寻址,而付出Heap容量损失的代价
它的实现方式是在机器码中植入压缩与解压指令,可能会给JVM增加额外的开销
java 32位可用内存_JVM内存不要超过32G相关推荐
- 32位Windows7上8G内存使用感受+xp 32位下使用8G内存 (转)
32位Windows7上8G内存使用感受+xp 32位下使用8G内存 博客分类: Windows XPWindowsIE企业应用软件测试 我推荐做开发的朋友:赶快加入8G的行列吧....呵呵..超爽 ...
- 32位Windows7上8G内存使用感受
原文地址为: 32位Windows7上8G内存使用感受 为什么要使用8G内存?在国内外各大论坛上,这都是一个有争议的问题.问题的反方论据非常充分: 除了少数专业领域,大多数应用程序不会需要超过1G的内 ...
- 关于笔记本操作系统32位和64位与内存大小的关系
经常有网友问我这样的一个问题,什么是32位与64系统?32位系统与64位的区别等等.围绕目前这些大家比较关系的问题,电脑百事网编辑这里将与大家总结一下,关于32位操作系统与64位操作系统的区别. 首先 ...
- java 32位_Java知识点:创建节约内存的JavaBean
一个Java对象到底有多大? 想要精确计算一个Java对象占用的内存,首先要了解Java对象的结构表示. Java对象结构 一个Java对象在Heap的表示,可以分为三部分: Object Heade ...
- 32M内存 跑linux内核,32位Linux单进程4G内存限制
可用下面代码测试系统能给单进程分配多少用户态内存: 1 #include 2 #include 3 4 int main(){ 5 int MB = 0; 6 while(malloc(1 & ...
- java堆是gc管理_JVM内存管理及GC机制
一.概述 JavaGC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之一,作为Java开发者,一般不需要专门编写内存回收和垃圾清理代码,对内存泄露和 ...
- xp系统支持64g内存_让32位XP支持64G内存
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 代码: int __usercall MiCheckPaeLicense(PLOADER_PARAMETER_BLOCK LoaderBlock){ En ...
- Readyfor4GB帮你的32位Win7用4G内存
虽然现在64位操作系统可以很好的支持大容量内存,但是由于以前少数的软件不能运行在64位的WIN7上,不管多少,毕竟不爽,所以我还是偏爱使用32位的Windows7,课时由于微软当初设置操作系统的时候, ...
- 32位汇编基础_内存_每个应用进程都会有自己独立的4GB内存空间
1.每个应用进程都会有自己独立的4GB内存空间 这句话很多人听起来可能会很矛盾很不解. 例如,我的电脑只有2GB的内存,打开个软件机会占用4GB内存,而我的电脑内存只有2GB,显然不够用,但是为什么程 ...
最新文章
- 智能医疗战场 人工智能如何赋能健康智能终端?
- 北斗词卡(三):带你了解北斗相关的国际组织缩写
- PowerDesigner建立UML序列图
- 节点身份认证(1)DID(Decentralized Identity)系统
- php psr4 控制器调用模型,控制器中调用模型添加数据
- 【Homework】说出 == 和 equals 的区别
- mysql8 安装_MySQL8.x安装使用
- arm linux sms,基于arm处理器的手机短消息加密系统 encryption system for sms based on arm.pdf...
- Ubuntu上安装OpenGL
- 给定一个序列,判断该序列是否为二叉树查找树的后序遍历序列
- 需求调研中要注意的三点
- 张志华 统计机器学习
- Allegro PCB设计中Etch层走线阻焊开窗的一种方法
- 数格子算面积的方法_“数方格”是笨方法吗?
- AutoFill 自动填充生长动画插件
- pygame功能--pygame.cursors鼠标模块
- Java5分钟制作海报
- sqlserver 2012 序列号
- 用懊悔法学习吴恩达机器学习【1】
- 保密工作人人有责——企业保密管理工作实务--闻方老师
热门文章
- 爬取websocket(ws)数据1
- 你知道么?这29个微信表情默默消失了
- 变频电源故障:变频电源IGBT烧坏的原因是什么
- YYHS-吴传之火烧连营(梦回三国系列T3)(trie树)
- 武汉大学计算机专业博士导师,武汉大学计算机学院博士生导师简介:袁志勇
- 解职场困惑不必东奔西走,Leo这里应有尽有(更新至09年8月31日)——Leo文章索引
- 修改Mysql57的root密码
- 活体检测论文研读六:Searching Central Difference Convolutional Networks for Face Anti-Spoofing
- Android高仿iOS Messages聊天气泡
- VNote v2.7.1 绿色版下载