一:Java技术体系模块图二:JVM内存区域模型1.方法区也称"永久代” 、“非堆”, 它用于存储虚拟机加载的类信息、常量、静态变量、是各个线程共享的内存区域。默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize 和 -XX:MaxPermSize 参数限制方法区的大小。运行时常...
分类:
其他好文 时间:
2014-08-25 19:11:44
阅读次数:
267
虚拟机的体系结构:堆,方法区,栈(stack),本地方法区,pc寄存器。方法区保存的就是一个类的模板,堆是放类的实例的。栈是一般来用来函数计算的。随便找本计算机底层的书都知道了。栈里的数据,函数执行完就不会存储了。这就是为什么局部变量每一次都是一样的。就算给他加一后,下次执行函数的时候还是原来的样子...
分类:
其他好文 时间:
2014-08-20 23:54:23
阅读次数:
247
jvm的垃圾回收主要是针对java堆这块内存空间,因为java的虚拟栈是随着线程的销毁而自动回收的,而方法区的垃圾回收条件极其苛刻。java堆中存放着运行期间的对象实例,随着程序的运行实例越来越多,不回收垃圾就会产生OOM异常,而怎么判断一个对象是否是垃圾呢,下面是几种常用..
分类:
其他好文 时间:
2014-08-19 11:09:05
阅读次数:
197
只有几种情况可以解释这种结果
1.this并不指向son在堆中创建的实例
2.创建对象时内存中使用了其他机制来保证这种结果的生成。
翻看了一下《深入理解Java虚拟机 JVM高级特性与最佳实践》这本书 似乎得出了一些端倪
由此可见当访问成员变量时,检测到父类的成员变量之后程序停止继续寻找。
对于方法,由于其内容存放在方法区内,每个对象的发放应该是通过其自身的this即引用唯一绑定。故就差不多解释的通了。...
分类:
其他好文 时间:
2014-08-18 23:40:53
阅读次数:
414
jvm运行时数据区的简单介绍
JVM所管理的内存分为以下几个运行时数据区:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。
其中本文涉及到的主要有:java虚拟机站(简称java栈),java堆和方法区。
这里简单地普及一下这三种数据区的知识,java栈的读取速度是最快的(紧次与CPU的寄存器,跨平台性比寄存器好,android使用的是寄存器),但是里面...
分类:
其他好文 时间:
2014-08-18 13:09:22
阅读次数:
215
jvm在java程序运行时会将它所管理的内存划分成不同的区域做不同的功能,这并不难以想象。主要有两类结构,即:堆和栈。java堆主要是保存运行时的对象和数组数据,是所有线程共享的内存区域,在堆中有方法区、运行时常量池。方法区是代码的存储区,类、方法数据、方法的字节码、..
分类:
其他好文 时间:
2014-08-13 03:41:56
阅读次数:
170
1:Animal a = new Cat();
1.1:在栈中创建区域,类型为Animal,变量名:a;
1.2:在堆中new Cat();占用一块区域。地址值:[0x3a4]
1.3:spuer()实例化父类Animal。
1.3.1:new Animal();占用一块区域,地址值:0x3ab;
1.3.2:引用着在方法区中初始化[Animal中的所有方法,该引用为:[0x754]]。
1.3.3:将Animal()引用赋给spuer();spuer引用着Animal();
1.4:在...
分类:
编程语言 时间:
2014-08-13 01:19:24
阅读次数:
284
简单讲一下各个区域
程序计数器:当前线程所执行的字节码的行号指示器,循环,线程恢复等基础功能依赖这个计数器完成(线程私有,每一个线程都会有自己单独的一个计数器)。
本地方法栈:与java虚拟机栈相似,不过执行的是native方法。
方法区(包含运行时常量池):各个线程共享的区域,它用于已被虚拟机加载的类信息,常量,静态变量,即时编译器编译后的代码等数据。
java虚拟机栈:也是线程私有的,生命周期与线程相同 每个方法执行时都会创建一个栈帧(一会儿会详细讲到)结构是栈结构,先进后...
分类:
编程语言 时间:
2014-08-11 17:54:52
阅读次数:
315
Java运行时涉及到的区域几个基本概念:1.Java对象 2.Java方法 3.一个编译好的类,以class文件的形式出现4.Java的本地方法 5.线程私有和线程共有一、方法区(永久代) 和 堆(heap) 这两个区域是线程共有的,供所有线程使用。所以,对存放在这两个地方的资源进行操作...
分类:
编程语言 时间:
2014-08-02 18:04:13
阅读次数:
276
要应用GC_ROOT算法,判定某个对象是否会被回收,关键是要确定root。 【 说到GC roots(GC根),在JAVA语言中,可以当做GC roots的对象有以下几种: 1、虚拟机栈中的引用的对象。 2、方法区中的类静态属性引用的对象。 3、方法区中的常量引用的对象。 ...
分类:
其他好文 时间:
2014-08-02 12:35:13
阅读次数:
255