我很好奇从"MemoryUsage"类中查询值时"已提交"内存的确切含义.该类将其解释为"已提交表示保证可供Java虚拟机使用的内存量(以字节为单位)." 这是否意味着内存正在被jvm进程使用,并且在java进程释放之前不可用于其他进程,或者它是否意味着如果java进程尝试分配高达该内存量,则该进程将成功?我意识到这可能是特定于实现的,但我只对hotspot感兴趣.
我试图找到一种更清晰的方式来表达看起来类似于此的代码:
def method1: Try[Option[String]] = ???
def method2: Try[Option[String]] = ???
def method3: Try[Option[String]] = ???
method1 match
{
case f: Failure[Option[String]] => f
case Success(None) =>
method2 match
{
case f:Failure[Option[String]] => f
case Success(None) =>
{
method3
}
case s: Success[Option[String]] => s
}
case s: Success[Option[String]] => s
}
Run Code Online (Sandbox Code Playgroud)
如您所见,这将按顺序尝试每个方法,如果一个方法失败,则执行停止,基本匹配将解决该失败.如果method1或method2成功但包含None,则尝试序列中的下一个方法.如果执行到达method3,则无论成功或失败,都会返回其结果.这在代码中运行良好,但我发现很难跟踪发生的事情.
我很乐意用它来理解
for
{
attempt1 <- method1
attempt2 <- method2
attempt3 <- method3
}
yield
{
List(attempt1, attempt2, attempt3).find(_.isDefined)
}
Run Code Online (Sandbox Code Playgroud)
因为它的美丽和它的作用是非常清楚的.但是,如果所有方法都成功,那么无论先前的方法是否返回可用的答案,它们都会每次执行.不幸的是我不能那样做.
任何建议,将不胜感激.
我正在寻找在构建重量级Windows界面时处理用户对象句柄限制的高级策略.请解释您如何使用SWT或直接Windows GUI API克服或绕过此问题.我唯一不感兴趣的是优化小部件使用的策略,因为我已经广泛地做了这个并且它没有解决问题,只是使它不太可能.
我的情况:
我有一个基于SWT的GUI,允许在同一个父shell中进行多个会话,并且在每个会话中,它们是3个单独的位置,其中显示用户生成的注释列表.当用户打开多个会话并提取填充这些列表的数据时,用户对象句柄的数量会根据注释的数量而显着增加.
我当前的解决方案:
1.我默认页面注释,从而限制每个会话中的注释行数,但由于管理需求,我还有一个实际上是"全部查看"按钮,它完全绕过了这个.
我自定义在每一行中绘制所有不可编辑的信息.这意味着每行仅使用2个对象句柄.
3.我创建了JNI调用,查询操作系统的当前使用情况和最大使用率.有了这个,我可以告诉用户即将发生崩溃.不用说,他们忽略了这个警告.
我正在寻找有关如何有效地通知用户他们对可编辑表的输入无效的想法.例如,如果表的一列表示美国邮政编码,并且用户在邮政编码"85rr3"中输入单元格,您将如何通知用户该问题?
java ×1
jvm-hotspot ×1
memory ×1
option ×1
scala ×1
swt ×1
try-catch ×1
validation ×1
winapi ×1