Java需要新线程的内存

我有一个大规模创建线程的应用程序。 结果我得到一个OutOfMemoryError 。 我的想法是等到有足够的可用空间来创建下一个Thread 。 但是因此我需要知道创建一个线程需要多少内存以及这个内存是否可用。 有没有办法获得线程需要的内存量? 如何确定此内存量是否可用? 我已经尝试过的: for (int i = 0; i < links.size(); i++) { while(Runtime.getRuntime().maxMemory() – Runtime.getRuntime().totalMemory() + Runtime.getRuntime().freeMemory() < MEMORY_THRESHOLD) { synchronized (lock) { lock.wait(10); } } Thread t = new Thread(new Task(links.get(i))); t.setDaemon(true); t.start(); } 但即使我使用100MB作为阈值,我也会得到一个OutOfMemoryError 。

Map的条目用于分隔Hibernate中的列

假设我有一个Players表: ID | name | email | age | … 1 | ‘bob’ | null | 23 | … 有很多列(比如50),每个列(除了ID )都可能为空。 请忽略桌面设计,现在必须保持这种方式:-( 我想将这个表映射到一个实体(即我希望它能同时用于保存和读取): public class Player implements Serializable { private Map attributes; // more code, ctor, setters, getters etc… } 其中表中的每一列都被读作地图的一个条目。 因此,在给定的示例中,地图将具有具有适当值的密钥ID , name , email等。 如果Hibernate需要,我可以和一个单独的id成员一起生活,但我想避免在一个类中有50个成员 。 这可能在Hibernate 4中吗?

设计问题:我应该在多大程度上依赖控制流程的例外?

我正在研究一个java Web应用程序,我有一些关于设计的问题。 基本上在其当前版本中,它在很大程度上依赖于捕获exception以确定控制流 。 例如,在我的一个Spring服务类中,我有以下方法来检查数据库中是否存在作为参数提供的电子邮件。 @Override public boolean validateEmailAddressDoesNotExist(String accountEmailAddress) { try { return !dao.checkIfEmailAddressAlreadyExists(accountEmailAddress); } catch (NoResultException re) { log.error(“NoResultException”, re); } catch (RuntimeException re) { log.error(“RuntimeException”, re); } return true; } //from “dao” class public boolean checkIfEmailAddressAlreadyExists(String accountEmailAddress) { return (loadAccountFromAccountEmailAddress(accountEmailAddress) == null ? false : true); } //also from “dao” class public […]

JPA 2.1 ConstructorResult导致ClassCastException

我的结果集中的对象被强制转换为’Object’而不是我在@SQLResultSetMapping对象中指定的对象。 我正在尝试获取ConstructorResult的句柄,并创建了一个包含简单连接的查询,并尝试获取结果集并循环,但它将其打印出来以确保我正确。 然而,当我进入循环时,看起来应该是直截了当的不是。 当我声明结果列表时,它被转换为类型。 我逐步执行查询测试类,它成功运行查询并将其加载到结果中,但结果列表中的项目已键入“Object”而不是CommentInfoListItemDTO对象。 因此,当我进入循环时,它会遇到类强制转换exception。 为什么不将结果强制转换为CommentInfoListItemDTO对象? 特别是在@SQLResultSetMapping中具体说明。 代码发布在下面…我截断了一些列名称只是为了缩短它们。 如果它有助于将其添加回来让我知道。 public List getCommentTitleListByPersonId(BigInteger personId) { String queryString = “select c.article_id, ” ***[columns removed for brevity]*** + “c.person_id as comment_person_id, ” + “a.party_id as aticle_party_id ” + “from article_comment c ” + “join article a ” + “on a.article_id = c.article_id ” + “where c.person_id = […]

带有日期和月份的Java printf

System.out.printf(“Time: %d-%d %02d:%02d” + calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.MONTH), calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE); 这是朋友给我看的代码,但是如何让日期以11月1日的格式显示?

JSpinner没有负值

我正在netbeans中构建一个小应用程序,我使用JSpinner组件来设置产品的数量。如何设置微调器只取正值?我可以在Netbeans中选择我可以设置的方法还是JSpinner ? 额外: spinner.setModel(new SpinnerNumberModel(0, 0, 20, 1));

接受vertx api中相同键的参数列表

如何在路由器GET方法中接受同一个键中的参数列表。 例如,我的查询参数名称为’personId’。 但在获取请求中,可能有多个(列表)personId即将到来。 如何在vertx中处理这个问题。 我在HttpServerRequest Class中找不到任何这样的方法。 我还有另一种选择来接受单个参数,但使用逗号分隔的ID。 但这不是错的吗? 没有其他办法吗? 我认为URI应该像localhost:8081/myApi?personId=1&personId=2&personId=3

将DefaultMutableTreeNode分配给JTree

我正在Netbeans中开发一个小型桌面应用程序。 我在我的JFrame上拖放一个JTree ,现在我想动态地填充这个JTree的节点层次结构。 为此我worte一个方法,它返回我DefaultMutableTreeNode对象。 现在我如何将此对象分配给我拖放的JTree

Eclipse 3.5+ – 注释处理器:无法导入生成的类

我正在使用第三方注释处理器从我的项目中的带注释的类生成元数据代码(.java文件)。 我已经通过Eclipse(Properties – > Java Compiler – > Annotation Processing)成功配置了处理器,代码生成工作正常(代码自动创建和生成)。 此外,Eclipse成功自动完成生成的类及其字段,没有任何错误。 假设我有一个类“some.package.Foo”,生成的元数据类是“some.package.Foo_”。 在自动完成的帮助下,我可以在Eclipse编辑器中获得以下代码,没有任何错误: import some.package.Foo_; … public class Test { void test() { Foo_.someField = null; // try to access a field from the generated class Foo_ } } 但是,一旦我实际构建项目(或者只是保存文件,因为Build自动启用),我得到的错误告诉“some.package.Foo_”无法解析。 似乎Eclipse正在同时生成和编译some.package.Foo_,或者更有可能。 我找到了两个临时解决方案(这实际上阻碍了注释处理器的使用): 在每次生成所生成的类之前,右键单击每个生成的文件,转到“属性”,然后取消选中“派生”标记。 之后,我对项目进行清理并且导入很好 – 没有更多的错误。 但是,如果我再次进行清理,则会再次显示错误,因为文件的生成会导致再次(自动)检查“派生”标记。 所以这真非常烦人且耗时。 我还取消选中所有这些文件中的“Derived”标记,这次我取消选中包含这些文件的源文件夹和包中的“Derived”标记。 然后我禁用注释处理器,然后进行清理。 没有更多的导入错误,即使我做了另一次清理,但使用注释处理器没有任何好处,因为如果我要更改一些会更新模型的东西,我需要重新打开注释处理器,并重复在生成这些文件的新版本之后,这个繁琐的程序将其关闭。 这是Eclipse中的错误吗? 如果是的话,是否有比上述两个更好的解决方法或快速解决方案? 如果没有,我应该尝试解决这个问题? 我也尝试重新排列构建路径上的库的顺序,但它没有帮助。

使用Angular 2客户端的Spring启动Birt报告生成损坏的PDF文件

我试图在spring启动应用程序中配置birt报告,客户端是一个角度2应用程序,这是我运行报告的地方: @PostConstruct public void startUp() { if(inputDir == null) throw new RuntimeException(“Cannot start application since birt report input directory was not specified.”); try { EngineConfig engineConfig = new EngineConfig(); engineConfig.getAppContext().put(“spring”, this.context); RegistryProviderFactory.releaseDefault(); Platform.startup(engineConfig); IReportEngineFactory reportEngineFactory = (IReportEngineFactory) Platform.createFactoryObject(IReportEngineFactory.EXTENSION_REPORT_ENGINE_FACTORY); birtReportEngine = reportEngineFactory.createReportEngine(engineConfig); } catch (BirtException e) { } reportOutputDirectory = env.getProperty(“birt_temp_file_output_dir”); } @Override public ByteArrayOutputStream runReport(Report […]