代码案例一: package android.java.oop02; class Student { public int age; public String name; public void show() { System.out.println("age:" + age + " name:" + name); } } public class OopDemo01 { public static void main(String[] args) { Stude…
java对象在内存中的分配 http://blog.csdn.net/qq_30753945/article/details/54974899…
一.对象的内存布局 HotSpot虚拟机中,对象在内存中存储的布局可以分为三块区域:对象头(Header).实例数据(Instance Data)和对齐填充(Padding). 从上面的这张图里面可以看出,对象在内存中的结构主要包含以下几个部分: Mark Word(标记字段):对象的Mark Word部分占4个字节,其内容是一系列的标记位,比如轻量级锁的标记位,偏向锁标记位等等. Klass Pointer(Class对象指针):Class对象指针的大小也是4个字节,其指向的位置是对象对应的C…
在HotspotJVM中,32位机器下,Integer对象的大小是int的几倍? 我们都知道在java语言规范已经规定了int的大小是4个字节,那么Integer对象的大小是多少呢?要知道一个对象的大小,那么必须需要知道对象在虚拟机中的结构是怎样的,来看看Hotsopt中对象在内存中的结构: 在上面这张图里面可以看出,对象在内存中的机构主要包含以下几个部分: Mark Word:对象的Mark Word部分占4个字节,其内容是一系列的标记位,比如轻量级的标记位,偏向锁标记位等等. Class对象…
翻译自这一篇文章 我们知道函数在内存中实现为一个活动记录的栈.我们也知道Java方法在JVM栈区中实现为一个帧栈而Java对象是在堆区进行分配的. Java对象在堆内存中是怎样的呢?一旦对象保存在内存中,就只是字节序列. 那么我们如何知道去哪里查找某个字段?在编译器内部保留一个内部表,来记录每个字段的偏移量. 下面的例子,是关于类"Base"(B)的对象布局.这个类中没有任何方法,类方法在内存中的存储方法会在下一节说到. 如果我们有一个类"Derived"(D)继承…
可达的/可触及的 Java对象呗创建后,如果被一个或者多个变量引用,那就是可达的,即从根节点可以触及到这个对象. 其实就是从根节点扫描,只要这个对象在引用链中,那就是可触及的. 可恢复的 Java对象不再被任何变量引用就进入了可恢复状态. 在回收该对象之前,该对象的finalize()方法进行资源整理,如果在finalize()方法中重新让变量引用该对象,则该对象再次变为可达状态,否则该对象进入不可达状态. 不可达的: Java对象不被任何变量引用,且系统在调用对象的finalize()方法后依…
翻译人员: 铁锚 翻译日期: 2013年11月8日 原文链接:  What do Java objects look like in memory during run-time? 我们知道,函数每次被调用时,在内存中都有自己的活动记录(activation record),称为栈空间(stack). Java 的方法在调用时在 JVM 栈中为其分配一个栈帧(Java栈空间的一个片段),可以称之为方法栈. 原则上,所有对象都在堆空间(Heap)中分配. java对象在内存中是怎样分配的呢? 一旦…
在 Java 程序中,我们拥有多种新建对象的方式.除了最为常见的 new 语句之外,我们还可以通过反射机制.Object.clone 方法.反序列化以及 Unsafe.allocateInstance 方法来新建对象. 其中,Object.clone 方法和反序列化通过直接复制已有的数据,来初始化新建对象的实例字段.Unsafe.allocateInstance 方法则没有初始化实例字段,而 new 语句和反射机制,则是通过调用构造器来初始化实例字段. 以 new 语句为例,它编译而成的字节码将…
前言 一直以来,对java对象大小的概念停留在基础数据类型,比如byte占1字节,int占4字节,long占8字节等,但是一个对象包含的内存空间肯定不只有这些. 假设有类A和B,当new A()或者new B()后,实际占用的java内存是多大呢?下面就对此进行详细分析. static class A{ String s = new String(); int i = 0; } static class B{ String s; int i; } 对象大小分析 如图1,java对象在内存中占用的…
先来看看Java对象在内存中的布局   一 Java对象的内存布局 在HotSpot虚拟机中,对象在内存中的布局分为3个区域 对象头(Header) Mark Word(在32bit和64bit虚拟机上长度分别为32bit和64bit)存储对象自身的运行时数据,包括哈希码,GC分代年龄,锁状态标志,线程持有的锁,偏向线程ID,偏向时 间戳等   类型指针 即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例.但是并不是所有类型虚拟机实现都必须在对象数据上保留类型指针,如果…