我在下面有一个python代码,它在100mil循环append中出现内存不足错误。具有相同代码的java在没有任何调优的情况下根本不存在这个问题。
无论如何,要使用python命令或类似javahotspot的jvm命令进行调优吗?
无论如何,要使用编码方式进行调优,使其运行更快,占用更少的内存。
import datetime;
mylist = []
before = datetime.datetime.now()
for _ in range(100000000):
mylist.append(datetime.datetime.now())
print("List length-->" , len(mylist))
after = datetime.datetime.now()
print ('Python time taken in seconds--->', (after - before).seconds)
张贴说明:
此“datetime.datetime.now()上的内存泄漏检测”
在这里分享我的java代码。在没有jvm调优的情况下,它的工作速度提高了10倍以上,进程在大约6秒钟内完成。
无论如何,java比python做得更好。从20年前开始,java通常不会在这种简单的操作中崩溃。https://www.snaplogic.com/glossary/python-vs-java-performance
注意:将system.currenttimemillis()更改为new date()并没有什么不同。
package demo;
import java.util.ArrayList;
import java.util.List;
public class Performance {
public static void main(String[] args) {
List<Long> mylist = new ArrayList<Long>();
long before = System.currentTimeMillis();
for (int i = 0; i < 100000000; i++) {
mylist.add(System.currentTimeMillis());
}
long after = System.currentTimeMillis();
System.out.println("Java time taken in miliseconds--->" + (after - before) );
}
}
2条答案
按热度按时间qhhrdooz1#
因为表示unix历元时间戳的int比
datetime.datetime
物体你可以这样做:
h4cxqtbf2#
你能用一个生成器表达式吗?您不能计算这样一个表达式的长度,因为值只在您迭代表达式时生成(因此内存需求非常低)。下面是一个演示:
印刷品:
当然,你不妨打个电话
datetime.datetime.now()
当您需要一个新的值而不是在这个特殊情况下使用生成器表达式时。但是上面显示了生成器表达式在一般情况下的有用性。