This Bugzilla instance is a read-only archive of historic NetBeans bug reports. To report a bug in NetBeans please follow the project's instructions for reporting issues.

Bug 257632 - Save action block takes several minutes on rare occasions
Summary: Save action block takes several minutes on rare occasions
Status: RESOLVED INCOMPLETE
Alias: None
Product: java
Classification: Unclassified
Component: Hints (show other bugs)
Version: 8.1
Hardware: PC Windows 7
: P3 normal (vote)
Assignee: Svata Dedic
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2016-01-19 15:38 UTC by 99sono
Modified: 2016-05-20 09:55 UTC (History)
0 users

See Also:
Issue Type: DEFECT
Exception Reporter:


Attachments
Full thread dump at time of event (87.66 KB, text/plain)
2016-01-19 15:38 UTC, 99sono
Details
Drill down to parent class (73.90 KB, text/plain)
2016-01-27 08:57 UTC, 99sono
Details
Another save that takes several minutes threads dump (70.99 KB, text/plain)
2016-01-27 10:56 UTC, 99sono
Details
Same type of freeze during a find usages (55.15 KB, text/plain)
2016-01-27 11:08 UTC, 99sono
Details

Note You need to log in before you can comment on or make changes to this bug.
Description 99sono 2016-01-19 15:38:57 UTC
Created attachment 158181 [details]
Full thread dump at time of event

Hi,

First please let me just say that my Netbeans is tuned to use the Eclipse formatting plugin, in order to make sure that my saved files have the same formatting as those written by Eclipse IDE.

With this said, I've noticed that afer several hours working with netbeans, on ocasions the save aciton degrates and starts taking several minutes to conclude. 

This is particularly noticible if the file being saved has been editied in its javadoc and has many references pointing to it.
The issue has occured most often in files holding constants, such as

 public interface SomeConstant {
   String CONTANST_A = "whatever";
....
}

And the number of constants is large and other java classes referring to those constants is large. E.g. a project that may have more 40 maven modules and a central module being edited.


Memory is not an issue, the old generation is mostly free.
-Dnetbeans.importclass=org.netbeans.upgrade.AutoUpgrade
-Dnetbeans.accept_license_class=org.netbeans.license.AcceptLicense
-client
-Xss2m
-Xms832m
-Xmx3532m
-XX:PermSize=232m
-Dapple.laf.useScreenMenuBar=true
-Dapple.awt.graphics.UseQuartz=true
-Dsun.java2d.noddraw=true
-Dsun.java2d.dpiaware=true
-Dsun.zip.disableMemoryMapping=true
-XX:MaxPermSize=384m
-Djdk.home=C:\Program Files\Java\jdk1.7.0_79


Here is the example of a particular thread during this slowness event:

