ITKeyword,专注技术干货聚合推荐

注册 | 登录

【Java】Java内存管理

LZGS_4 分享于 2015-07-30

推荐:java虚拟机内存管理机制(二):了解JVM的内存管理与垃圾回收

Java语言具备GC(垃圾回收)的能力,内存管理不需要应用程序去过问,这很方便。但是,GC是怎么进行的,JVM的内存参数应该怎么调整,如何优化,往往我们不是太清楚

2018阿里云全部产品优惠券(新购或升级都可以使用,强烈推荐)
领取地址https://promotion.aliyun.com/ntms/yunparter/invite.html

     Java内存管理是面试中经常会问到的问题。Java的内存管理其实是指对象 的分配和释放问题。曾经看过这样一句话:“C++程序员觉得内存管理太重要了,所以一定要自己进行管理,而Java程序员觉得内存管理太重要了,一定不能自己管理”。我觉得这句话说得太精辟了。     C++程序员需要显式分配内存,释放内存,而这样常常会引起“内存泄露”。而Java程序员不需要显式分配和释放内存,Java在创建对象的时候会自动分配内存,在对象不再使用的时候释放内存。Java的对象是通过new关键字来创建的,创建时会为每个对象申请内存空间(在堆中),Java的内存释放是由垃圾回收机制(GC)决定和执行的。这样的内存管理机制既方便了程序员,也能够减少内存泄露。但是这样会加重JVM的工作,所以java程序的运行速度比较缓慢。
    什么是内存泄露呢?内存泄露其实就是存在一些被分配的对象,它们不再被使用了,但GC无法回收,它们将一直占用内存。为什么GC不能回收,就要先了解一下Java的垃圾回收机制了。
    Java垃圾回收机制:当对象不再使用时,JVM会自动释放对象所使用的内存。释放内存的原则是对象不再被引用,Java使用软指针(指针不直接指向对象,而是指向对象的引用)来跟踪对象的各个引用。这里有个可达的概念,我们把对象当做有向图的顶点,把引用关系考虑为图的边,

推荐:巩固java(二)----JVM堆内存结构及垃圾回收机制

前言:        我们在运行程序时,有时会碰到内存溢出(OutOfMemoryError)的问题,为了解决这种问题,我们有必要了解JVM的内存结构和垃圾回收机制。 正文:      

有向边从引用对象指向被引用对象。顶点可达的对象就是有效的对象,GC不会进行回收,反之,我们认为这些对象不再被引用,GC将回收这些对象。这个过程程序员不需要参与,可以说对程序员来说是透明的,一般情况下,我们无需显式请求垃圾回收器,因为它是自动运行的,它会不时检查对象的各个引用,回收无应用对象的内存。System类有个静态gc()方法可以运行垃圾回收器,可是它也不能保证能够立即回收对象。另外Java语言其实并不要求JVM一定要有GC,也没有规定GC该如何工作,但是一般JVM都有GC,大部分都用类似的算法去管理内存和执行回收操作。Java的垃圾回收机制是为了所有的Java应用进行服务的,因此任何一个进程都不能命令垃圾回收机制做什么,该怎么做。具体垃圾回收机制大家可以去参考相关的资料。
    内存泄露的原因其实就是“保留下来却永远不再使用的对象引用”,这是因为忘记“释放”先前分配的内存。如果程序保留不再使用的对象应用,自动的垃圾回收器又无法证明这些对象不再被使用,为了保证能够回收对象的内存,通常会显式设置对象为null,或者从集合中移除对象。
    
Author:立礼
Sign:人生不要有太多的幻想,而要有更多的行动。
    

推荐:Java垃圾回收机制与内存泄露问题

1 .垃圾收集算法的核心思想 Java 语言建立了垃圾收集机制,用以跟踪正在使用的对象和发现并回收不再使用(引用)的对象。该机制可以有效防范动态内存分配中可能

     Java内存管理是面试中经常会问到的问题。Java的内存管理其实是指对象 的分配和释放问题。曾经看过这样一句话:“C++程序员觉得内存管理太重要了,所以一定要自己进行管理,而Java程序员觉

相关阅读排行


用户评论

游客

相关内容推荐

最新文章

×

×

请激活账号

为了能正常使用评论、编辑功能及以后陆续为用户提供的其他产品,请激活账号。

您的注册邮箱: 修改

重新发送激活邮件 进入我的邮箱

如果您没有收到激活邮件,请注意检查垃圾箱。