- 浏览: 3010606 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (893)
- android (110)
- iphone (198)
- java (79)
- JavaScript手册-目录 (9)
- JavaScript手册-Array (19)
- JavaScript手册-Boolean (5)
- JavaScript手册-Date (50)
- JavaScript手册-Math (30)
- JavaScript手册-Number (14)
- JavaScript手册-RegExp (7)
- JavaScript手册-String (38)
- JavaScript手册-全局函数 (8)
- JavaScript实用脚本 (7)
- Others (21)
- java-jpcap (7)
- java-thread (1)
- ibm文章 (3)
- classloader (2)
- java-filter (2)
- 运行环境 (33)
- java-正则 (2)
- oracle (1)
- linux-shell (26)
- wap (1)
- sqlite (3)
- wow (1)
- jvm (1)
- git (5)
- unity3d (29)
- iap (2)
- mysql (23)
- nginx (14)
- tomcat (9)
- apache (2)
- php (1)
- ubuntu (40)
- rsa (1)
- golang (21)
- appstore (5)
- sftp (2)
- log4j (2)
- netty (18)
- 测试工具 (6)
- memcache (5)
- 设计模式 (1)
- centos (8)
- google_iab (5)
- iOS专题 (4)
- mac (10)
- 安装配置帮助手册 (2)
- im4java_graphicsmagick (5)
- inotify-tools (1)
- erlang (6)
- 微信支付 (1)
- redis (8)
- RabbitMQ (5)
最新评论
-
heng123:
Netty视频教程https://www.douban.com ...
netty4.0.23 初学的demo -
maotou1988:
使用Netty进行Android与Server端通信实现文字发 ...
netty4.0.23 初学的demo -
码革裹尸:
非常感谢,正好用上
android 呼入电话的监听(来电监听) -
rigou:
提示的/222.177.4.242 无法链接到ip地址,是什 ...
通过 itms:services://? 在线安装ipa ,跨过app-store -
duwanbo:
GridView与数据绑定
引用
申明:本篇属于转载,原文地址 http://blog.chinaitlab.com/html/14/1372714-166017.html
感谢原文作者为我们提供这么好的文章。有转载的朋友要注明以上原文地址,谢谢!
感谢原文作者为我们提供这么好的文章。有转载的朋友要注明以上原文地址,谢谢!
Java的一个重要优点就是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收,程序员不需要通过调用函数来释放内存。因此,很多程序员认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或 JVM的问题。其实,这种想法是不正确的,因为Java也存在内存泄露,但它的表现与C++不同。
在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点,首先,这些对象是可达的,即在有向图中,存在通路可以与其相连;其次,这些对象是无用的,即程序以后不会再使用这些对象。如果对象满足这两个条件,这些对象就可以判定为Java中的内存泄漏,这些对象不会被GC所回收,然而它却占用内存。
在C++中,内存泄漏的范围更大一些。有些对象被分配了内存空间,然后却不可达,由于C++中没有GC,这些内存将永远收不回来。在Java中,这些不可达的对象都由GC负责回收,因此不需要考虑这部分的内存泄露。
注意事项:
1.最基本的建议是尽早释放无用对象的引用。如:
//…… A a = new A(); //应用a对象 a = null; //当使用对象a之后主动将其设置为空 //…。
注:如果a 是方法的返回值,不要做这样的处理,否则你从该方法中得到的返回值永远为空,而且这种错误不易被发现、排除
2.尽量少用finalize函数。它会加大GC的工作量。
3.如果需要使用经常用到的图片,可以使用soft应用类型。它尽可能把图片保存在内存中
4.注意集合数据类型,包括数组、树、图、链表等数据结构,这些数据结构对GC来说,回收更为复杂。
5.尽量避免在类的默认构造器中创建、初始化大量的对象,防止在调用其自类的构造器时造成不必要的内存资源浪费
6.尽量避免强制系统做垃圾内存的回收,增长系统做垃圾回收的最终时间
7.尽量避免显式申请数组空间
8.尽量做远程方法调用类应用开发时使用瞬间值变量,除非远程调用端需要获取该瞬间值变量的值。
9.尽量在合适的场景下使用对象池技术以提高系统性能。
发表评论
-
Java的内存机制
2016-08-22 13:27 4821.Java的内存机制 Java 把内存划分成两 ... -
监听域对象中属性的变更的监听器
2016-07-18 19:06 1755监听域对象中属性的变更的监听器 域对象中属性 ... -
HttpSessionActivationListener
2016-07-18 18:46 649HttpSessionActivationListe ... -
Web容器监听器(实现在线统计人数,踢人)
2016-07-18 10:48 951Web容器监听器(实现在线统计人数,踢人) Servl ... -
HttpSessionBindingListener接口
2016-07-18 10:29 642HttpSessionBindingListene ... -
ServletRequestAttributeListener接口
2016-07-17 22:24 8342. HttpSessionAttribut ... -
Servlet3中异步Servlet特性介绍
2016-07-17 15:50 846Servlet3中异步Servlet特性介绍 ... -
HttpSessionAttributeListener
2016-07-15 17:49 696HttpSessionAttributeListener ... -
使用ServletContextAttributeListener
2016-07-15 16:47 847使用ServletContextAttr ... -
ServletRequestListener
2016-07-15 16:25 601ServletRequestListener接口 ... -
HttpSessionListener
2016-07-15 14:56 635HttpSessionListener接口 M ... -
ServletContextListener 接口
2016-07-15 12:16 628在 Servlet API 中有一个 Se ... -
ReflectASM,高性能的反射
2016-04-29 17:19 961http://www.oschina.net/p/r ... -
Java多线程与静态方法
2016-04-26 11:52 850Java多线程与静态方法 在多线程中使用静态方法会发生什么 ... -
log4j日志输出格式
2016-04-12 20:58 1117log4j日志输出格式 在LOG4J的配置文件中,l ... -
Servlet3.0
2016-04-12 16:58 698一、Servlet3.0介绍 Servlet3 ... -
log4j2 使用详解
2016-04-12 14:14 1466log4j2 使用详解 转载自 Blog of ... -
Eclipse jar打包和命令行运行
2016-04-08 10:44 2963?Eclipse jar打包和命令行运行 第1步: ... -
GRAPHICSMAGICK+IM4JAVA错误Cannot run program "gm": error=2
2015-05-19 15:27 4112在通过 GRAPHICSMAGICK+IM4JAVA ... -
GraphicsMagick安装、实时生成缩略图
2015-05-19 13:39 2424GraphicsMagick安装、实时生成缩略图 ...
相关推荐
本文将详细介绍如何解决Java内存泄漏问题,帮助开发者更好地理解和应对这一挑战。 #### 二、Java内存模型与内存区域 Java虚拟机(JVM)管理着多种不同类型的内存区域,包括堆内存(Heap Memory)、方法区(Method Area)...
opencv3和opencv4多线程内存泄漏问题:以cv::resize函数测试结果为例。 使用中可修复或者可避免内存泄漏:1)使用opencv2的版本;2)在代码中设置修复该问题.
IBM的Java内存泄漏检测工具是专门用于解决Java应用程序中出现的内存管理问题的高效诊断工具。在实际的项目开发和运维过程中,内存泄漏是常见的性能瓶颈,可能导致系统响应变慢,甚至崩溃。IBM的这款工具提供了强大的...
6. **注意事项** - 使用jProfiler7时,确保目标应用程序和jProfiler7在同一网络环境中,或者使用SSH隧道进行远程连接。 - 分析内存问题时,避免在高峰时段进行,以免影响正常服务。 jProfiler7作为一个强大的Java...
Java内存溢出(Out of Memory,OOM)是Java应用程序中常见的问题,会导致程序崩溃或性能急剧下降。HeapAnalyzer是一款强大的工具,专为分析Java应用程序的内存状况,特别是针对内存溢出问题进行诊断。本文将详细介绍...
JProfiler是一款强大的Java性能分析工具,尤其在诊断内存泄漏方面表现出色。本文将深入探讨如何使用JProfiler来识别和解决应用服务器的内存泄漏问题。 一、了解内存泄漏 内存泄漏是指程序在申请内存后,无法释放已...
以下是一些关于"JAVA注意事项"的详细说明: 1. **命名规范**:Java有严格的命名规则,类名应使用驼峰式命名,首字母大写;变量和方法名首字母小写;常量全大写,单词间用下划线分隔。遵循这些规范能提高代码可读性...
理解这两种内存类型的工作原理及其区别对于优化程序性能、避免内存泄漏等问题至关重要。本文将深入探讨Java中堆内存与栈内存的分配机制,并通过对比分析它们之间的差异,帮助读者更好地掌握Java内存管理的核心概念。...
IBM内存分析工具,作为一个专业的Java内存诊断工具,专门针对Java内存溢出(Memory Overflow)和内存泄露(Memory Leak)问题进行深度分析,帮助开发者定位并解决这些问题。本文将详细介绍IBM内存分析工具的功能、...
- 如果应用程序中存在内存泄漏,则需要修复代码中的问题。 2. **PermGen space** - **原因**:永久代(PermGen)用于存储类定义、常量池等信息。当永久代空间不足时,会抛出这种异常。这通常是由于加载了过多的类...
Java开发中的堆外内存使用是优化程序性能... Java堆外内存的使用是提升系统性能的有效手段,但需要谨慎对待,避免内存泄漏和资源浪费。开发者应熟悉其原理,结合具体业务场景,恰当运用并做好监控,才能发挥出其优势。
内存泄漏是计算机编程中一个严重的问题,特别是在大型企业级应用...总的来说,IBM的内存泄漏检测工具是Java开发者诊断和修复内存问题的强大武器。通过熟练掌握这些工具的使用,可以大大提高代码的质量和系统的稳定性。
收机制在Java中,垃圾回收(Garbage Collection, GC)是一项自动管理内存的重要机制,它主要负责识别并清除不再使用的对象,从而释放内存...理解垃圾回收的工作原理和注意事项,对于编写高质量的Java应用程序至关重要。
在使用JNI开发时,理解这些注意事项是至关重要的,能够帮助避免许多潜在的问题和错误,确保本地代码和Java代码之间的无缝交互。同时,使用JNI还涉及到线程安全、错误处理和性能优化等多个方面,这些都是开发者在实践...
**JProfiler内存泄漏查找文档** JProfiler是一款强大的Java性能分析工具,特别...通过深入理解和熟练运用JProfiler,开发者可以有效地管理和优化Java应用程序的内存使用,提高程序性能,减少由于内存泄漏引发的问题。
`readme.txt`通常包含关于如何使用工具、注意事项以及版本信息等内容。`jca.properties.xml`可能包含了JCA工具的配置信息,允许用户根据自己的环境进行定制。`readme.zip`可能是一个包含额外文档或示例的压缩文件,...
- **内存泄露**:由于堆外内存不由JVM管理,因此程序员需要注意关闭不再使用的`DirectByteBuffer`,释放对应的堆外内存,防止内存泄漏。 - **性能监控**:在使用堆外内存时,需要定期监控系统的内存使用情况,确保...
2. LeakCanary:一个开源的内存泄漏检测库,能自动检测并报告内存泄露。 3. HPROF文件分析:通过生成HPROF文件,使用MAT(Memory Analyzer Tool)进行深度分析。 三、优化策略与最佳实践 1. 使用弱引用...