java调优随记-java对象大小

在java中,基本数据类型的大小是固定。但是java对象的大小是不固定的,需要通过计算。

在java中,一个空对象(没有属性和方法的对象)在堆中占用8byte,比如 Object obj = new Object();另外栈中存储引用需要占用4byte的空间,总共需要16byte空间(喂,为为什么不是12byte?因为java在内存分配的时候都是以8的倍数在分配)。在java中所有的对象都继承Object,所以不论什么样的对象大小都不能小于8byte。

计算一下下面的对象的大小?

Class ObjectSample {

  int i = 0;

  boolean done = false;

  Object obj;

}

计算过程:obj为8byte,int为4byte,boolean为1byte,栈中对象引用为4byte,总数为17byte。由于java内存分配的时候是以8的倍数分配的,所以最小空间是24byte。

如果i被生命为对象类型,那么i占用的空间就不是4byte了,而是12byte(对象要占8个byte,引用占4byte),实际上根据内存分配规则要占16byte。由此可见基本类型的包装类型占用空间是很大的。

java调优随记-java对象大小,布布扣,bubuko.com

时间: 2024-12-21 00:23:23

java调优随记-java对象大小的相关文章

java调优随记-堆和栈

基础知识: 关于堆和栈,堆和栈是程序运行的关键,关于堆和栈的定义和解释可自行搜索,我比较认可以程序运行过程中他们扮演的角色作为对比的点:堆是存储的单位,而栈是程序运行时的单位.栈解决的是程序的运行问题,即程序如何运行,如何处理数据.堆解决的是存储问题,即数据存储在哪里,怎么存储. 程序中每启动一个线程就有一个栈与之对应.因为每个线程执行的逻辑不同,所以需要独立的栈来描线程如何运行.而堆是所有线程共享的. 栈之所以是运行时单位,主要是因为栈中保存的都是当前线程中,包括局部变量,程序运行状态和方法返

Java调优

Java调优经验谈 对于调优这个事情来说,一般就是三个过程: 性能监控:问题没有发生,你并不知道你需要调优什么?此时需要一些系统.应用的监控工具来发现问题. 性能分析:问题已经发生,但是你并不知道问题到底出在哪里.此时就需要使用工具.经验对系统.应用进行瓶颈分析,以求定位到问题原因. 性能调优:经过上一步的分析定位到了问题所在,需要对问题进行解决,使用代码.配置等手段进行优化. Java调优也不外乎这三步. 此外,本文所讲的性能分析.调优等是抛开以下因素的: 系统底层环境:硬件.操作系统等 数据

Java性能调优_深入Java程序性能调优(并行开发、JVM调优)

深入Java程序性能调优(阿姆达尔定律.缓存组件.并行开发.线程池.JVM调优)课程讲师:special课程分类:Java核心适合人群:初级课时数量:33课时更新程度:完成用到技术:阿姆达尔定律.缓存组件.并行开发.线程池.JVM调优涉及项目:模式在实际开发中运用深入Java程序性能调优下载: http://pan.baidu.com/s/1ntn0ZTB 密码: ijluJava性能调优:国内关于Java性能调优的课程非常少,如此全面深入介绍Java性能调优,北风算是独家,Special讲师,

如何调优JVM - 优化Java虚拟机(大全+实例)

堆设置 -Xmx3550m:设置JVM最大堆内存 为3550M. -Xms3550m:设置JVM初始堆内存 为3550M.此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存. -Xss128k:设置每个线程的栈 大小.JDK5.0以后每个线程栈大小为1M,之前每个线程栈大小为256K.应当根据应用的线程所需内存大小进行调整.在相同物理内存下,减小这个值能生成更多的线程.但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右. -Xmn2g:

Java调优之jvm和线程的内存分析

这几天因为自己开发的一个网站在768M内存的机器上撑不起100多个用户的运行,因为每个用户启用功能后,系统将为每个用户分配8个左右的独立线程,我的这篇文章http://www.mzone.cc/article/311.html也有介绍的.在内存小的机器上经常出现的问题就是Cann't allocate memory和OutOfMemoryError错误,这个要从jvm的内存结构来进行分析了.在jvm内存调整过程中,我们经常使用的参数就是: -Xms 为jvm启动时分配的内存,比如-Xms200m

Java调优知识汇总

查看java进程运行状况jps -lvm 查看java默认堆大小 java -XX:+PrintFlagsFinal | grep MaxHeapSize eclipse调试设置vm参数 在项目上右键,依次点击“Debug As ”-> “Debug Configurations ”,在Arguments 参数中的“VM arguments: ”中填入如下值即可. -Xms64m -Xmx128m 查看vm参数 public class TestMemory { /** * @param arg

java调优参数记录

java -server -Xms1024m -Xmx2048m -XX:+UseParallelGC -XX:+UseG1GC -XX:ParallelGCThreads=4 -XX:+UseParallelOldGC -XX:+UseAdaptiveSizePolicy -Xms:初始堆大小 -Xmx:最大堆大小 -XX:+UseParallelGC:选择垃圾收集器为并行收集器.此配置仅对年轻代有效. -XX:ParallelGCThreads=4:配置并行收集器的线程数,即:同时多少个线程

Android性能调优:记一次解决OOM的经历

OOM OOM(Out Of Memory)是Android应用开发中相信每个人都遇到过的问题,而OOM在crash log中的stack trace一般没有实际意义,因为是在分配内存的时候才会抛出OOM异常,而这个时候的stack trace和OOM的原因没有任何关系.所以OOM问题的定位和分析就需要多花费一些功夫. 下面,我就结合一个例子,来讲讲怎么定位OOM问题. 问题 在程序员们把代码写完,基本流程测试无误,准备要发布的时候,云测的结果却是:一大波OOM异常.没办法,只好重新打开电脑定位

Java GC 专家系列3:GC调优实践

本篇是”GC专家系列“的第三篇.在第一篇理解Java垃圾回收中我们学习了几种不同的GC算法的处理过程,GC的工作方式,新生代与老年代的区别.所以,你应该已经了解了JDK 7中的5种GC类型,以及每种GC对性能的影响. 在第二篇Java垃圾回收的监控中介绍了在真实场景中JVM是如何运行GC,如何监控GC数据以及有哪些工具可用来方便进行GC监控. 在本篇中,我将基于真实的案例来介绍一些GC调优的最佳选项.写本篇文章时,我假设你已经理解了前两篇的内容.为了深入理解本部分内容,你最好先浏览一下前两篇的内