java堆结构和垃圾回收】的更多相关文章

JVM内存结构和垃圾回收一.JVM垃圾收集算法1.引用计数算法 每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收. 此方法简单,无法解决对象互相循环引用的问题,还有一个问题是如何解决精准计数.2.根搜索算法 从GC Root开始向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Root没有任何引用链相连时, 则证明此对象是不可用的,不可达对象.在java语言中,GC Root包括: 虚拟机栈中引用的对象 方法区中类静态属性实体引用的对象 方法区中常…
http://www.cnblogs.com/whgw/archive/2011/09/29/2194997.html Java内存: 1.堆内存:基本类型的变量和对象的引用变量. 2.栈内存:由new创建的对象和数组.     在堆中产生了一个数组&对象后,还可以在栈中定义一个特殊的变量,这个变量的取值等于数组&对象在堆内存中的首地址,在栈中这个特殊的变量就变成了数组&对象的引用变量,可以使用栈内存中的应用变量来访问堆中的数组&对象.     引用变量在程序运行到作用域外…
版权声明:本文为博主原创文章,未经博主允许不得转载 一.概述 相比起C和C++的自己回收内存,JAVA要方便得多,因为JVM会为我们自动分配内存以及回收内存. 在之前的JVM 之内存管理 中,我们介绍了JVM内存管理的几个区域,其中程序计数器以及虚拟机栈是线程私有的,随线程而灭,故而它是不用考虑垃圾回收的,因为线程结束其内存空间即释放. 而JAVA堆和方法区则不一样,JAVA堆和方法区时存放的是对象的实例信息以及对象的其他信息,这部分是垃圾回收的主要地点. 二.JAVA堆垃圾回收 垃圾回收主要考…
前言:        我们在运行程序时,有时会碰到内存溢出(OutOfMemoryError)的问题,为了解决这种问题,我们有必要了解JVM的内存结构和垃圾回收机制. 正文: 1.JVM堆内存结构         JVM主要管理两种类型的内存,堆内存和非堆内存.         "java虚拟机具有一个堆,堆是运行时数据区域,所有类实例和数组的内存均从此分配,堆是java虚拟机启动时创建的",对内存就是代码可及的地方.        "java虚拟机除堆外的内存称为非堆内存&…
看了很多java内存管理的文章或者博客,写的要么笼统,要么划分的不正确,且很多文章都千篇一律.例如部分地方将jvm笼统的分为堆.栈.程序计数器,这么分太过于笼统,无法清晰的阐述java的内存管理模型:部分地方将jvm分为堆.栈.程序计数器.常量池.方法区,这么分,很全面,但是过于混乱,因为这些区域之间存在并列和包含关系,而最近再次刷<Java Thinking>这本书的时候,从新学习了关于内存模型的内容.基于上述原因,我决定来谈谈jvm虚拟机的内存划分. 至于垃圾回收机制,个人觉得应该和内存管…
Java基础教程:垃圾回收 垃圾回收 垃圾回收(Garbage Collection,GC),顾名思义是释放垃圾占用的空间,防止内存泄漏.有效的使用可以使用的内存,对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收. 认定垃圾时有两种主要算法:引用计数法.可达性分析算法. 引用计数法 引用计数法(Reachability Counting)是通过在对象头中分配一个空间来记录该对象被引用的次数(Reference Count).如果该对象被其他对象引用,则它的引用计数就加一,如果一个删除对…
1.类与对象的关系类是对一类事务的统称,是抽象的,不能拿来直接使用,比如汽车,没有具体指哪一辆汽车对象是一个具体存在的,看的见,摸得着的,可以拿来直接使用,比如我家的那辆刚刚买的新汽车,就是具体的对象对象是根据类这个模板创建出来的,类里面有哪些特性或者功能对象里面也有,多不得,少不得 2.new 一个对象做了哪些事情?Person person = new Person();new是一个运算符(1)在内存中开辟一块合适大小的空间(2)在这个空间里创建对象(3)调用这个对象的构造函数(4)返回这个…
<深入理解 Java 虚拟机>学习 -- 垃圾回收算法 1. 说明 程序计数器,虚拟机栈,本地方法栈三个区域随线程而生,随线程而灭,这几个区域的内存分配和回收都具备确定性 Java 堆和方法区这部分内存的分配和回收都是动态的,垃圾收集器所关注的是这部分内存 新生代和老年代 Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象. 在 Java 中,堆被划分成两个不同的区域:新生代 ( Young ).老年代 ( Old ).新生代 ( Young ) 又被划分为三…
Java其实不支持垃圾回收.如果真的支持的话,大多数Java程序在运行的一开始就应该把程序本身删除,因为这些程序本身就是垃圾.   // TODO: This is a 分割线. Please no modify this line.   某公司有个老MFC程序员,10年前C++和MFC横扫千军的时候风光无限.如今改用Java.在他的领导下,他和他的部下们写Java程序还沿用C++的匈牙利命名法.如下: class CBookRecord { private String m_strName;…
翻看电脑的文件夹,无意看到了9月份在公司做的一次分享,浏览了一下"婆婆特",发现自己在ppt上的写的引导性问题自己也不能确切的回答出来,哎,知识这东西,平时不常用的没些日子就生疏了.于是,本小白决定把他整理下来,不敢班门弄斧,对于入门的同学可以快速了解虚拟机的大概,有错误的地方请批评指正. 一.java虚拟机的内存结构 方法区:线程共享,存放已被虚拟机加载的常量,静态变量,类信息,即时编译后的代码等数据.   前不久有个同事聊天的时候说起他们也做了个关于虚拟机的分享,顺便考考我,他问我…