- 浏览: 899174 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (319)
- Thinking / 反思 (27)
- 我读的技术类图书 (3)
- 我读的非技术图书 (3)
- Java & Groovy (55)
- Ruby/Rails (9)
- Python (10)
- C/C++ (14)
- C# & .net (9)
- 互联网相关技术 (6)
- Database (6)
- Unix/Linux (6)
- WindowsDev (21)
- 工具使用 / Tips (62)
- 编程技术杂谈/咨讯 (6)
- 软工 / 敏捷 / 模式 (6)
- 易筋经 / 各种内功 (3)
- 充电 / 他学科知识 (6)
- 外语学习 (16)
- 我和宝宝的甜蜜生活 (24)
- 八卦 (3)
- 健康 (0)
- 无类别 (0)
- mTogether (4)
- 一页纸 (3)
- SAP (7)
- baby (2)
- abap (2)
- temp (1)
- network (1)
- 生活 (1)
最新评论
-
daliang1215:
收藏一下,好东西。 xp 的快捷键用的非常爽,到win7缺没有 ...
Windows7: 右键任务栏上的一个窗口, 用快捷键c关闭它 -
Alice南京:
感谢
Java GC 监视方法与工具 -
wjason:
今天在excel 2010上面写了一些代码,果然lookup有 ...
Excel 公式: 根据一个单元格的用户输入值, 自动设置另一个单元格的值 -
wjason:
因式分解:http://zh.wikipedia.org/wi ...
教孩子学编程: 数学题1 -
bbls:
不错 找了好久了
VS2010: 在Solution Explorer中,自动关联当前正在编辑的文件
我们的系统有OutOfMemory现象, Liu同学最近又发现了一个原因:Sun JDK 1.4.2_04版本(含以前)的bug,
我们系统另一个OOM的原因参见:Derby: Out Of Memory & Update
对与sun的这个bug我以前一无所知, 有必要记录下来, 学习一下.
Bug现象:
一个线程如果只是new, 而没有start(), 那么该线程不会被垃圾回收,
我们系统使用的一个jar包(日方提供的), 里面有一个api, 功能是去网络上通过snmp协议取一个mib值,
反编译过来发现他有这种"只是new一个线程,并没有start"的问题,
于是系统持续运行就导致了OutOfMemory
另:该bug在jdk5,6 上测试,已经修正.
(艾~这么久的bug我们也能遇到,关于使用底版本的原因我就不另作点评了, 否则又要郁闷了...此处省略1W字^^)
下面这两个链接
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4533087
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4508232
上面这两个链接已经将bug描述得很清楚了, 但是我害怕以后我会找不到这两个链接,
因为现在一些bea的东西我就已经找不到地方了, 所以见bug原因和测试代码抽出如下:
Bug4533087的测试代码:
class ThreadLeak { static MyThread t; public static void main(String[] args) { if ((args.length > 0) && args[0].equals("run")) { System.out.println("Creating and running 10,000 threads..."); for (int i = 0; i < 10000; i++) { t = new MyThread(true); } } else { System.out .println("Creating 10,000 threads, but not running them..."); for (int i = 0; i < 10000; i++) { t = new MyThread(false); } } System.out.println("Running garbage collector..."); System.gc(); System.out.println("Done. Heap size is " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime() .freeMemory())); } } class MyThread implements Runnable { Thread t; public MyThread(boolean bRun) { t = new Thread(this, "MyThread"); if (bRun) { t.start(); } } public void run() { /* NO-OP */ } }
Bug4508232的测试代码:
package thread; // AliveTest.java: program to test theory that Threads which are not started // are not garbage collected // - We create "T" Threads but don't "start" them. The output shows: // a) that creation is fast (compared to -starting- Threads) // b) that memory is garbage collected // c) the Thread ACTIVE count always increases // d) eventually we run out of memory public class AliveTest { public static void main(String[] args) { long t1 = System.currentTimeMillis(); Runtime r = Runtime.getRuntime(); for (int i = 1;; i++) { //OK new T().start(); //OutOfMemory //new T(); if (i % 100 == 0) { System.out.println("Threads created: " + i + ", t: " + (System.currentTimeMillis() - t1) / 1000 + " sec, activeCount: " + Thread.activeCount() + ", Free mem:" + r.freeMemory() / 1000 + " K"); } } } } class T extends Thread { int[] a = new int[10000]; public void run() { a[0] = 1; } }
Bug4533087中对原因的描述:
写道
The reason is that the java.lang.Thread class adds the thread to the thread group in the init() method, which is called from the constructor. It removes the thread from the thread group in the exit() method, which is only called if the thread is run. So if the thread is never run, the thread group still has a reference to the Thread and it will never be garbage collected. And of course any objects which the thread has references to will in turn not be garbage collected.
发表评论
-
使用Java调用Mantis提供的webservice, 获得Mantis数据
2012-06-07 14:58 3204写在前面 如果使用Mantis来管理bug, ... -
Java:取得子网掩码
2010-03-17 11:10 5275这个讨论的起因是最近修改的一个bug, 我们的系统管理了一堆 ... -
用netbeans做GUI:SocketException: Malformed reply from SOCKS server
2010-01-07 16:24 8730最近的项目是由一些不同的软件相互协作组成的(是的,就是说这个系 ... -
Java Class Loader
2009-12-28 19:57 1367Java中有三种ClassLoader 1. Boot ... -
文件监视: C# and Java
2009-06-15 14:34 2756最近我们组的Mr.S同学到别的项目组里面支援C#去了, 我也 ... -
Java: 获得所有线程
2009-03-27 17:13 2142我想在一个时刻查看java中还存在的所有线程, 于是googl ... -
Java GC 监视方法与工具
2009-03-27 15:46 6889项目需要,将gc的监视方法,和gc log的分析工具整理一下, ... -
HttpComponents
2009-02-11 15:56 2770今天要做这样的一件事 ... -
Java documentation in Windows Help format
2009-01-10 17:16 1812.chm格式的java帮助文档查找起来很方便, 常用的库我自己 ... -
SWT Win32 Extension 介绍
2008-10-13 10:52 2708SWT Win32 Extension 这个项目 ... -
Java编码规范
2008-09-26 13:43 1803养成好的编码规范对项目组的好处不用多说~ 我最近在一个维护的项 ... -
Java CSV API
2008-09-24 10:04 7640项目中有一些功能是CSV相关的。新来的一个同事问是用什么写的。 ... -
JFugue - 给我的一个小小的惊喜
2008-09-20 18:32 1384今天看到了这篇博客: 让 Java 轻松乐动起来,使用 JFu ... -
Java "properties文件"编辑器 - eclipse插件
2008-09-16 12:07 2195HomePage: http://propedit.sourc ... -
使用java修改windows注册表
2008-08-06 15:04 4556项目中用到,整理如下: 方法1:利用java.util.p ... -
Eclipse插件开发中如何获得classpath下面的资源
2008-07-21 19:38 3114在我的脑海里面有好几个话题需要记录一下,而正因为好多,我现在已 ... -
cactus eclipse plugin is now unavailable!
2008-07-09 14:28 1446今天要下载个apache cactus的eclipse plu ... -
http://www.groovyland.net/pptshare/
2008-07-09 13:00 1329http://www.groovyland.net/pptsh ... -
Java开源报表制作
2008-07-04 17:16 3069http://www.open-open.com/19.htm ... -
将SunAS以Windows服务方式启动
2008-07-04 17:13 1605继续搞Windows service。这个主题竟然耗费了俺3篇 ...
相关推荐
这个描述表明`jdk1.4.2_06`是一个早期版本的Java Development Kit(JDK),在当前的互联网资源中已经相对稀少。JDK是Oracle公司提供的用于开发和运行Java应用程序的工具集合,它包含了Java编译器、调试器、JVM(Java...
总的来说,JDK1.4.2_08是Java发展历程中的一个重要里程碑,它的各种改进和新特性为Java开发者提供了更强大、更稳定的开发环境。虽然现在最新的JDK版本已经更新到了许多个版本,但理解并掌握早期版本的功能和特性对于...
JDK 1.4.2_04是Oracle公司发布的一个较早版本,发布于2004年,是Java SE(标准版)平台的一部分。这个版本在当时具有很高的专业品质,被广泛用于开发和部署各种Java应用。 在JDK 1.4.2中,有几个关键的更新和改进...
JDK 1.4.2_07 是一个较早版本的Java开发工具包,由Sun Microsystems(现已被Oracle公司收购)发布。这个版本是Java平台标准版(Java SE)的一部分,主要用于开发和运行基于Java的应用程序。它包含了编译器、调试器、...
"j2sdk1.4.2_09.zip"这个压缩包就为此目的而存在,它包含了Java 2 Standard Edition (J2SE) 的1.4.2_09版本,这是一个在2004年发布的Java SDK。 JDK 1.4是Java发展历程中的一个重要里程碑,它引入了许多关键的新...
JDK 1.4.2 是 Java 平台标准版(Java SE)的一个早期版本,由 Sun Microsystems(现已被 Oracle 收购)开发。这个版本在2004年发布,提供了许多新的特性和改进,对于当时的开发者来说具有重要意义。尽管现在已经有了...
jdk1.4老资源,留一份自用。JDK1.4.2 无需安装,解压后直接使用。
以上所述是小编给大家介绍的解决-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 权限不够问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对软件开发网网站的支持! ...
JDK 1.4.2是Oracle公司发布的一个早期版本,发布于2004年,它在Java的发展历程中扮演了重要的角色,引入了许多新的特性和改进。 在标题"非安装jdk1.4.2.rar"中,关键词“非安装版”指的是这个JDK版本不需要通过传统...
Java JDK 1.4.2 是Java开发工具包的一个较早版本,由Sun Microsystems(后被Oracle公司收购)发布。这个版本在Java发展历程中占据着重要地位,因为它引入了许多关键特性和改进,对于当时的开发者来说是重要的里程碑...
JDK1.4.2是Java开发工具包的一个重要版本,它的源代码对于理解Java语言的底层实现和优化有着极高的价值。本文将从核心组件、类库结构以及关键功能等方面,深入剖析JDK1.4.2的源代码,帮助开发者提升对Java技术的理解...
配置环境变量,vi /etc/profile,在文件最后添加配置 JAVA_HOME=/usr/local/java/jdk1.8.0_231/ JRE_HOME=/usr/local/java/jdk1.8.0_231/jre CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_...
Java 2 SDK 1.4.2_07 是Oracle公司发布的一个早期版本的Java开发工具包,主要用于Java应用程序和应用程序服务器的开发、部署和管理。这个版本在当时被认为是相当稳定的,因此对于那些需要在旧系统上运行或者依赖于...
JDK 1.4.2 是Java历史上的一个重要版本,发布于2004年,它引入了许多新的特性和改进,对当时的Java开发者具有重大意义。本篇将深入探讨JDK 1.4.2的官方英文API中的关键知识点。 1. **NIO (Non-blocking I/O)** JDK...
JDK 1.8.0_202是Oracle公司发布的一个重要版本,针对Windows操作系统提供32位(i586)和64位(x64)两种版本,为开发者带来了稳定且高效的Java开发环境。 一、JDK 1.8.0_202概述 JDK 1.8.0_202是Java 8系列的一个更新...
总之,`jdk1.7.0_80`是Java 7的一个重要更新,它集成了许多实用功能和性能改进,对于那些依赖Java 7特性的项目来说,是一个可靠的选择。然而,考虑到软件安全性和新技术的采纳,开发者也应该考虑适时升级到更高级别...
Java JDK 1.8.0_25 是Oracle公司发布的Java开发工具包(Java Development Kit)的一个重要版本,主要用于Java程序的开发、编译和运行。这个版本在发布时是相对较新的,它包含了Java编译器(javac)、Java运行环境...
【标题】"Linux jdk1.8.0_171下载" 涉及的知识点主要集中在Java开发工具包(Java Development Kit, JDK)的版本1.8.0_171在Linux操作系统上的安装与使用。JDK是Java编程语言的核心组件,包含了编译器、调试器、文档...
JDK1.6.0_10是Oracle公司发布的一个版本,它在JDK1.6系列中是一个重要的更新,提供了许多新特性、性能优化以及安全性改进。 首先,JDK1.6引入了增强的可插拔编译器(Client Compiler和Server Compiler)。Client ...
标题中的"j2sdk1.4.2_06.zip"是一个老旧版本的JDK,具体来说是Java 2 Platform Standard Edition (J2SE) 1.4.2的第六个更新版本。这个版本发布于2004年,距今已有相当一段时间,但在某些特定场景下,如兼容旧系统或...