Coherence对象压缩以及对象大小计算
1.通过util.zip带的gzip压缩程序
Coherence对象压缩程序如下
|
package coherencetest; import com.tangosol.net.CacheFactory; import java.util.zip.*; public class CompressObject { public static byte[] writeCompressObject(Person object) public static Person readCompressObject(byte[] data_) return(object_); public static void main (String [] args) { Person person = new Person(); writeObjectToFile("zipcompress_before",person); //System.out.println(person); writeBytesToFile("zipcompress_after",compressperson); String personstr = new String(compressperson); NamedCache cache = CacheFactory.getCache("POFSample"); } byte[] a = (byte[]) cache.get("1"); //cache.retrieveCache(); public static void writeObjectToFile(String Filename, Object obj) { try { FileOutputStream outStream = new FileOutputStream("c:/"+Filename); // if file doesnt exists, then create it public static void writeBytesToFile(String Filename, byte[] objs) { try { FileOutputStream outStream = new FileOutputStream("c:/"+Filename); // if file doesnt exists, then create it } |
测试了一下,原来的对象3.96kb,然后经过压缩以后2.01K,还是有减少。
但通过Coherence的visualvm看了一下,发现平均对象大小是1byte.难道coherence只存放对象的指针吗?
2.通过kryo的序列化方法
|
package coherencetest; import com.esotericsoftware.kryo.Kryo; import com.tangosol.dev.assembler.New; import java.io.File; import org.objenesis.strategy.SerializingInstantiatorStrategy; import java.io.IOException; public class kryoCompress { public kryoCompress() { public static void main(String[] args) { Person person = new Person(); writeObjectToFile("person2",person); Kryo kryo = new Kryo(); byte[] scbytes = null; Person backsc =kryodeserialize(scbytes,kryo); } public static byte[] kryocompress(Person object, Kryo kryo) throws IOException { byte[] buffer = new byte[BYTES_LENTH]; Output out = new Output(buffer); kryo.writeObject(out, object); //System.out.println("kryocompress====total:"+out.total()); return out.toBytes(); } public static Person kryodeserialize(byte[] bytes,Kryo kryo) { try { input = new Input(bytes); return (Person)kryo.readObject(input, Person.class); } public static void writeObjectToFile(String Filename, Object obj) { try { FileOutputStream outStream = new FileOutputStream("c:/"+Filename); // if file doesnt exists, then create it public static void writeBytesToFile(String Filename, byte[] objs) { try { FileOutputStream outStream = new FileOutputStream("c:/"+Filename); // if file doesnt exists, then create it } |
测试了一下,原来标准的3.96K的对象,经过kryo序列化后变成了3.01K.可见应该只是序列化上的优化,压缩率比较小.
计算Coherence对象大小的程序
另外附上一个计算coherence对象大小的程序
|
package coherencetest; import java.text.DecimalFormat; import javax.management.MBeanServer; import com.tangosol.net.CacheFactory; import java.io.IOException; import javax.management.MBeanServerConnection; public class CalculateTheSizeOfPeopleCache { @SuppressWarnings({ "unchecked", "rawtypes" }) // Enable JMX support in this Coherence data grid session... // Create a sample cache just to access the data grid... // Gets the JMX server from Coherence data grid... //MBeanServerConnection jmxServer = getJMXServer(); // Creates a internal data structure that would maintain // Updates the internal data structure with statistic data // Finally... print the objects from the internal data } private class Statistics { private long unit; public Statistics(String cacheName) { public void incrementUnit(long unit) { public void incrementSize(long size) { public long getUnit() { public long getSize() { public double getUnitInMB() { public double getAverageSize() { public String toString() { } public static void main(String[] args) throws Exception { public static final DecimalFormat FORMAT = new DecimalFormat("###.###"); } |
需要的条件是:
- 不能以Coherence Extend Client的方式连入集群
- 需要开启-Dtangosol.coherence.management.remote=true -Dtangosol.coherence.management=all 参数
- 需要和cluster环境保持一直,生产就是生产,开发就是开发,-Dtangosol.coherence.mode=prod
输出如下:
Cache Statistics of 'POFSample':
- Total Entries of Cache -----> 10001
- Used Memory (Bytes) --------> 10001
- Used Memory (MB) -----------> 0.01
- Object Average Size --------> 1
Coherence对象压缩以及对象大小计算的更多相关文章
- Java对象的内存布局以及对象所需内存大小计算详解
1. 内存布局 在HotSpot虚拟机中,对象的内存布局可以分为三部分:对象头(Header). 实例数据(Instance Data)和对齐填充(Padding). 1) 对象头(Header): ...
- Java对象大小计算
这篇说说如何计算Java对象大小的方法.之前在聊聊高并发(四)Java对象的表示模型和运行时内存表示 这篇中已经说了Java对象的内存表示模型是Oop-Klass模型. 普通对象的结构如下,按64位机 ...
- JVM —— Java 对象占用空间大小计算
零. 为什么要知道 Java 对象占用空间大小 缓存的实现: 在设计 JVM 内缓存时(不是借助 Memcached. Redis 等), 须要知道缓存的对象是否会超过 JVM 最大堆限制, 假设会超 ...
- java对象在内存的大小
前言 一直以来,对java对象大小的概念停留在基础数据类型,比如byte占1字节,int占4字节,long占8字节等,但是一个对象包含的内存空间肯定不只有这些. 假设有类A和B,当new A()或者n ...
- 获取JAVA对象占用的内存大小
介绍两种获取JAVA对象内存大小的方法. 第一种:Instrumentation 简介: 使用java.lang.instrument 的Instrumentation来获取一个对象的内存大小.利用I ...
- [翻译] 编写高性能 .NET 代码--第二章 GC -- 减少大对象堆的碎片,在某些情况下强制执行完整GC,按需压缩大对象堆,在GC前收到消息通知,使用弱引用缓存对象
减少大对象堆的碎片 如果不能完全避免大对象堆的分配,则要尽量避免碎片化. 对于LOH不小心就会有无限增长,但LOH使用的空闲列表机制可以减轻增长的影响.利用这个空闲列表,我们可以在两块分配区域中间找到 ...
- 如何获取一个Java对象所占内存大小
新建一个maven工程 我们先在IDEA中新建一个名为ObjectSizeFetcherAgent的maven工程,如下图: 在maven项目中的pom.xml中新增一个打jar包的插件,如下: &l ...
- 4种方法教你如何查看java对象所占内存大小
摘要:本文讲述4种查看java对象所占内存大小的方法 本文分享自华为云社区<查看java对象所占内存大小>,作者:xiewenci. 计算java对象所占内存大小 1.使用jdk8自带AP ...
- js压缩xml字符串,将xml字符串转换为xml对象,将xml对象转换为json对象
/** * 压缩xml字符串 */ function compressXmlStr(str){ var prefix, suffix; var i = str.indexOf("\r&quo ...
随机推荐
- [HNOI2015]部分题解
Day1 T2 [HNOI2015]接水果 风见幽香非常喜欢玩一个叫做 osu!的游戏,其中她最喜欢玩的模式就是接水果.由于她已经DT FC 了The big black, 她觉得这个游戏太简单了, ...
- 【洛谷 P1437】 [HNOI2004]敲砖块 (DP)
题目链接 毒瘤DP题 因为\((i,j)\)能不能敲取决于\((i-1,j)\)和\((i-1,j+1)\),所以一行一行地转移显然是有后效性的. 于是考虑从列入手.我们把这个三角形"左对齐 ...
- linux下命令源码
一般来说,不同的命令可能隶属于不同的软件包,这样就没有一个地方会有所有命令的源代码.(命令的个数也会与你所安装的软件包有关)但是,一些常用的命令,例如basename cat chgrp chmod ...
- 【linux】kill ;杀死某一用户下的所有进程
[linux]kill :杀死某一用户下的所有进程 https://my.oschina.net/u/347414/blog/600854
- OpenCV——Mat、CvMat、IplImage类型浅析【转】
OpenCV中常见的与图像操作有关的数据容器有Mat,cvMat和IplImage. 一.Mat类型:矩阵类型,Matrix. 在openCV中,Mat是一个多维的密集数据数组.可以用来处理向量和矩阵 ...
- net core服务器缺包,如何在线安装?
Install -package命令不行. 下面命令也不行.求助大家,怎么安装?
- k8s的存储Volume
1.Volume简介 我们经常会说:容器和 Pod 是短暂的.其含义是它们的生命周期可能很短,会被频繁地销毁和创建.容器销毁时,保存在容器内部文件系统中的数据都会被清除. 为了持久化保存容器的数据,可 ...
- [BZOJ2553][BeiJing2011]禁忌 dp+AC自动机+矩阵快速幂
2553: [BeiJing2011]禁忌 Time Limit: 20 Sec Memory Limit: 128 MBSec Special JudgeSubmit: 1206 Solved ...
- Ubuntu 16.04下开启Mysql 3306端口远程访问
原文地址:传送门 0. 前言 网上看到很多开启Mysql远程访问端口,修改的配置文件我都没有找到. 特意查看了我的Linux版本 $ sudo lsb_release -a 显示如下: Distrib ...
- POJ 3264.Balanced Lineup-结构体版线段树(区间查询最值)
Balanced Lineup Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 53721 Accepted: 25244 ...