草庐IT

OPTIMIZATION

全部标签

java - 字符串大写 - 更好的方法

哪种资本化方法更好?我的:char[]charArray=string.toCharArray();charArray[0]=Character.toUpperCase(charArray[0]);returnnewString(charArray);或通用语言-StringUtils.capitalize:returnnewStringBuffer(strLen).append(Character.toTitleCase(str.charAt(0))).append(str.substring(1)).toString();我觉得我的更好,但我宁愿问。 最

java - Java 将枚举编译成什么?

我和一位同事讨论了Java如何表示枚举。我的印象是它们是严格的整数,就像C/C++。或者,如果您添加行为(类型安全枚举),它会被包装在一个类中。他相信,如果它足够小,Java会把它压缩到一个字节。但是,我在Oracle站点上发现了这个:Javaprogramminglanguageenumsarefarmorepowerfulthantheircounterpartsinotherlanguages,whicharelittlemorethanglorifiedintegers.Thenewenumdeclarationdefinesafull-fledgedclass(dubbeda

java - XSSFWorkbook 需要很长时间才能加载

我正在使用以下代码:Filefile=newFile("abc.xlsx");InputStreamst=newFileInputStream(file);XSSFWorkbookwb=newXSSFWorkbook(st);xlsx文件本身有25,000行,每行有500列的内容。在调试过程中,我看到我创建XSSFWorkbook的第三行,完成此语句需要很多时间(1小时!)。有没有更好的方法来访问原始xlsx文件的值? 最佳答案 首先,当您有文件时,不要从InputStream加载XSSFWorkbook!使用InputStream

java - 为什么 HashMap 在指定精确容量时再次调整大小()?

代码胜于Eloquent,因此:finalintsize=100;Mapm=newHashMap(size);for(inti=0;i为什么HashMap在内部调用resize()212次!(感谢Andreas确定JVM在内部使用HashMap,21个调用中有19个来自其他进程)我的应用程序仍然不能接受两次resize()调用。我需要对此进行优化。如果我是一名新的Java开发人员,我对HashMap构造函数中“容量”的第一个直觉猜测是它是我(HashMap的消费者)将要放入的元素数量的容量map。但事实并非如此。如果我想优化我对HashMap的使用,使其根本不需要调整自身大小,那么我需

java - 动态规划与背包应用

我正在学习动态规划并希望解决以下问题,可在此处找到http://www.cs.berkeley.edu/~vazirani/algorithms/chap6.pdf:给你一block长方形的布,尺寸为X×Y,其中X和Y是正整数,以及可以用这block布制作的n种产品的列表。对于[1,n]中的每个产品i,您知道需要一block尺寸为aixbi的长方形布料,并且该产品的最终售价为ci。假设ai、bi、ci都是正整数。你有一台机器可以将任何长方形的布水平或垂直切割成两block。设计一种算法,找出裁剪X乘Y的布料的最佳策略,从而使由所得布料制成的产品的售价总和最高。您可以根据需要自由制作任意

java - 为什么 javac 甚至不优化简单的代码?

给定以下代码:publicclassMainClass{publicstaticintf(){inti=0;i++;returni;}}编译器javac生成以下代码:Compiledfrom"MainClass.java"publicclasslatte_jvm.MainClass{publicstaticintf();Code:0:iconst_01:istore_02:iinc0,15:iload_06:ireturn}函数f做的​​事情非常简单——它只返回1。它的翻译如此直接以至于我很难相信java编译器会做任何优化。为什么Java编译器创建者决定不在编译阶段进行此类优化?

java - Java中 "for"语句每次循环都计算循环条件吗?

这是我的Java代码:Listobjects=newArrayList();//Assignvaluestoobjects...for(inti=0;i我有两个问题:objects.size()是在循环之前只计算一次,还是每次循环都计算一次?如果每次循环都计算objects.size(),如果没有多线程保护,其他线程同时更改它,代码可能会崩溃。我说的对吗? 最佳答案 答案:objects.size()在每个循环中被调用(是否被计算取决于ArrayList的实现,你不应该关心它关于)是的,另一个线程可能会更改列表,这会影响您的循环真实

java - 分析短期 Java 应用程序

是否有任何Java分析器可以分析短期应用程序?到目前为止,我发现的分析器似乎适用于在用户终止之前一直运行的应用程序。但是,我想分析像命令行实用程序一样工作的应用程序,它会立即运行和退出。visualvm或NetBeansProfiler等工具甚至无法识别应用程序是否已运行。我正在寻找类似于Python的cProfile的东西,因为当应用程序退出时会返回探查器结果。 最佳答案 您可以使用JVM内置HPROF分析您的应用程序。它提供了两种方法:采样堆栈上的Activity方法计时使用注入(inject)字节码(BCI,字节码注入(inj

用于排列数字列表的 Java 代码

我编写了一个程序来查找给定项目列表的所有可能排列。这恰恰意味着我的程序打印了r=0到n的所有可能的P(n,r)值代码如下:包com.algorithm;导入java.util.ArrayList;导入java.util.Calendar;导入java.util.Collection;导入java.util.HashSet;导入java.util.List;导入java.util.Set;公共(public)类排列{publicstaticvoidmain(Stringargs[]){Permutationsobj=newPermutations();集合input=newArrayLi

java - 我可以使用超过 32 GB 的堆和压缩 oops

我可以理解,使用压缩的oops,我们只能使用32GB的RAM。有没有办法我可以通过分配2个堆或其他东西来使用更多?谢谢葡萄藤 最佳答案 您不能有多个堆(尽管您可以有多个JVM,这称为向外扩展而不是向上扩展)。JVM在32GiB内存以下自动使用压缩对象指针。如果您了解它的工作原理(从每个地址中删除最年轻的三位,因为由于内存对齐,它们始终为0),您就会明白您不能再进一步了。有一个有趣的事实:一旦超过这个32GiB边界,JVM将停止使用压缩对象指针,从而有效减少可用内存。这意味着您必须将JVM堆增加到32GiB以上。据大Everythin