有什么办法可以设置Java的最大集合大小?
你可以这样做:
List<X> list = Arrays.asList(new X[desiredSize]);
// where X is any Object type (including arrays and enums,
// but excluding primitives)
结果列表是可修改的,但不可调整大小(即add(e)
,remove(e)
虽然不起作用,但set(index, e)
可以)。
参考:
Arrays.asList(T ...)
或者:使用Guava,这是一个静态方法,该方法以最大大小装饰现有的List
public static <T> List<T> setMaxSize(
final List<T> input, final int maxSize){
return new ForwardingList<T>(){
@Override
public boolean addAll(Collection<? extends T> collection){
return standardAddAll(collection);
}
@Override
public boolean addAll(int index, Collection<? extends T> elements){
return standardAddAll(index, elements);
}
public boolean add(T e) {
checkMaxSize();
return delegate().add(e);
}
@Override
public void add(final int index, final T e){
checkMaxSize();
delegate().add(index, e);
}
private void checkMaxSize(){
if(size() >= maxSize){
throw new UnsupportedOperationException("Maximum Size "
+ maxSize + " reached");
}
}
@Override
protected List<T> delegate(){
return input;
}
};
}
由于ForwardingXxx类适用于所有标准集合类型,因此您也可以为其他集合编写类似的修饰符。
显然,这仅在您的客户端代码使用修饰的集合时才有效。如果更改基础集合,则很麻烦(就像Collections.unmodifiableXXX方法一样)
参考:
ForwardingList
问题内容: 有没有一种方法可以通过编程而不是作为vm参数来设置最大Java堆大小? 就像是: 问题答案: 不适用于任何Hotspot JVM。只能在命令行上指定JVM堆参数,然后在JVM的生存期内对其进行固定。 使用Hotspot Java实现,“更改”应用程序堆大小的唯一方法是使用不同的命令行参数在新的JVM中重新启动它。 (我隐约记得,其他一些供应商的JVM 确实 允许在运行的JVM中更改某些
我使用的是SpringBoot2.0。3释放。我想增加HikariCP的最大池大小,默认情况下为10。 我试着在带有 spring.datasource.hikari.maximum-池-大小=200 但是它不起作用,因为在日志中它仍然显示最大池大小为10。 我想改变的原因是,我不知怎么地达到了登台的极限,我不知道是什么原因造成的。
给定一个
问题内容: 我正在启动一个Java jar文件,该文件通常需要比默认的64MB最大堆大小更多的文件。256MB的堆大小足以满足此应用的需求。是否有任何指定(可能在清单中?)启动jar时始终使用最大256MB的堆大小?(如果需要,请在下面提供更多详细信息。) 这是我用Java编写的命令行应用程序,它可以进行一些图像处理。在高分辨率图像(大约12兆像素及以上,这并不罕见)上,我收到OutOfMemor
问题内容: 问题答案: Redis永远不会更改最大打开文件数。 这是一个操作系统配置,也可以基于每个用户进行配置。该错误具有描述性,并告诉您:“增加’ulimit -n’” 您可以参考此博客文章,了解如何增加最大打开文件描述符:http : //www.cyberciti.biz/faq/linux-increase- the-maximum-number-of-open-files/
问题内容: 我有两台linux机器(都是VM),一台有12GB内存,另一台有8GB内存。 我试图在两台机器上启动相同的Java程序,并且最大可能的最大堆大小(使用-Xmx标志)。以下是我得到的结果。 12GB机器:9460MB 8GB机器:4790MB 如果我指定的最大堆大小超出了限制,我将得到以下错误。 我检查了两个系统中的可用内存(使用命令),然后得到关注。 12GB机器:大约3GB可用空间。