JVM优化之压缩普通对象指针(CompressedOops)与压缩类指针(CompressedClassPointers)
问题描述
java程序部署在服务器(CentOS 64位)运行的时候,经常遭遇OOM,被服务器kill掉java主进程。为谨慎起见,未采用霸道的关闭OOM的方法(Linux内核OOM机制的详细分析),决定先优化JVM,减少内存使用。
解决方法
参照JVM优化之压缩普通对象指针中的描述,在64位机器上,由于64位JVM消耗的内存会比32位的大1.5倍,因为对象指针在64位架构下,长度会翻倍(更宽的寻址)。好在从JDK 1.6 update14开始,64 bit JVM正式支持了 -XX:+UseCompressedOops 这个可以压缩指针,起到节约内存占用的新参数。
参照Enable -XX:+UseCompressedOops By Default中的描述,测试在64位服务器上设置-Xmx32g时,-XX:+UseCompressedOops 和 -XX:+UseCompressedClassPointers会失效,所以最大的JVM堆空间设置为31g,相关测试如下:
测试1:-Xmx32g -XX:+UseCompressedOops 设置未生效
-Xmx31g -XX:+UseCompressedOops 设置生效
[rgf@datanode02 mqpf]$ /home/rgf/java/jdk1.8.0_151/bin/java -server -Xmx32g -XX:+UseCompressedOops -XX:+UseCompressedClassPointers -XX:+PrintFlagsFinal Oops | grep Oops
Java HotSpot(TM) 64-Bit Server VM warning: Max heap size too large for Compressed Oopsbool UseCompressedOops := false {lp64_product}
错误: 找不到或无法加载主类 Oops
[rgf@datanode02 mqpf]$ /home/rgf/java/jdk1.8.0_151/bin/java -server -Xmx31g -XX:+UseCompressedOops -XX:+UseCompressedClassPointers -XX:+PrintFlagsFinal Oops | grep Oopsbool UseCompressedOops := true {lp64_product}
错误: 找不到或无法加载主类 Oops
测试1:-Xmx32g -XX:+UseCompressedClassPointers 设置未生效
-Xmx31g -XX:+UseCompressedClassPointers 设置生效
[rgf@datanode02 mqpf]$ /home/rgf/java/jdk1.8.0_151/bin/java -server -Xmx32g -XX:+UseCompressedOops -XX:+UseCompressedClassPointers -XX:+PrintFlagsFinal Oops | grep Pointers
Java HotSpot(TM) 64-Bit Server VM warning: Max heap size too large for Compressed Oopsbool UseCompressedClassPointers := false {lp64_product}
错误: 找不到或无法加载主类 Oops
[rgf@datanode02 mqpf]$ /home/rgf/java/jdk1.8.0_151/bin/java -server -Xmx31g -XX:+UseCompressedOops -XX:+UseCompressedClassPointers -XX:+PrintFlagsFinal Oops | grep Pointersbool UseCompressedClassPointers := true {lp64_product}
错误: 找不到或无法加载主类 Oops
JVM优化之压缩普通对象指针(CompressedOops)与压缩类指针(CompressedClassPointers)相关推荐
- java 指针 地址压缩_JVM优化之压缩普通对象指针(CompressedOops)
通常64位JVM消耗的内存会比32位的大1.5倍,这是因为对象指针在64位架构下,长度会翻倍(更宽的寻址). 对于那些将要从32位平台移植到64位的应用来说,平白无辜多了1/2的内存占用,这是开发者不 ...
- java 压缩oop_JVM优化之压缩普通对象指针(CompressedOops)
通常64位JVM消耗的内存会比32位的大1.5倍,这是因为对象指针在64位架构下,长度会翻倍(更宽的寻址). 对于那些将要从32位平台移植到64位的应用来说,平白无辜多了1/2的内存占用,这是开发者不 ...
- 菜鸟教程JVM优化,看一篇就够了!
yong gc 的触发时机 当要分配新对象,但新生代edent区不足 将edent区和suvivor区的存活对象拷贝到另外一个survivor区 1)内存充足则,没事 2)如果内存不足,则存活对象直接 ...
- 虚析构函数? vptr? 指针偏移?多态数组? delete 基类指针 内存泄漏?崩溃?...
五条基本规则: 1.如果基类已经插入了vptr, 则派生类将继承和重用该vptr.vptr(一般在对象内存模型的顶部)必须随着对象类型的变化而不断地改变它的指向,以保证其值和当前对象的实际类型是一致的 ...
- 将派生类指针赋值给基类的指针
除了可以将派生类对象赋值给基类对象(对象变量之间的赋值),还可以将派生类指针赋值给基类指针(对象指针之间的赋值).我们先来看一个多继承的例子,继承关系为: #include <iostream& ...
- 静态联编,动态联编,类指针之间的关系,虚函数与多态性,纯虚函数,虚析构函数
1.静态联编,是程序的匹配,连接在编译阶段实现,也称为早期匹配.重载函数使用静态联编. 2.动态联编是指程序联编推迟到运行时进行,所以又称为晚期联编.switch语句和if语句是动态联编的例子. #i ...
- 基类指针和子类指针相互赋值
首先,给出基类animal和子类fish [cpp] view plaincopy print? //================================================= ...
- JVM优化系列-String对象在虚拟机中的实现
导语 String字符串在是各种编程语言中都是重头戏.各种语言中对字符串的操作都是进行有特殊化的处理,例如在C语言中根本没有字符串这个概念,在C语言中的字符串是用字符数组来表示的.在Java中,S ...
- (五)JVM成神路之对象内存布局、分配过程、从生至死历程、强弱软虚引用全面剖析
引言 在上篇文章中曾详细谈到了JVM的内存区域,其中也曾提及了:Java程序运行过程中,绝大部分创建的对象都会被分配在堆空间内.而本篇文章则会站在对象实例的角度,阐述一个Java对象从生到死的历程.J ...
- 多核服务器的JVM优化选项(转载)
原文链接 现在多核CPU是主流.利用多核技术,可以有效发挥硬件的能力,提升吞吐量,对于Java程序,可以实现并发垃圾收集.但是Java利用多核技术也带来了一些问题,主要是多线程共享内存引起了.目前内存 ...
最新文章
- 【php增删改查实例】第十七节 - 用户登录(1)
- NDKJNI Android 相关资料整理(四)
- 为了杀蚊子,这位博士用树莓派DIY了一把激光枪,网友:伤到人怎么办?
- Protocol Buffer基本语法
- delphi7注册码
- 【腾讯面试题】MySQL常用数据库引擎
- 千万千万不要运行的 Linux 命令
- 视图加载时自动执行铵钮事件
- iOS开发之企业级账号的使用注意的坑
- C-snowflake uuid 生成器
- 第二章计算机应用基础试题答案,职中计算机应用基础第二章测试题及答案.doc...
- 基于FFmpeg的编解码器设计实现方案
- 自动驾驶中车辆的如何使用点云定位?
- 在没有原始数据的情况下, 我把列线图转换成了网页计算器
- 永中office linux卸载,安装永中Office for linux
- 热力学分布用matlab,matlab在热物理学中的应用.doc
- PHP MySQL 连接数据库
- 学习Emacs系列教程
- 2022年12月编程语言排行榜公布!
- wdcp mysql configure error_install Error: mysql configure err
热门文章
- import * as x from 'xx' 和 import x from 'xx'
- HP喷墨打印机墨盒清零
- OS X桌面自动化神器:Hammerspoon for Mac
- amd cpu安装osx 10.9.2(同样适应intel构架)
- 如何用od去手动脱壳
- VMware安装流畅系统Chrome OS以及国产系统FedyOS(基于Chrome OS的二次开发)
- java 无锁并发_高并发情况下怎样尽量实现无锁编程
- java ftl_.ftl文件 是什么文件 freemaker
- 计算机技术与软件考试高级难么,计算机技术与软件专业技术资格考试高级哪个好考...
- api调用实例python_基于Python的词典api调用代码实例