社区
Windows SDK/API
帖子详情
奇怪现象:和大家讨论有关DLL和线程的问题。
eachsky
2005-03-23 03:16:06
现有A.exe b.dll和c.dll
调用情况: A程序在线程调用b.dll (b.dll中有一个FORM窗体)
b.dll普通调用c.dll(c.dll中为普通函数)
b.dll和c.dll均没有创建线程。
奇怪现象:在调试A.exe的时候用线程查看器查看。竟然有6个线程。
关闭b.dll中的窗体,还剩4个线程。小弟不才,还请高手解释一下。
...全文
111
9
打赏
收藏
奇怪现象:和大家讨论有关DLL和线程的问题。
现有A.exe b.dll和c.dll 调用情况: A程序在线程调用b.dll (b.dll中有一个FORM窗体) b.dll普通调用c.dll(c.dll中为普通函数) b.dll和c.dll均没有创建线程。 奇怪现象:在调试A.exe的时候用线程查看器查看。竟然有6个线程。 关闭b.dll中的窗体,还剩4个线程。小弟不才,还请高手解释一下。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
eachsky
2005-04-03
打赏
举报
回复
是用了ADO。。而且还不止一个。和ADO有关系吗?能否说的详细点。
dext
2005-04-02
打赏
举报
回复
EXE是关键,是不是用了ADO
eachsky
2005-04-02
打赏
举报
回复
DLL调用和EXE是不同的地址。 创建线成似乎没什么关系吧。有不是在同一个EXE或者DLL里创建多个线程。需要互斥吗?
caiso
2005-03-27
打赏
举报
回复
帮顶一下
aus
2005-03-26
打赏
举报
回复
帮顶
701701
2005-03-26
打赏
举报
回复
你肯定没有做什么好事!
这是dll重复加载造成的
看看源代码,必要地方加上互斥
ddk_hhb
2005-03-26
打赏
举报
回复
有意思,以前没有注意过!~
laiqinghe
2005-03-24
打赏
举报
回复
有意思
eachsky
2005-03-24
打赏
举报
回复
没有人关注??自己顶。。。。。
Tomcat内存溢出的三种情况及解决办法分析
Tomcat内存溢出的三种情况及解决办法分析 Tomcat内存溢出的原因 在生产环境中tomcat内存设置不好很容易出现内存溢出。造成内存原因是不一样的,当然处理方式也不一样。 这里根据平时遇到的情况和相关资料进行一个总结。常见的一般会有下面三种情况: 1.OutOfMemoryError: Java heap space 2.OutOfMemoryError: PermGen space 3.OutOfMemoryError: unable to create new native thread. Tomcat内存溢出解决方案 对于前两种情况,在应用本身没有内存泄露的情况下可以用设置tomcat jvm参数来解决。(-Xms -Xmx -XX:PermSize -XX:MaxPermSize) 最后一种可能需要调整操作系统和tomcat jvm参数同时调整才能达到目的。 第一种:是堆溢出。 在JVM中如果98%的时间是用于GC且可用的 Heap size 不足2%的时候将抛出此异常信息。 没有内存泄露的情况下,调整-Xms -Xmx参数可以解决。 -Xms:初始堆大小 -Xmx:最大堆大小 但堆的大小受下面三方面影响: 1.相关操作系统的数据模型(32-bt还是64-bit)限制;(32位系统下,一般限制在1.5G~2G;我在2003 server 系统下(物理内存:4G和6G,jdk:1.6)测试 1612M,64为操作系统对内存无限制。) 2.系统的可用虚拟内存限制; 3.系统的可用物理内存限制。 堆的大小可以使用 java -Xmx***M version 命令来测试。支持的话会出现jdk的版本号,不支持会报错。 -Xms -Xmx一般配置成一样比较好比如set JAVA_OPTS= -Xms1024m -Xmx1024m 第二种:永久保存区域溢出 PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。这一部分用于存放Class和Meta的信息,Class在被 Load的时候被放入PermGen space区域,它和和存放Instance的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对PermGen space进行清理,所以如果你的APP会LOAD很多CLASS的话,就很可能出现PermGen space错误。这种错误常见在web服务器对JSP进行pre compile的时候。但目前的hibernate和spring项目中也很容易出现这样的
问题
。http://www.javaeye.com/topic/80620?page=1 的帖子有
讨论
的这个
问题
。可能是由于这些框架会动态class,而且jvm的gc是不会清理PemGen space的,导致内存溢出。 这一个一般是加大-XX:PermSize -XX:MaxPermSize 来解决
问题
。 -XX:PermSize 永久保存区域初始大小 -XX:PermSize 永久保存区域初始最大值 这一般结合第一条使用,比如 set JAVA_OPTS= -Xms1024m -Xmx1024m -XX:PermSize=128M -XX:PermSize=256M 有一点需要注意:java -Xmx***M version 命令来测试的最大堆内存是 -Xmx与 -XX:PermSize的 和 比如系统支持最大的jvm堆大小事1.5G,那 -Xmx1024m -XX:PermSize=768M 是无法运行的。 第三种:无法创建新的
线
程。 这种
现象
比较少见,也比较
奇怪
,主要是和jvm与系统内存的比例有关。 这种怪事是因为JVM已经被系统分配了大量的内存(比如1.5G),并且它至少要占用可用内存的一半。有人发现,在
线
程个数很多的情况下,你分配给JVM的内存越多,那么,上述错误发生的可能性就越大。 产生这种
现象
的原因如下(从这个blog中了解到原因:http://hi.baidu.com/hexiong/blog/item/16dc9e518fb10c2542a75b3c.html): 每一个32位的进程最多可以使用2G的可用内存,因为另外2G被操作系统保留。这里假设使用1.5G给JVM,那么还余下500M可用内存。这500M内存中的一部分必须用于系统
dll
的加载,那么真正剩下的也许只有400M,现在关键的地方出现了:当你使用Java创建一个
线
程,在JVM的内存里也会创建一个Thread对象,但是同时也会在操作系统里创建一个真正的物理
线
程(参考JVM规范),操作系统会在余下的400兆内存里创建这个物理
线
程,而不是在JVM的1500M的内存堆里创建。在jdk1.4里头,默认的栈大小是256KB,但是在jdk1.5里头,默认的栈大小为1M每
线
程,因此,在余下400M的可用内存里边我们最多也只能创建400个可用
线
程。 这样结论就出来了,要想创建更多的
线
程,你必须减少分配给JVM的最大内存。还有一种做法是让JVM宿主在你的JNI代码里边。 给出一个有关能够创建
线
程的最大个数的估算公式: (MaxProcessMemory - JVMMemory - ReservedOsMemory) / (ThreadStackSize) = Number of threads 对于jdk1.5而言,假设操作系统保留120M内存: 1.5GB JVM: (2GB-1.5Gb-120MB)/(1MB) = ~380 threads 1.0GB JVM: (2GB-1.0Gb-120MB)/(1MB) = ~880 threads 在2000/XP/2003的boot.ini里头有一个启动选项,好像是:/PAE /3G ,可以让用户进程最大内存扩充至3G,这时操作系统只能占用最多1G的虚存。那样应该可以让JVM创建更多的
线
程。 因此这种情况需要结合操作系统进行相关调整。 因此:我们需要结合不同情况对tomcat内存分配进行不同的诊断才能从根本上解决
问题
。 以上就是针对Tomcat内存溢出的几种解决方案。本文来自George的博客:《tomcat内存溢出总结》
java 调用
dll
内存泄露_解决Java加载
dll
导致Java进程内存泄露
解决Java加载
dll
导致Java进程内存泄露在做网络监控系统的性能测试时,出现了内存泄露的
问题
,困扰了很久,现在终于算是解决了,但是根本原因尚不明确,拿出来大家
讨论
下,看看能不能完美解决~ 这个
问题
奇怪
的地方在于是Java进程内存泄露,而不是平常的JVM内存泄露,用Jprofile等工具也无法看出
问题
所在。 测试代码如下:System.loadLibrary("test1");int thr...
java内存加载
dll
_解决Java加载
dll
导致Java进程内存泄露
【IT168技术】在做网络监控系统的性能测试时,出现了内存泄露的
问题
,困扰了很久,现在终于算是解决了,但是根本原因尚不明确,拿出来大家
讨论
下,看看能不能完美解决~这个
问题
奇怪
的地方在于是Java进程内存泄露,而不是平常的JVM内存泄露,用Jprofile等工具也无法看出
问题
所在。测试代码如下:System.loadLibrary("test1");intthreadPoolSize=400;Ex...
注入托管代码
前言:本文的重点不在于介绍如何注入托管代码,而是侧重于介绍我的研究过程,这里面有很多曲折,可能会使你感到琐屑,但正所谓“授人以鱼,不如授人以渔”,了解了这个过程,会使你理解得更深刻。正文:网上关于
dll
注入的文章实在太多,但基本上都是针对Win32
dll
的,而很少涉及到托管
dll
。首先让我们来看看Win32
dll
是如何注入的,通常有两种方法:钩子和远程
线
程。而远程
线
程更灵活,所以本文主要
讨论
远...
boost多
线
程库使用指南
查看完整版本: [-- boost多
线
程库使用指南 --] 美国主机支持论坛 -> 开发技术 -> boost多
线
程库使用指南 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题 usidc5 2010-09-22 00:20
Windows SDK/API
1,183
社区成员
22,335
社区内容
发帖
与我相关
我的任务
Windows SDK/API
Delphi Windows SDK/API
复制链接
扫一扫
分享
社区描述
Delphi Windows SDK/API
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章