可以创建多少java信号量实例?

可以创建多少java信号量实例?,java,semaphore,Java,Semaphore,我使用信号量向生产者线程发出信号,表示另一个(消费者)线程已完成共享数据/对象处理。但是我可以创建的信号量实例的总量有限制吗?我想了解,对大量(数十万)对象使用这种同步可以吗? 请注意,这是另一个问题-不是关于“信号量可以拥有的最大许可数量是多少”,所以ity不是重复的。 谢谢您可以在Java中创建多少对象实例还没有定义。这取决于可用内存。 未定义如何实现信号量。如果你的平台强加了一个限制,它可能会高于你提议的几十万 你当然可以试试看!编写一个只分配信号量的存根程序,并将其放入ArrayList

我使用信号量向生产者线程发出信号,表示另一个(消费者)线程已完成共享数据/对象处理。但是我可以创建的信号量实例的总量有限制吗?我想了解,对大量(数十万)对象使用这种同步可以吗? 请注意,这是另一个问题-不是关于“信号量可以拥有的最大许可数量是多少”,所以ity不是重复的。
谢谢

您可以在Java中创建多少对象实例还没有定义。这取决于可用内存。 未定义如何实现信号量
。如果你的平台强加了一个限制,它可能会高于你提议的几十万

你当然可以试试看!编写一个只分配信号量的存根程序,并将其放入ArrayList(以避免它们被垃圾收集),然后看看会发生什么


数十万在大多数环境中这不是一个“可怕”的数字,但是有一些节约的方法来管理对象群体。例如,“惰性初始化”。在第一次获取时分配一个
信号量
(如果进行计数,则释放),并在引用为零时将其置零,这是一种潜在的策略,如果您需要大量的“逻辑”信号量,那么只有“在用”的实例才有可能,实际上很少有实例具有非默认值(例如零)流通中的许可证数量。

您可以在Java中创建多少个对象实例还未定义。这取决于可用内存。 未定义如何实现信号量
。如果你的平台强加了一个限制,它可能会高于你提议的几十万

你当然可以试试看!编写一个只分配信号量的存根程序,并将其放入ArrayList(以避免它们被垃圾收集),然后看看会发生什么


数十万在大多数环境中这不是一个“可怕”的数字,但是有一些节约的方法来管理对象群体。例如,“惰性初始化”。在第一次获取时分配一个
信号量
(如果进行计数,则释放),并在引用为零时将其置零,这是一种潜在的策略,如果您需要大量的“逻辑”信号量,那么只有“在用”的实例才有可能,实际上很少有实例具有非默认值(例如零)流通中的许可证数量。

我认为OP意味着他们可以创建多少个信号量实例。为什么?为什么不使用队列?生产者线程怎么能理解,消息已经被处理了?我想它是清楚的,对不起。编辑问题以澄清这不是一个更好的未来吗?我认为OP意味着他们可以创建多少个信号量实例。为什么?为什么不使用队列?生产者线程怎么能理解,消息已经被处理了?我想它是清楚的,对不起。编辑问题以澄清这不是一个更好的未来吗?通常ipc信号量在大多数操作系统中是有限的,我理解这些信号量不是ipc,但请确定。谢谢大家!@我已经更正了我的答案。我没有意识到一个限制,已经创建了数百万个互斥体,从未被卡住过。我知道的是对象监视器(所有对象都有!)通常是“惰性初始化的”。那有点吝啬!对象是在没有监视器的情况下分配的,如果需要,可以分配一个,但决不能未分配。如果JVM使用的是一个带有信号量的1对1操作系统结构,如果它没有做类似的事情,我会感到惊讶。但你当然可以。@BbIKTOP这里有一些代码,可以在玩具环境中快速创建、获取、检查和释放10000000个信号量:这并不能证明什么,但表明你没有问题。我已确保在无法访问信号量之前释放所有许可证。原则上,这是无害的,但不这样做的代码可能会在以后变成许可证泄漏。并不是所有的泄漏都是内存泄漏。通常ipc信号量在大多数操作系统中是有限的,我知道这些信号量不是ipc的,但请确定。谢谢大家!@我已经更正了我的答案。我没有意识到一个限制,已经创建了数百万个互斥体,从未被卡住过。我知道的是对象监视器(所有对象都有!)通常是“惰性初始化的”。那有点吝啬!对象是在没有监视器的情况下分配的,如果需要,可以分配一个,但决不能未分配。如果JVM使用的是一个带有信号量的1对1操作系统结构,如果它没有做类似的事情,我会感到惊讶。但你当然可以。@BbIKTOP这里有一些代码,可以在玩具环境中快速创建、获取、检查和释放10000000个信号量:这并不能证明什么,但表明你没有问题。我已确保在无法访问信号量之前释放所有许可证。原则上,这是无害的,但不这样做的代码可能会在以后变成许可证泄漏。并非所有泄漏都是内存泄漏。