在Java 8中,提供了各种方便的实用程序来从阵列构建高效的Spliterator.但是,没有提供工厂方法来构建带有比较器的Spliterator.显然,Spliterators可以附加比较器; 他们有getComparator()
方法和SORTED
财产.
图书馆作者如何构建SORTED
Spliterator?
Linux perf-tools非常适合在CPU周期中查找热点并优化这些热点.但是,一旦某些部件被并行化,就很难发现顺序部件,因为它们占用了大量的墙壁时间,但不一定需要很多CPU周期(并行部件已经烧掉了这些部件).
为了避免XY问题:我的基本动机是在多线程代码中找到顺序瓶颈.并行阶段很容易控制聚合CPU周期统计数据,即使由于amdahl定律,连续阶段占据了时间.
对于java应用程序,使用具有线程利用时间轴的visualvm或yourkit相当容易实现.
请注意,它显示了所选范围或时间点的线程状态(可运行,等待,阻塞)和堆栈样本.
如何在Linux上实现与perf或其他原生剖析器相媲美的东西?它不一定是GUI可视化,只是一种查找与它们相关的顺序瓶颈和CPU样本的方法.
我正在尝试做这样的事情:
Stream<Object> stream = IntStream.of(...)
.flatMapToObj(i -> getStreamOfObjects(i));
Run Code Online (Sandbox Code Playgroud)
不幸的是,IntStream.flatMapToObj()
即使在Java 9中也不存在.
目前,我们通过添加-Xincgc
到java命令来使用增量垃圾收集器.在JDK 8中,不推荐使用此开关.那么什么是它的等效替代品呢?-XX:+UseG1GC
?
背景:应用程序有一个8GB的堆,并创建了许多短生命对象.我注意到它经常暂停几秒钟来进行垃圾收集.出于好奇,我加入-Xincgc
并发现停顿消失了,整体性能提高了~4倍.
不幸的是,我没有找到任何有关-Xincgc
触发器的垃圾收集器类型的信息.有CMS(并发标记和扫描)和新G1(垃圾优先).但是我得到了-Xincgc
什么?
我被提到这个GC暂停问题 ; 它建议将-XX:+PerfDisableSharedMem
JVM标志设置为false
.我的问题是当我们设置此标志时会发生什么false
,
OpenJDK 9的新Unified JVM日志记录可以按标签过滤日志,但JEP不提供所有可用标记的列表.如何列出所有可用参数?
perf record
如果核心利用率大致恒定,则使用cpu周期进行采样对于查找优化候选者很有用。但是对于具有多个阶段的并行度不同的代码,计算cpu周期将着重强调并行阶段,同时又不强调会影响墙壁时间的顺序或有限并行度阶段。简而言之,单纯使用perf可能会凸显阿姆达尔定律的错误之处
因此,问题是如何找到perf record
/ perf report
寻找减少墙壁时间的优化候选者,这可能是从并行并行代码中最热的循环到中等并行瓶颈到长单线程阶段的任何东西。
已知的解决方法有一些不足之处:
元:这是一个法律约束特定随访到一个更一般的问题
ExecutorService executorService = Executors.newSingleThreadExecutor();
Set<Callable<String>> callables = new HashSet<Callable<String>>();
callables.add(new Callable<String>() {
public String call() throws Exception {
return "Task 1";
}
});
callables.add(new Callable<String>() {
public String call() throws Exception {
return "Task 2";
}
});
callables.add(new Callable<String>() {
public String call() throws Exception {
return "Task 3";
}
});
List<Future<String>> futures = executorService.invokeAll(callables);
for(Future<String> future : futures){
System.out.println("future.get = " + future.get());
}
Run Code Online (Sandbox Code Playgroud)
对于这段代码.我的问题是"是invokeAll()阻塞调用"?我的意思是,当代码运行到invokeAll()行时,我们是否在那里等待所有结果生成?
在JavaScript库(铆钉)中查找性能问题时,我发现垃圾收集在运行中发生了三到四次,占用了大约15%的执行时间(使用Chrome DevTools JS Profile).
由于垃圾收集的原因,至少有30个临时功能/对象被创建为潜在候选者的地方.
我想知道是否有办法找到哪些函数负责分配被垃圾收集的内存,所以我可以集中我的性能调优.
我记录了Heap Allocation TimeLine,但它没有区分垃圾收集的内存和仍然保存引用的内存(DevTools doc中没有指向灰色栏)
还记录堆分配配置文件没有运气.
javascript garbage-collection memory-management google-chrome-devtools
我是新的Intellij for Grails应用程序,同时运行应用程序执行很多事情,警告"处理输出太多"并需要相对更多的时间来启动服务器.以下是日志屏幕
(AbstractAutowireCapableBeanFactory.java:539)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:475)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:298)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:687)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:762)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:482)
at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:403)
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
at org.codehaus.groovy.grails.web.context.GrailsContextLoaderListener.initWebApplicationContext(GrailsContextLoaderListener.java:71)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4992)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5490)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1575)
at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1565)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.IllegalArgumentException: Can not copy a non-root Method
at java.lang.reflect.Method.copy(Method.java:151)
... 57 more
Jun 20, 2015 11:53:02 PM org.springsource.loaded.jvm.JVM copyMethod
SEVERE: Problems copying method. Incompatible JVM?
java.lang.reflect.InvocationTargetException
at sun.reflect.GeneratedMethodAccessor56.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at …
Run Code Online (Sandbox Code Playgroud) java ×5
java-8 ×3
jvm ×3
linux ×2
perf ×2
performance ×2
profiling ×2
concurrency ×1
g1gc ×1
grails ×1
java-9 ×1
java-stream ×1
javascript ×1
spliterator ×1