- 浏览: 882808 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (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 3133写在前面 如果使用Mantis来管理bug, ... -
Java:取得子网掩码
2010-03-17 11:10 5216这个讨论的起因是最近修改的一个bug, 我们的系统管理了一堆 ... -
用netbeans做GUI:SocketException: Malformed reply from SOCKS server
2010-01-07 16:24 8670最近的项目是由一些不同的软件相互协作组成的(是的,就是说这个系 ... -
Java Class Loader
2009-12-28 19:57 1328Java中有三种ClassLoader 1. Boot ... -
文件监视: C# and Java
2009-06-15 14:34 2700最近我们组的Mr.S同学到别的项目组里面支援C#去了, 我也 ... -
Java: 获得所有线程
2009-03-27 17:13 2087我想在一个时刻查看java中还存在的所有线程, 于是googl ... -
Java GC 监视方法与工具
2009-03-27 15:46 6829项目需要,将gc的监视方法,和gc log的分析工具整理一下, ... -
HttpComponents
2009-02-11 15:56 2724今天要做这样的一件事 ... -
Java documentation in Windows Help format
2009-01-10 17:16 1771.chm格式的java帮助文档查找起来很方便, 常用的库我自己 ... -
SWT Win32 Extension 介绍
2008-10-13 10:52 2677SWT Win32 Extension 这个项目 ... -
Java编码规范
2008-09-26 13:43 1766养成好的编码规范对项目组的好处不用多说~ 我最近在一个维护的项 ... -
Java CSV API
2008-09-24 10:04 7594项目中有一些功能是CSV相关的。新来的一个同事问是用什么写的。 ... -
JFugue - 给我的一个小小的惊喜
2008-09-20 18:32 1345今天看到了这篇博客: 让 Java 轻松乐动起来,使用 JFu ... -
Java "properties文件"编辑器 - eclipse插件
2008-09-16 12:07 2146HomePage: http://propedit.sourc ... -
使用java修改windows注册表
2008-08-06 15:04 4519项目中用到,整理如下: 方法1:利用java.util.p ... -
Eclipse插件开发中如何获得classpath下面的资源
2008-07-21 19:38 3067在我的脑海里面有好几个话题需要记录一下,而正因为好多,我现在已 ... -
cactus eclipse plugin is now unavailable!
2008-07-09 14:28 1389今天要下载个apache cactus的eclipse plu ... -
http://www.groovyland.net/pptshare/
2008-07-09 13:00 1298http://www.groovyland.net/pptsh ... -
Java开源报表制作
2008-07-04 17:16 3025http://www.open-open.com/19.htm ... -
将SunAS以Windows服务方式启动
2008-07-04 17:13 1535继续搞Windows service。这个主题竟然耗费了俺3篇 ...
相关推荐
jdk1.4.2_08.rar 这个是一jdk压缩包,解压就可以用了
早起的jdk1.4.2_06 网上资源不多了
jdk1.4.2_04.rar老式,专业品质!
较老版本jdk1.4.2_07,留着备用
以上所述是小编给大家介绍的解决-BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: 权限不够问题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对软件开发网网站的支持! ...
最近在项目中遇到了需要使用旧版本的jdk1.4,终于找到,提供给需要使用老版本jdk的朋友,适合配合tomcat5使用。
非安装版的jdk1.4.2,解压到磁盘即可运行,不需要安装
配置环境变量,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_...
j2sdk1.4.2_07.zip 最稳定1.4JDK
java运行环境jdk1.8.0_131,windows下64位操作系统,添加环境变量JAVA_HOME:C:\Program Files\Java\jdk1.8.0_131 classpath:.,C:\Program Files\Java\jdk1.8.0_131jre\lib\rt.jar,C:\Program Files\Java\jdk1.8.0_131\...
国内现在被禁的越来越厉害了,Oracle官网很难访问并下载了,提供早期JDK版本供需要的人使用。
linux(x86_64)下的jdk压缩包,版本为 1.8.0_333。附带安装教程。 1、将jdk压缩包解压到指定目录(如:/usr/local/java) 2、添加环境变量(sudo vi ~/.bashrc) export JAVA_HOME=/usr/local/java/jdk1.8.0_333 ...
号称业界最快java虚拟机,可用于规避perm gen异常。本版本为bea被oracle收购之前的版本。
-bash: /usr/local/jdk/jdk1.8.0_181/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory 安装完后 java -version 查看版本出现: 原因是:没有那个文件或目录,找了很久发现需要...
jdk1.4老资源,留一份自用。JDK1.4.2 无需安装,解压后直接使用。
Java_jdk1.8.0_241 环境变量
jdk1.4.2源代码............
1. 直接解压,比如解压到:D:\Dev\Java 2. 配置环境变量:我的电脑 ->右键菜单 ->属性 ->高级系统设置 ->环境变量 ->用户变量中Path ->编辑 ->新增:D:\Dev\Java\jdk1.8.0_192\bin
JAVA jdk1.8.0_101绿色版本 系统变量→新建 JAVA_HOME 变量 。 变量值填写jdk的安装目录(本人是 C:\java\jdk1.8.0_101 ) 系统变量→寻找 Path 变量→编辑 在变量值最后输入 %JAVA_HOME%\bin;%JAVA_HOME%\jre\bin; ...
jdk1.7.0_80直接解压就能用。jdk1.7.0_80直接解压就能用。