"Editor Parsing Loop (201510222201)" daemon prio=2 tid=0x0000000017aea000 nid=0x1dfc runnable [0x000000001a76b000]
   java.lang.Thread.State: RUNNABLE
	at java.util.regex.Pattern$BmpCharProperty.match(Pattern.java:3715)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4177)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4177)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4177)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4177)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.match(Pattern.java:4683)
	at java.util.regex.Pattern$GroupTail.match(Pattern.java:4615)
	at java.util.regex.Pattern$Ques.match(Pattern.java:4079)
	at java.util.regex.Pattern$Curly.match0(Pattern.java:4170)
	at java.util.regex.Pattern$Curly.match(Pattern.java:4132)
	at java.util.regex.Pattern$CharProperty.match(Pattern.java:3694)
	at java.util.regex.Pattern$GroupHead.match(Pattern.java:4556)
	at java.util.regex.Pattern$Loop.matchInit(Pattern.java:4702)
	at java.util.regex.Pattern$Prolog.match(Pattern.java:4639)
	at java.util.regex.Matcher.match(Matcher.java:1221)
	at java.util.regex.Matcher.matches(Matcher.java:559)
	at org.netbeans.modules.java.hints.suggestions.ConstantNameHint.checkConstantName(ConstantNameHint.java:166)
	at sun.reflect.GeneratedMethodAccessor93.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:606)
	at org.netbeans.modules.java.hints.providers.code.CodeHintProviderImpl$WorkerImpl.createErrors(CodeHintProviderImpl.java:339)
	at org.netbeans.modules.java.hints.spiimpl.hints.HintsInvoker.runHint(HintsInvoker.java:810)
	at org.netbeans.modules.java.hints.spiimpl.hints.HintsInvoker.access$400(HintsInvoker.java:112)
	at org.netbeans.modules.java.hints.spiimpl.hints.HintsInvoker$ScannerImpl.runAndAdd(HintsInvoker.java:669)
	at org.netbeans.modules.java.hints.spiimpl.hints.HintsInvoker$ScannerImpl.scan(HintsInvoker.java:688)
	at org.netbeans.modules.java.hints.spiimpl.hints.HintsInvoker$ScannerImpl.scan(HintsInvoker.java:622)
	at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:81)
	at com.sun.source.util.TreeScanner.scan(TreeScanner.java:91)
	at org.netbeans.api.java.source.support.CancellableTreePathScanner.scan(CancellableTreePathScanner.java:103)
	at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:99)
	at com.sun.source.util.TreeScanner.visitClass(TreeScanner.java:133)
	at com.sun.tools.javac.tree.JCTree$JCClassDecl.accept(JCTree.java:725)
	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:68)
	at org.netbeans.api.java.source.support.CancellableTreePathScanner.scan(CancellableTreePathScanner.java:94)
	at org.netbeans.modules.java.hints.spiimpl.hints.HintsInvoker$ScannerImpl.scan(HintsInvoker.java:694)
	at org.netbeans.modules.java.hints.spiimpl.hints.HintsInvoker$ScannerImpl.scan(HintsInvoker.java:622)
	at com.sun.source.util.TreeScanner.scan(TreeScanner.java:91)
	at org.netbeans.api.java.source.support.CancellableTreePathScanner.scan(CancellableTreePathScanner.java:103)
	at com.sun.source.util.TreeScanner.scanAndReduce(TreeScanner.java:99)
	at com.sun.source.util.TreeScanner.visitCompilationUnit(TreeScanner.java:120)
	at com.sun.tools.javac.tree.JCTree$JCCompilationUnit.accept(JCTree.java:551)
	at com.sun.source.util.TreePathScanner.scan(TreePathScanner.java:50)
	at org.netbeans.modules.java.hints.spiimpl.hints.HintsInvoker$ScannerImpl.scan(HintsInvoker.java:713)
	at org.netbeans.modules.java.hints.spiimpl.hints.HintsInvoker.computeHintsImpl(HintsInvoker.java:257)
	at org.netbeans.modules.java.hints.spiimpl.hints.HintsInvoker.computeHints(HintsInvoker.java:240)
	at org.netbeans.modules.java.hints.spiimpl.hints.HintsInvoker.computeHints(HintsInvoker.java:210)
	at org.netbeans.modules.java.hints.spiimpl.hints.HintsInvoker.computeHints(HintsInvoker.java:183)
	at org.netbeans.modules.java.hints.spiimpl.hints.HintsInvoker.computeHints(HintsInvoker.java:150)
	at org.netbeans.modules.java.hints.spiimpl.hints.HintsTask.run(HintsTask.java:137)
	at org.netbeans.modules.java.hints.spiimpl.hints.HintsTask.run(HintsTask.java:88)
	at org.netbeans.modules.java.source.JavaSourceAccessor$CancelableTaskWrapper.run(JavaSourceAccessor.java:298)
	at org.netbeans.modules.parsing.impl.TaskProcessor.callParserResultTask(TaskProcessor.java:584)
	at org.netbeans.modules.parsing.impl.TaskProcessor$RequestPerformer.run(TaskProcessor.java:809)
	at org.openide.util.lookup.Lookups.executeWith(Lookups.java:304)
	at org.netbeans.modules.parsing.impl.TaskProcessor$RequestPerformer.execute(TaskProcessor.java:725)
	at org.netbeans.modules.parsing.impl.TaskProcessor$CompilationJob.run(TaskProcessor.java:686)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
	at java.util.concurrent.FutureTask.run(FutureTask.java:262)
	at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:1443)
	at org.netbeans.modules.openide.util.GlobalLookup.execute(GlobalLookup.java:68)
	at org.openide.util.lookup.Lookups.executeWith(Lookups.java:303)
	at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:2058)
Comment 1 99sono 2016-01-19 15:43:08 UTC
One more point that may be relevant,

When I am in the middle of writting business logic and need to navigated from here to there, I have the habit of creating editor markers by writing entry points such as:

fixMe; 

And creating purposeful compilation errors on the file to which I can soon navigated back to fix. // FIXME - is not an anlternative for me if I plan to fix it on 2 or three minutes time.

;)

Many thanks.
Comment 2 99sono 2016-01-27 08:57:54 UTC
Created attachment 158240 [details]
Drill down to parent class

Clicking on a parent class prompted the Netbeans popup slow operation in progress, and again we see a similar stack trace.
Comment 3 99sono 2016-01-27 10:56:43 UTC
Created attachment 158243 [details]
Another save that takes several minutes threads dump

Another save that takes several minutes threads dump
Comment 4 99sono 2016-01-27 11:08:30 UTC
Created attachment 158244 [details]
Same type of freeze during a find usages

The issue does not seem to be particularly bound to an edit, save or any particular type of action.

The netbeans freeze can take polace during saving, or drilling down, or in this case during Ctrl + G find usages on a class.

Thanks.
Comment 5 99sono 2016-01-27 11:10:19 UTC
NOTE:

In the case of the find usges, Netbeans started freeing before the popup come up to select the packages or projects to find.

So it was if as a background process was active and that needed to finish before the popup find usages could be handled.

Thanks.
Comment 6 Svata Dedic 2016-05-20 09:55:53 UTC
Need more information. 
As a first check, please go to Tools | Options -> Editor / Hints. Select java as a languate and type 'constant' into the search box. Disable the Constant naming conventions hint.
Observe the behaviour on save. 

The stacktraces you posted suggest that something very fishy is going in the regexp matcher. This check can help to confirm that.


I would then appreciate the source file whose save provides such issues. If that's not possible, then please extract all static final fields from the class - the names are important; types or initializers are not.

Last, please add the following switch to netbeans.conf:
-J-DTIMER.level=400
this should produce a message every time the 'hints' task executes - possibly the hint itself is OK, but something triggers the processing more often.

Thanks.