- 浏览: 885511 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (509)
- android (55)
- CSS (23)
- eclipse (25)
- Data Structes and Algorithms (53)
- J2SE (87)
- Java_面试学习_j2se (26)
- java_面试学习_非技术 (13)
- java_gui (2)
- java_设计模式 (27)
- JDBC (10)
- java_web (15)
- hibernate (5)
- Oracle (37)
- Struts2 (7)
- Word-----dos (24)
- Jbpm (3)
- java小技巧 (8)
- math (1)
- flex (12)
- WebService (4)
- 生活 (9)
- 小框架或小语言 (27)
- spring (1)
- 面试~~~软实力 (7)
- jstat的用法 (1)
- jmap (1)
- 数据链路层和传输层的流量控制区别 (1)
- shell (0)
- 财商 (1)
- javascript (0)
- js研究 (1)
- 代码收集 (0)
最新评论
-
海尔群:
http://jingyan.baidu.com/articl ...
android加密 -
完美天龙:
------------------------- ...
asm----字节码操纵 -
houniao1990:
大神,请问 string 类型 定义为 oracle的 cha ...
hibernate注解 -
JamesQian:
Line:103
f.doFilter(msg);
是否需 ...
责任链模式_过滤器模式 -
sacoole:
好评
interview--- 如何从N个数中选出最大(小)的n个数?
内存溢出是指应用系统中存在无法回收的内存或使用的内存过多,最终使得程序运行要用到的内存大于虚拟机能提供的最大内存。 所以我们应该明确:存在内存溢出的因不一定导致内存溢出的果。。。 1。JAVA操作文本文件为什么超过3万行就内存益处啊? PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter(fileName))); //PrintWriter out = new PrintWriter(fileName); //FileOutputStream out = new FileOutputStream(fileName); while (rs.next()) { for (int j = 1; j <= totalColumn; j++) { out.write(rs.getObject(j).toString()); out.write("\t"); } out.write("\n"); out.flush(); } } 我在代码中 写了 out.flush()用来刷新该流的缓冲; 可是当我的记录数超过3W时就报了内存益处的问题了,难道JAVA不能边读边写吗?还是out这个对象随着指向的fileName文件的边大占用内存也大了吗??到底怎么来实现用JAVA写更多的数据而不内存益处呢 答案是:就在while(rs.next()) 当rs.next()时内存不断增大,而不是写流的问题,JAVA的ResultSet真是麻烦,而且ResultSet还不能clone(); 所以记得在做项目的时候,经常要设置:jdbc.setMaxRows(100*10000); //设置能容纳100万行记录-----这个就是防止内存泄露的哈------------------- 内存中加载的数据量过于庞大,如一次从数据库取出过多数据; jdbc.setQueryTimeout(60*30); //设置超时时间是30分钟 2。java中的内存泄露的情况:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景,通俗地说,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一直被引用,即这个对象无用但是却无法被垃圾回收器回收的,这就是java中可能出现内存泄露的情况,例如,缓存系统,我们加载了一个对象放在缓存中(例如放在一个全局map对象中),然后一直不再使用它,这个对象一直被缓存引用,但却不再被使用。 public class Stack { //长生命周期 private Object[] elements=new Object[10]; //当数组容器中没有东西时是无用的,但是无法回收~~elements是短生命周期 private int size = 0; public void push(Object e){ ensureCapacity(); elements[size++] = e; } public Object pop(){ if( size == 0) throw new EmptyStackException(); //这里还是引用了,只是指针变位置变化而已,他确实返回了那个对象,但是他却没有断开那个对象的引用,也就是说有两个地方会持有这个对象的引用,调用pop的地方,和elements中 return elements[--size]; } private void ensureCapacity(){ if(elements.length == size){ Object[] oldElements = elements; elements = new Object[2 * elements.length+1]; System.arraycopy(oldElements,0, elements, 0, size); } } } 上面的原理应该很简单,假如堆栈加了10个元素,然后全部弹出来,虽然堆栈是空的,没有我们要的东西,但是这是个对象是无法回收的,这个才符合了内存泄露的两个条件(必要条件):无用,无法回收。 例子1 public class Bad{ public static Stack s=Stack(); static{ s.push(new Object()); s.pop(); //这里有一个对象发生内存泄露 s.push(new Object()); //上面的对象可以被回收了,等于是自愈了,因为引用被覆盖了 } } 因为是static,就一直存在到程序退出,但是我们也可以看到它有自愈功能,就是说如果你的Stack最多有100个对象,那么最多也就只有100个对象无法被回收其实这个应该很容易理解,Stack内部持有100个引用,最坏的情况就是他们都是无用的,因为我们一旦放新的进取,以前的引用自然消失! 内存泄露的另外一种情况:当一个对象被存储进HashSet集合中以后,就不能修改这个对象中的那些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初存储进HashSet集合中时的哈希值就不同了,在这种情况下,即使在contains方法使用该对象的当前引用作为的参数去HashSet集合中检索对象,也将返回找不到对象的结果,这也会导致无法从HashSet集合中单独删除当前对象,造成内存泄露。 这是属于: 集合类中有对对象的引用,使用完后未清空,使得JVM不能回收; 3。代码中存在死循环或循环产生过多重复的对象实体; 4。启动参数内存值设定的过小;
发表评论
-
jdbc--批处理
2012-06-08 18:15 1138http://jdgnewtouch.iteye.com/bl ... -
jdbc
2012-06-07 20:51 924http://www.iteye.com/topic/6466 ... -
j2se----jdk6---httpServer
2012-06-05 20:42 1424package com.tdt.server.httpse ... -
j2se基础---ThreadLocal
2012-06-02 20:47 1111package cn.itcast.heima2; ... -
获取运行时的堆栈信息
2011-12-11 11:00 2168public class Hi { public st ... -
简说XML的解析方式(DOM,SAX,StAX)
2011-09-30 08:44 945一般来说,解析XML文件存在着两种方式,一种是event-ba ... -
j2se----Java异步socket
2011-07-11 17:10 1446用异步输入输出流编写Socket进程通信程序 在Merlin ... -
j2se----socket的缓冲区讨论
2011-07-08 19:52 1778关于socket的发送缓冲区 ... -
Tomcat的Socket实现:org.apache.tomcat.util.net(一)
2011-07-08 19:12 1929org.apache.tomcat.util.net包的内容都 ... -
翻转句子中单词的顺序
2011-07-07 22:42 1760题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺 ... -
j2se---同步的Map
2011-07-07 20:50 1008顾名思义LinkedHashMap是比HashMap多了一个链 ... -
j2se---同步的Map
2011-07-07 20:48 10Map<String String> map = ... -
asm----字节码操纵
2011-06-30 09:14 3948想通过asm的代码生成来写.class文件至少得了解下面的 ... -
j2se----java中,如何获得用户当前的工作目录
2011-05-11 09:44 1895获得当前路径, get java current dire ... -
j2se-----zip
2011-05-10 09:05 1059private InitData getInitFile( ... -
j2se-----可变参数列表
2011-04-01 10:53 893public static void main(Strin ... -
UML
2010-12-31 09:42 905组合: 一种强聚合 class Bird{ ... -
j2se-----metadata
2010-12-19 17:14 1017DatabaseMetaData的用法 ... -
python------一小时学会
2010-12-08 16:28 1929先上java与python的相互调用 如何在Java中调用Jy ... -
j2ee------download.jsp
2010-12-08 13:39 1124Logger logger = C ...
相关推荐
Java语言在实际应用中充满了各种陷阱,这些陷阱可能在...通过深入理解和实践这些Java陷阱,不仅可以避免在编程中犯错,也能在面试中展现出专业技能,为你的职业生涯加分。不断学习和探索,使你在Java的世界里游刃有余。
在Android开发中,防止内存溢出是一个至关重要的任务,因为Android设备的内存资源相对有限,尤其是在Dalvik虚拟机中,其最大堆大小通常只有16MB。本文将深入探讨Android平台上的内存管理机制,以及如何避免内存泄露...
不正确地使用它们可能导致内存溢出或者运行时错误。 5. **异常处理**:Java强制使用`try-catch-finally`块处理异常,但错误的异常处理策略可能导致程序逻辑混乱,例如不恰当的异常捕获和处理,或者在`finally`块中...
Java编程语言中包含了许多陷阱和细节,这些都是面试官在寻找潜在候选人时经常提出的知识点。以下是一些关于Java面试题的详细解释: 1. **final, finally, finalize的区别**: - `final` 用于声明不可变变量、表示...
- 通常建议不超过2GB,避免内存溢出。 - **3.5.3 特殊场合下JVM参数调优** - 针对不同的应用场景调整JVM参数,如使用G1垃圾回收器。 - **3.5.4 Java完全垃圾回收** - 使用`System.gc()`强制触发垃圾回收,但不推荐...
- 深入理解Java内存模型,特别是在多线程环境下对变量的访问和修改。 考生在准备Java OCA考试时,应重点学习以上知识点,深入理解概念并能够解决实际编程问题。同时,参考指南书中的重点和易错点,对于提高考试通过...
### Java面试中的陷阱详解 #### 一、final, finally, finalize 的区别 1. **final**:在Java中,`final`是一个关键字,用于声明一个不可更改的对象或变量。如果一个类被声明为final,那么它不能被继承;如果一个...
在Java中,进行128的计算时,需要确保变量的类型足够大,比如使用`int`或`long`,以避免数据溢出。如果你尝试将128赋值给一个`byte`类型的变量,编译器会报错,提示你可能的数据溢出。因此,理解字节大小和数据类型...
字符在内存中以Unicode编码存储,因此可以直接用 `char` 变量参与整数运算,或者通过 `(char)intValue` 将整数转换为字符。 7. **字符串转换**: - 使用 `Integer.parseInt()` 或 `Integer.valueOf()` 方法可以将...
了解这些知识有助于分析和解决问题,例如,如何通过JVM参数调整来优化应用性能,或者如何定位和解决内存溢出问题。 工具的使用也是Java开发者必备技能之一。面试官可能询问你是否熟悉常用的开发工具,如IDEA、Git、...
1. **类型转换与数据溢出**:Java中整型数据之间的转换可能导致数据溢出,这在处理数值运算时必须小心。例如,将大整数强制转换为较小类型会导致数据丢失。 2. **自动装箱与拆箱**:Java 5引入了自动装箱和拆箱机制...
- **引用**:指向对象的内存地址。 - **区别**:对象是实际存在的实体,而引用则是对象的别名。 #### 4. 类型参数探究(第345页) - **概念**:在方法签名中使用类类型的参数。 - **应用场景**: - 处理复杂的对象...
理解Java内存模型,合理设置堆大小,避免创建过大的对象,及时清理不再使用的对象,使用WeakReference和SoftReference管理对象,可以帮助防止内存溢出。 以上仅是部分常见的Java Bug模式,实际开发中还会有更多复杂...
Java编程中的十大低级错误是每位开发者应当避免的常见编程陷阱。这些错误不仅影响代码的可读性,还可能导致程序运行时出现异常或性能下降。以下是对这些错误的详细解释和改进建议: 1. **命名不规范**:方法和变量...
大鹏的"JAVA基础易错总结"涵盖了这些重要的知识点,并且可能还揭示了一些鲜为人知的陷阱。通过深入学习和实践,开发者可以避免这些常见错误,提升Java编程的水平。希望这份资料能成为你Java学习旅程中的宝贵财富。
IEEE 754-2019保持与前一版本的向后兼容性,同时增加了新的特性,如半精度(Half-Precision)格式,用于节省内存和提高计算效率,以及四精度(Quad-Precision)格式,用于更高级别的精度需求。 6. **软件支持** ...
当网络设备发生特定事件时,如接口故障、内存溢出等,设备会自动向预设的管理站发送Trap消息,以便管理员能及时了解并处理问题。本文将详细讲解如何使用Java的SNMP4J库来实现SNMP Trap接口,发送这些消息。 首先,...
在Java编程中,"BUG模式"通常指的是程序员在编写代码时容易犯的一些常见错误或陷阱,这些错误可能导致程序运行不正常、性能下降甚至系统崩溃。理解并避免这些BUG模式是提高Java程序质量和效率的关键。本篇文章将深入...
7. Redis缓存策略:包括LFU(Least Frequently Used)、LRU(Least Recently Used)和TTL(Time To Live)等,用于管理内存空间,避免内存溢出。 8. 消息队列:Redis的发布/订阅(Pub/Sub)模式可以作为轻量级的消息...
这些框架的反模式也是重要的学习内容,例如,不合理的Struts配置可能导致性能瓶颈,而滥用Hibernate的懒加载可能导致内存溢出。 "Java培训 J2EE培训 DOTNET培训 - 51培训网.url"进一步表明,这本书不仅适用于有经验...