Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JAVA最轻线程框架_Java_Multithreading_Frameworks - Fatal编程技术网

JAVA最轻线程框架

JAVA最轻线程框架,java,multithreading,frameworks,Java,Multithreading,Frameworks,我有一个项目,我必须使用Amazon SES REST API发送电子邮件,现在Amazon允许基于帐户同时进行并发连接。因此,在我的情况下,亚马逊允许我同时打开50个连接,这意味着我可以每秒发送50封电子邮件。为了实现这一点,目前我正在使用JAVA Executioner线程,我将线程速度控制在50/秒。我也在Hibernate框架中实现了这一点,因为我需要在发送电子邮件之前执行一些SQL查询 这个java程序在后台连续运行(它是一个jar文件)。这需要512MB内存,所以我的问题是,我可以使

我有一个项目,我必须使用Amazon SES REST API发送电子邮件,现在Amazon允许基于帐户同时进行并发连接。因此,在我的情况下,亚马逊允许我同时打开50个连接,这意味着我可以每秒发送50封电子邮件。为了实现这一点,目前我正在使用JAVA Executioner线程,我将线程速度控制在50/秒。我也在Hibernate框架中实现了这一点,因为我需要在发送电子邮件之前执行一些SQL查询

这个java程序在后台连续运行(它是一个jar文件)。这需要512MB内存,所以我的问题是,我可以使用一些其他框架或更好的线程系统来使它更轻吗?我执行的SQL查询只是一个选择查询,不使用更新/删除/创建查询


我不擅长JAVA,所以这听起来可能很愚蠢。

我想最小的可能使用的框架应该是纯JDBC

这会将您的库限制为jre中的库、DB驱动程序以及AWS/Email的libs。根据您还需要什么,选择一个合适的方法可能值得研究

同时检查内存设置

如果你设置了-Xms512m,你的应用程序使用512m就不足为奇了,是吗

由于重新措辞的问题而进行编辑

在您的并行级别中,大部分内存被对象占用,而不是线程(线程是对象,但很小)。线程和Java中的线程一样好。您可以运行百分之一百的堆,而不会像您所说的那样消耗500 mb或更多的堆

因此,50个线程占用512m内存的问题更可能根源于代码和对象,而不仅仅是线程

为了减少内存占用,请执行以下操作:

  • 移除休眠。正如您所说,您只有一个简单的SELECTSQL,因此不需要额外的开销和库

  • 对你的跑步应用程序进行内存转储,并对其进行分析。(我想到了工具)

  • 检查其他对象以及如何使用它们。当你说“发送电子邮件”——你的电子邮件有多大?可能有重复的缓冲区会导致错误的编码选择吗?分享你的代码,然后我们可以看一看

  • 尝试在没有任何内存选项的情况下运行,并查看程序如何在默认情况下运行

  • 添加垃圾收集器输出并检查


您是否实际配置了任何内存设置?如果没有这些Java的贪婪,请放弃Hibernate并使用直接JDBC。您可以通过谷歌搜索基准点,根据使用情况,可能还需要一个缓存层。首先,您需要找到占用大量内存以正确聚焦的进程/对象。你可以凭记忆来做dump@Jan是的,我知道,
nohup java-Xms512M-Xmx1G-Dfile.encoding=UTF-8-XX:+UseParNewGC-XX:MinHeapFreeRatio=20-XX:MaxHeapFreeRatio=40-XX:MaxPermSize=256M-jar XYZ.jar
@ntechi,你要求一个“更轻”的框架,所以我们都认为你想要更好的内存管理。您需要更好地定义需求,我必须提到最小值为512,因为它需要的量太多,任何小于512的东西都会杀死程序。让我重新定义我的问题标题参见我的编辑。如果您想要一些帮助来减少内存占用,您需要共享一些代码。线程在java中很便宜——这本身就不是问题所在。