- 浏览: 81238 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (66)
- Html (4)
- j2se (19)
- jsp (1)
- xml (0)
- eclipse (1)
- Linux (7)
- 心情 (13)
- javascript (2)
- db (1)
- javascript常用代码 (1)
- PHP (1)
- spring source (0)
- Spring (0)
- Ibatis (0)
- Memcached (0)
- Ehcache (0)
- freeMarker (0)
- velocity (0)
- UML (0)
- SQL (0)
- DB2 (0)
- Oracle (0)
- Mysql (0)
- Spring Security (0)
- Log4j (0)
- Tomcat (0)
- MongoDB (0)
- Solr (0)
- Spring CXF (0)
- Maven (0)
- JPbm (0)
- Design Pattern (0)
- JVM (0)
最新评论
-
greathjt:
watchpoint等等怎么设置?
eclipse debugger use
GC基本工作原理:
java内存的管理是对象的管理,就是对象的内存的分配和释放 ;
分配对象:一般情况使用new ,或使用类加载器ClassLoader ;
释放对象:将对象的所有引用赋值为null ,让程序不可访问该对象, 该对象”不可达“,gc将回收所有不可达对象。
对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象
增量式GC( Incremental GC )
GC在JVM中通常是由一个或一组进程来实现的,它本身也和用户程序一样占用heap空间,运行时也占用CPU.当GC进程运行时,应用程序停止运行。因此,当GC运行时间较长时,用户能够感到 Java程序的停顿,另外一方面,如果GC运行时间太短,则可能对象回收率太低,这意味着还有很多应该回收的对象没有被回收,仍然占用大量内存。
详解finalize方法:
finalize方法属于Object类中的方法,其修饰符protected,所以所有类都可以访问该方法。由于,finalize函数没有自动实现链式调用,我们必须手动的实现,因此finalize函数的最后一个语句通常是super.finalize()。
根据Java语言规范,JVM保证调用finalize函数之前,这个对象是不可达的,但是JVM不保证这个函数一定会被调用。另外,规范还保证finalize函数最多运行一次。
通常,finalize用于一些不容易控制、并且非常重要资源的释放,例如一些I/O的操作,数据的连接。这些资源的释放对整个应用程序是非常关键的。在这种情况下,程序员应该以通过程序本身管理(包括释放)这些资源为主,以finalize函数释放资源方式为辅,形成一种双保险的管理机制,而不应该仅仅依靠finalize来释放资源。 程序如何与GC进行交互
三种引用类分别为SoftReference、WeakReference和 PhantomReference.通过使用这些引用类,程序员可以在一定程度与GC进行交互,以便改善GC的工作效率。这些引用类的引用强度介于可达对象和不可达对象之间。
SoftReference引用的对象:较强的引用,只有当内存不知时,GC才回收该对象,这些引用对象还能保证在Java抛出OutOfMemory 异常之前,被设置为null.它可以用于实现一些常用图片的缓存,实现Cache的功能,保证最大限度的使用内存而不引起OutOfMemory。
WeakReference引用的对象:GC在进行回收时,需要通过算法检查是否回收Soft引用对象,而对于Weak引用对象,GC总是进行回收。
Phantom 引用的用途较少,主要用于辅助finalize函数的使用
过覆盖Reference的clear()方法,增强资源回收机制的灵活性。
一些Java编码的建议
根据GC的工作原理,我们可以通过一些技巧和方式,让GC运行更加有效率,更加符合应用程序的要求。以下就是一些程序设计的几点建议。
1. 最基本的建议就是尽早释放无用对象的引用。2.尽量少用finalize函数。finalize函数是Java提供给程序员一个释放对象或资源的机会。但是,它会加大GC的工作量,因此尽量少采用finalize方式回收资源。
3.如果需要使用经常使用的图片,可以使用soft应用类型。它可以尽可能将图片保存在内存中,供程序调用,而不引起OutOfMemory.
4.注意集合数据类型,包括数组,树,图,链表等数据结构,这些数据结构对GC来说,回收更为复杂。另外,注意一些全局的变量,以及一些静态变量。这些变量往往容易引起悬挂对象(dangling reference),造成内存浪费。
5.当程序有一定的等待时间,程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。使用增量式GC可以缩短Java程序的暂停时间。
发表评论
-
Java中获取系统环境信息
2013-03-15 07:10 901将 getProperty(String) 方法使用的当前 ... -
Java 编程的动态性
2012-10-11 02:04 0Java 编程的动态性,第 1 部分: 类和类装入 ... -
读《重构》笔记
2009-02-12 01:08 833重构:改善即有代码 重构是一个过程,在不改变即有代码的外在行为 ... -
Object 源码
2008-12-21 12:24 1284Oject 源码: /* * @(#)Object.java ... -
thread 源码
2008-12-21 11:57 1054线程的状态:NEW , RUNNABLE , BLOCKED, ... -
看《告诉你最真实的招聘潜规则》 有感
2008-12-18 09:31 713告诉你最真实的招聘潜规则 http://www.iteye.c ... -
时间管理
2008-12-17 14:20 544积极主动 ; 按计划行事 ; 任务细分----按任务分段- ... -
测试驱动开发 笔记
2008-12-14 17:14 715测试驱动开发是测试作为软件开发过程的中心,它要求在编写任何产品 ... -
集合类
2008-12-12 17:58 676集合类 Set HashSet 优点: 后台 ... -
oracle 基础
2008-12-04 12:54 1385解锁用户:alert user scott acco ... -
think pattern in java 笔记1
2008-11-25 00:40 945模式概念: 模式是帮助 ... -
Linux jdk 安装
2008-10-22 19:54 7781.下载成功后上传至服务器任意目录 ... -
Hibernate对象持久化方法分析
2008-10-19 11:46 1933Hibernate对象持久化方 ... -
编写好的面向对象代码
2008-10-13 11:47 811本文是java.net上的一篇 ... -
Java I/O中的数据编码转换
2008-10-13 11:34 1027作者:Flyingis JDK1.4开始便引入了ja ... -
???Java容器分析--Map
2008-10-13 11:31 840作者:Flyingis标准的Java类库中包含了几种类型的M ... -
Java容器分析--List和Set
2008-10-13 11:26 835作者:Flyingis ... -
Java I/O中的对象序列化
2008-10-13 11:17 784Java对象序列化将那些实现了Serializable接口 ... -
eclipse debugger use
2008-10-11 13:32 1795最基本的操作是:1, 首先在一个java文件中设断点,然后运行 ... -
java信徒齐(七)步走
2008-10-08 16:19 948Java信徒齐(七)步走: 0) ...
相关推荐
通过对GC原理的理解和合理配置,开发者可以有效地管理Java应用的内存使用,提高应用的性能和稳定性。无论是增量式GC还是分代收集策略,都是为了更好地适应不同应用场景的需求,实现最优的内存管理方案。
总的来说,理解Java的GC工作原理对于优化代码性能和解决内存问题至关重要。通过阅读源码、使用分析工具和调整JVM参数,Java程序员能够更深入地掌握GC,从而编写出更加高效和稳定的程序。同时,学习如Apache Mina这样...
Java程序员必须了解GC的工作原理
### 优秀的Java程序员必须了解GC的工作原理 #### 一、GC的基本原理 Java虚拟机(JVM)中的垃圾收集器(Garbage Collector,简称GC)是Java内存管理的关键组成部分。了解GC的工作原理对于优化Java程序至关重要,尤其是在...
深入了解Java GC的工作原理 Java GC(Garbage Collection)是Java虚拟机(JVM)中的一种自动内存管理机制。GC的主要任务是回收垃圾对象,以释放内存空间。下面我们将深入了解Java GC的工作原理。 JVM内存结构 JVM...
Java垃圾回收(GC)是Java编程中至关重要的一个部分,对于任何希望成为优秀Java程序员的人来说,理解其工作原理是必不可少的。GC的主要任务是自动管理内存,尤其是对象的分配和回收,以避免内存泄漏和资源浪费。在...
本指南旨在帮助开发者深入理解Java GC的工作原理,并提供一系列调优策略与实例,以确保Java应用能够高效稳定地运行。 #### Java GC基础知识 垃圾回收是一种自动化的内存管理机制,它负责回收不再使用的对象所占用...
理解GC的基本原理对于优化Java应用的性能至关重要,尤其是在对性能要求较高的场景,如嵌入式系统和实时系统。 GC的基本原理主要涉及到对象的生命周期管理和内存的自动回收。当程序员通过`new`关键字创建一个对象时...
为了理解垃圾收集为什么会暂停JVM,首先需要了解Java中垃圾收集的工作原理。 Java虚拟机提供了多种垃圾收集算法,不同的JVM实现可能会使用不同的垃圾收集策略。理解这些垃圾收集策略对于优化垃圾收集行为,减少应用...
### JAVA内存设置原理详解 在深入探讨JAVA内存设置原理之前,我们先理解一下JVM(Java虚拟机)的内存管理机制。JVM是JAVA运行时环境的核心,它负责执行JAVA字节码,同时管理程序运行时的内存分配与回收。JVM的内存...
GC的基本原理是基于对象的可达性分析。当一个对象不再有任何引用指向它,即成为“不可达”对象,GC就会识别并回收其占用的内存。Java中的内存主要分为堆(Heap)和栈,其中堆存储的是对象实例,而栈存储方法的局部...
在Java编程语言中,垃圾回收(Garbage Collection, GC)是一项至关重要的机制,它自动...通过深入理解GC的工作原理,调整合适的GC策略,以及优化代码,开发者可以提升应用的性能和稳定性,成为一名真正的Java GC专家。
本文将深入探讨Java虚拟机(JVM)中的内存划分、垃圾收集的工作原理以及相关工具的使用。 1. **Java内存区域** - **程序计数器**:每个线程都有一个独立的程序计数器,用于记录当前线程执行的字节码指令地址。 - ...
Java的垃圾回收(Garbage Collection, GC)是一种自动化的内存管理方式,它能够自动识别并释放不再被引用的对象所占用的内存空间,从而避免了程序员手动管理内存带来的各种问题,如内存泄漏等。 ##### 2.2 堆与栈的...
JVM的调优是一个复杂的过程,需要深入了解JVM的工作原理和垃圾回收机制。调优的目的是提高应用程序的性能和稳定性。调优时会用到不同的工具和命令,例如JConsole、VisualVM、JProfiler等监控工具,以及JVM的命令行...
Java虚拟机(JVM)是实现Java程序跨平台运行的关键技术,它的实现原理和工作过程是Java语言能够运行在各种不同硬件平台的基础。JVM的存在使得Java程序员可以编写一次代码,到处运行,这得益于JVM提供的一套平台无关...
本文将深入探讨Java GC的工作原理、类型、过程以及优化策略。 一、Java垃圾回收的起源与目的 在C++等语言中,程序员需要手动管理内存,分配和释放内存空间。而在Java中,引入了垃圾回收机制,自动处理这些任务,...
此外,VisualVM的GC插件还可以帮助开发者理解不同垃圾收集器的工作原理和设置选项。Java提供了多种GC策略,如Serial、Parallel、Concurrent Mark Sweep (CMS) 和G1等,每种策略在不同的场景下有不同的性能表现。通过...