Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [aspectj-users] OutOfMemory error in aspectj

Sorry to hear you were hit by this issue - I do see it come up now and
again that the script specifies the heap size.

> 1) ajc was a script. I think it was a bad idea for a script to set the
> maximum heap space. I think it should just leave the default JVM
> value.

i agree with that.

> 2) org.aspectj.tools.ajc.Main should not take a -Xmx option. It
> shouldn't because it doesn't affect the heap space. If the user
> provides it , ajc should exit with the message saying that this is an
> incorrect option.

sure

There are other -X options that are fine because they are AspectJ options...

-Xset, -Xnoinline, -Xlint

so I wouldn't police -X options in general - I would perhaps police any
that the arg parser isn't explicitly handling.

If you do me a patch, I'll look to integrate it.

cheers,
Andy.

2009/4/6 100ji <itz100ji@xxxxxxxxx>:
> Hi Andy,
>
> I finally nailed the bug. The reason I was getting an OOM even though
> I increased the memory was because I am using ajc script from the
> command line which invokes the jvm with 64M. So, the option I give the
> ajc doesn't really increase the memory of the JVM.
>
> This bug went unnoticed for these reasons:
>
> 3) The log file generated by ajc shows the -X option provided by user
> and not the heap space the JVM is using (64M in this case).
>
> ---- Command Line ---
> -Xmx4096m
>
> This is incorrect because on a 32 bit machine a process can't have
> that much memory. Also, it was a dummy value which is not being used.
>
> All these things gave me a false impression that I was running out of
> 4G of memory when I was not.
>
> I think the simplest fix is to fail when a user provides -X option. I
> just wasted 2 weeks of my life chasing a bug that didn't exist. Please
> fix this. I can send a patch if you want.
>
> -S-
> On Sat, Mar 28, 2009 at 5:36 PM, Andy Clement <andrew.clement@xxxxxxxxx> wrote:
>> Hi,
>>
>>> pointcut p1() : x
>>> pointcut p2(): y
>>> after(): p1() || p2() {
>>> z
>>> }
>>> instead of
>>> pointcut p1(): x
>>>after (): p1() {
>>> z
>>>}
>>>pointcut p2():y
>>>after(): p2() {
>>>z
>>>}
>>
>> No - I meant pointcuts on their own are free - there is no cost until you
>> attach advice.  So you don't have to eliminate any pointcuts you aren't
>> using yet in order to try and reduce memory consumption.
>>
>> >From the body of the method it has included in your trace, there certainly
>> are a few advised join points aren't there.
>>
>> However, it still looks a bit like it is crashing whilst crashing - can you
>> reduce it further?  I'm expecting to see an error that is nothing to do with
>> memory.
>>
>> The best way forward for you might to weave whatever it is in pieces rather
>> than all in one go.  Can you do some subset of the classes then another
>> bunch of them?  I imagine there are interdependencies but as long as the
>> types are accessible on the classpath, they will be found.
>>
>> Andy.
>>
>>
>> 2009/3/28 100ji <itz100ji@xxxxxxxxx>
>>>
>>> Hi Andy,
>>>
>>> Thanks for the response. This is a similar error, but in the weaver code
>>> (with half the join points and advice). I hope this helps a bit more.
>>>
>>> Also from what you are saying, does it mean that I am less likely to run
>>> over the limits if I implement my aspect like this
>>>
>>> pointcut p1() : x
>>>
>>> pointcut p2(): y
>>>
>>> after(): p1() || p2() {
>>> z
>>> }
>>>
>>> instead of
>>>
>>> pointcut p1(): x
>>>
>>> after (): p1() {
>>> z
>>> }
>>>
>>> pointcut p2():y
>>>
>>> after(): p2() {
>>> z
>>> }
>>>
>>> TIA,
>>> -S-
>>> ******************************
>>> ************************************* log file
>>> *****************************************************************
>>>
>>> ---- AspectJ Properties ---
>>> AspectJ Compiler 1.6.3 built on Tuesday Dec 23, 2008 at 17:12:30 GMT
>>> ---- Dump Properties ---
>>> Dump file: ajcore.20090328.133623.913.txt
>>> Dump reason: abort
>>> Dump on exception: true
>>> Dump at exit condition: abort
>>> ---- System Properties ---
>>> java.runtime.name=Java(TM) SE Runtime Environment
>>> sun.boot.library.path=/usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/i386
>>> java.vm.version=11.2-b01
>>> java.vm.vendor=Sun Microsystems Inc.
>>> java.vendor.url=http://java.sun.com/
>>> path.separator=:
>>> java.vm.name=Java HotSpot(TM) Server VM
>>> file.encoding.pkg=sun.io
>>> sun.java.launcher=SUN_STANDARD
>>> user.country=US
>>> sun.os.patch.level=unknown
>>> java.vm.specification.name=Java Virtual Machine Specification
>>> user.dir=/home/suman/exercise/steve_rnr/ytrace/ytrace
>>> java.runtime.version=1.6.0_12-b04
>>> java.awt.graphicsenv=sun.awt.X11GraphicsEnvironment
>>> java.endorsed.dirs=/usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/endorsed
>>> os.arch=i386
>>> java.io.tmpdir=/tmp
>>> line.separator=
>>>
>>> java.vm.specification.vendor=Sun Microsystems Inc.
>>> os.name=Linux
>>> sun.jnu.encoding=ANSI_X3.4-1968
>>>
>>> java.library.path=/usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/i386/server:/usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/i386:/usr/lib/jvm/java-6-sun-1.6.0.12/jre/../lib/i386:/u/suman/installs/lib:/usr/java/packages/lib/i386:/lib:/usr/lib
>>> java.specification.name=Java Platform API Specification
>>> java.class.version=50.0
>>> sun.management.compiler=HotSpot Tiered Compilers
>>> os.version=2.6.26-1-686
>>> user.home=/home/suman
>>> user.timezone=America/New_York
>>> java.awt.printerjob=sun.print.PSPrinterJob
>>> file.encoding=ANSI_X3.4-1968
>>> java.specification.version=1.6
>>>
>>> java.class.path=/home/suman/installs/aspectj1.6/lib/aspectjtools.jar:/usr/lib/jvm/java-6-sun/lib/tools.jar:/u/suman/installs/aspectj1.6/lib/:/u/suman/installs/lib/java/:.
>>> user.name=suman
>>> java.vm.specification.version=1.0
>>> java.home=/usr/lib/jvm/java-6-sun-1.6.0.12/jre
>>> sun.arch.data.model=32
>>> user.language=en
>>> java.specification.vendor=Sun Microsystems Inc.
>>> java.vm.info=mixed mode
>>> java.version=1.6.0_12
>>>
>>> java.ext.dirs=/usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/ext:/usr/java/packages/lib/ext
>>>
>>> sun.boot.class.path=/usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/resources.jar:/usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/rt.jar:/usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/jsse.jar:/usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/jce.jar:/usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/charsets.jar:/usr/lib/jvm/java-6-sun-1.6.0.12/jre/classes
>>> java.vendor=Sun Microsystems Inc.
>>> file.separator=/
>>> java.vendor.url.bug=http://java.sun.com/cgi-bin/bugreport.cgi
>>> sun.io.unicode.encoding=UnicodeLittle
>>> sun.cpu.endian=little
>>> sun.cpu.isalist=
>>> ---- Command Line ---
>>> -Xmx4096m
>>> -1.6
>>> -classpath
>>>
>>> /home/suman/exercise/steve_rnr/ytrace/ytrace_examples/crawler/javasrc/edu/brown/cs/cs032/crawler/ytrace//analysis/build/aspects:/home/suman/exercise/steve_rnr/ytrace/ytrace/bin:/u/suman/installs/libs/java/jyaml-1.3.jar:/u/suman/installs/libs/java/log4j-1.2.15.jar:/u/suman/installs/aspectj1.6//lib/aspectjrt.jar:/home/suman/exercise/steve_rnr/ytrace/ytrace/bin:/u/suman/installs/libs/java/bcel-5.2.jar:/home/suman/exercise/steve_rnr/ytrace/ytrace_examples/crawler/lib/Tidy.jar:.
>>> -aspectpath
>>>
>>> /home/suman/exercise/steve_rnr/ytrace/ytrace_examples/crawler/javasrc/edu/brown/cs/cs032/crawler/ytrace//analysis/build/aspects
>>> -inpath
>>> /home/suman/exercise/steve_rnr/ytrace/ytrace_examples/crawler/java/
>>> -d
>>>
>>> /home/suman/exercise/steve_rnr/ytrace/ytrace_examples/crawler/javasrc/edu/brown/cs/cs032/crawler/ytrace//analysis/build/shared_bins
>>> ---- Full Classpath ---
>>> /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/resources.jar(1140700 bytes)
>>> /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/rt.jar(51106468 bytes)
>>> /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/sunrsasign.jar(missing)
>>> /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/jsse.jar(618621 bytes)
>>> /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/jce.jar(88256 bytes)
>>> /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/charsets.jar(6737599 bytes)
>>> /usr/lib/jvm/java-6-sun-1.6.0.12/jre/classes(missing)
>>> /home/suman/exercise/steve_rnr/ytrace/ytrace_examples/crawler/java(1
>>> entries)
>>>
>>> /home/suman/exercise/steve_rnr/ytrace/ytrace_examples/crawler/javasrc/edu/brown/cs/cs032/crawler/ytrace/analysis/build/aspects(3
>>> entries)
>>> /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/ext/localedata.jar(841140 bytes)
>>> /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/ext/sunjce_provider.jar(170239
>>> bytes)
>>> /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/ext/sunpkcs11.jar(226069 bytes)
>>> /usr/lib/jvm/java-6-sun-1.6.0.12/jre/lib/ext/dnsns.jar(8239 bytes)
>>>
>>> /home/suman/exercise/steve_rnr/ytrace/ytrace_examples/crawler/javasrc/edu/brown/cs/cs032/crawler/ytrace/analysis/build/aspects(3
>>> entries)
>>> /home/suman/exercise/steve_rnr/ytrace/ytrace/bin(1 entries)
>>> /home/suman/installs/libs/java/jyaml-1.3.jar(59324 bytes)
>>> /home/suman/installs/libs/java/log4j-1.2.15.jar(391834 bytes)
>>> /home/suman/installs/aspectj1.6/lib/aspectjrt.jar(115346 bytes)
>>> /home/suman/exercise/steve_rnr/ytrace/ytrace/bin(1 entries)
>>> /home/suman/installs/libs/java/bcel-5.2.jar(533339 bytes)
>>>
>>> /home/suman/exercise/steve_rnr/ytrace/ytrace_examples/crawler/lib/Tidy.jar(138902
>>> bytes)
>>> /home/suman/exercise/steve_rnr/ytrace/ytrace(10 entries)
>>> ---- Compiler Messages ---
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:76::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:77::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:78::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:79::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:80::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:81::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:82::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:83::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:84::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:85::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:86::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:87::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:88::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:89::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:90::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:91::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:92::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:93::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:94::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:95::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:96::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:97::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:98::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:99::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:100::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:101::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:102::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:103::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:104::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlTidyParser.java:105::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlParser.java:165::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/crawl/CrawlParser.java:169::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/url/UrlHandle.java:84::0
>>> warning at /SharedBinsAspect.aj:216::0 does not match because declaring
>>> type is java.util.Set, if match desired use target(java.util.HashSet)
>>> [Xlint:unmatchedSuperTypeInCall]
>>>     see also: edu/brown/cs/cs032/crawler/url/UrlHandle.java:85::0
>>> abort trouble in:
>>> public class edu.brown.cs.cs032.crawler.crawl.CrawlMain extends
>>> java.lang.Object implements edu.brown.cs.cs032.crawler.crawl.CrawlConstants:
>>>   private int num_threads
>>>   private String url_file
>>>   private boolean do_test
>>>   private boolean do_create
>>>   private int start_at
>>>   private int url_count
>>>   private int active_count
>>>   private int page_total
>>>   private int pages_queued
>>>   private String base_directory
>>>   private Object work_sema
>>>   private Object urls_sema
>>>   private Object future_sema
>>>   private java.util.Set work_queue
>>> [Signature(Ljava/util/Set<Ledu/brown/cs/cs032/crawler/CrawlerUrl;>;)]
>>>   private java.util.Set urls_done
>>> [Signature(Ljava/util/Set<Ljava/lang/String;>;)]
>>>   private java.util.Set future_urls
>>> [Signature(Ljava/util/Set<Ljava/lang/String;>;)]
>>>   private java.util.Collection thread_set
>>> [Signature(Ljava/util/Collection<Ledu/brown/cs/cs032/crawler/crawl/CrawlThread;>;)]
>>>   private edu.brown.cs.cs032.crawler.CrawlerUrlManager url_manager
>>>   public static void main(String[]):
>>>     method-execution(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.main(java.lang.String[]))
>>>     |               NEW edu.brown.cs.cs032.crawler.crawl.CrawlMain   (line
>>> 58)
>>>     |               DUP
>>>     |               ALOAD_0     // [Ljava/lang/String; args
>>>     |               INVOKESPECIAL
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.<init> ([Ljava/lang/String;)V
>>>     |               ASTORE_1
>>>     |               ALOAD_1     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; cm   (line 60)
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.process())
>>>     | |             INVOKESPECIAL
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.process ()V
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.process())
>>>     |               ICONST_0   (line 62)
>>>     | method-call(void java.lang.System.exit(int))
>>>     | |             INVOKESTATIC java.lang.System.exit (I)V
>>>     | method-call(void java.lang.System.exit(int))
>>>     |               RETURN   (line 63)
>>>     method-execution(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.main(java.lang.String[]))
>>>   end public static void main(String[])
>>>
>>>   private void <init>(String[]):
>>>                     ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 99)
>>>                     INVOKESPECIAL java.lang.Object.<init> ()V
>>>     constructor-execution(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.<init>(java.lang.String[]))
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 100)
>>>     |               ICONST_2
>>>     | field-set(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.num_threads)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.num_threads I
>>>     | field-set(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.num_threads)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 101)
>>>     |               LDC "/u/spr/crawler/data/urllist"
>>>     | field-set(java.lang.String
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_file)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_file Ljava/lang/String;
>>>     | field-set(java.lang.String
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_file)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 102)
>>>     |               ICONST_1
>>>     | field-set(boolean
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_test)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_test Z
>>>     | field-set(boolean
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_test)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 103)
>>>     |               ICONST_0
>>>     | field-set(boolean
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_create)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_create Z
>>>     | field-set(boolean
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_create)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 104)
>>>     |               ICONST_0
>>>     | field-set(int edu.brown.cs.cs032.crawler.crawl.CrawlMain.start_at)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.start_at I
>>>     | field-set(int edu.brown.cs.cs032.crawler.crawl.CrawlMain.start_at)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 105)
>>>     |               SIPUSH 128
>>>     | field-set(int edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_count)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_count I
>>>     | field-set(int edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_count)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 106)
>>>     |               ICONST_0
>>>     | field-set(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count I
>>>     | field-set(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 107)
>>>     |               SIPUSH 10000
>>>     | field-set(int edu.brown.cs.cs032.crawler.crawl.CrawlMain.page_total)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.page_total I
>>>     | field-set(int edu.brown.cs.cs032.crawler.crawl.CrawlMain.page_total)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 108)
>>>     |               ICONST_0
>>>     | field-set(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.pages_queued)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.pages_queued I
>>>     | field-set(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.pages_queued)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 110)
>>>     |               NEW java.lang.Object
>>>     |               DUP
>>>     |               INVOKESPECIAL java.lang.Object.<init> ()V
>>>     | field-set(java.lang.Object
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_sema)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_sema Ljava/lang/Object;
>>>     | field-set(java.lang.Object
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_sema)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 111)
>>>     |               NEW java.util.LinkedHashSet
>>>     |               DUP
>>>     |               INVOKESPECIAL java.util.LinkedHashSet.<init> ()V
>>>     | field-set(java.util.Set
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_queue)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_queue Ljava/util/Set;
>>>     | field-set(java.util.Set
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_queue)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 112)
>>>     |               NEW java.util.HashSet
>>>     |               DUP
>>>     |               INVOKESPECIAL java.util.HashSet.<init> ()V
>>>     | field-set(java.util.Set
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_queue)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_queue Ljava/util/Set;
>>>     | field-set(java.util.Set
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_queue)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 113)
>>>     |               NEW java.lang.Object
>>>     |               DUP
>>>     |               INVOKESPECIAL java.lang.Object.<init> ()V
>>>     | field-set(java.lang.Object
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.urls_sema)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.urls_sema Ljava/lang/Object;
>>>     | field-set(java.lang.Object
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.urls_sema)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 114)
>>>     |               NEW java.util.HashSet
>>>     |               DUP
>>>     |               INVOKESPECIAL java.util.HashSet.<init> ()V
>>>     | field-set(java.util.Set
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.urls_done)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.urls_done Ljava/util/Set;
>>>     | field-set(java.util.Set
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.urls_done)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 115)
>>>     |               NEW java.lang.Object
>>>     |               DUP
>>>     |               INVOKESPECIAL java.lang.Object.<init> ()V
>>>     | field-set(java.lang.Object
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.future_sema)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.future_sema Ljava/lang/Object;
>>>     | field-set(java.lang.Object
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.future_sema)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 116)
>>>     |               NEW java.util.HashSet
>>>     |               DUP
>>>     |               INVOKESPECIAL java.util.HashSet.<init> ()V
>>>     | field-set(java.util.Set
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.future_urls)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.future_urls Ljava/util/Set;
>>>     | field-set(java.util.Set
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.future_urls)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 117)
>>>     |               NEW java.util.ArrayList
>>>     |               DUP
>>>     |               INVOKESPECIAL java.util.ArrayList.<init> ()V
>>>     | field-set(java.util.Collection
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.thread_set)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.thread_set Ljava/util/Collection;
>>>     | field-set(java.util.Collection
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.thread_set)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 118)
>>>     |               ACONST_NULL
>>>     | field-set(java.lang.String
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.base_directory)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.base_directory Ljava/lang/String;
>>>     | field-set(java.lang.String
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.base_directory)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 120)
>>>     |               ALOAD_1     // [Ljava/lang/String; args
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.scanArgs(java.lang.String[]))
>>>     | |             INVOKESPECIAL
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.scanArgs ([Ljava/lang/String;)V
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.scanArgs(java.lang.String[]))
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 122)
>>>     | method-call(edu.brown.cs.cs032.crawler.CrawlerUrlManager
>>> edu.brown.cs.cs032.crawler.CrawlerFactory.createUrlManager())
>>>     | |             INVOKESTATIC
>>> edu.brown.cs.cs032.crawler.CrawlerFactory.createUrlManager
>>> ()Ledu/brown/cs/cs032/crawler/CrawlerUrlManager;
>>>     | method-call(edu.brown.cs.cs032.crawler.CrawlerUrlManager
>>> edu.brown.cs.cs032.crawler.CrawlerFactory.createUrlManager())
>>>     | field-set(edu.brown.cs.cs032.crawler.CrawlerUrlManager
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager
>>> Ledu/brown/cs/cs032/crawler/CrawlerUrlManager;
>>>     | field-set(edu.brown.cs.cs032.crawler.CrawlerUrlManager
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 123)
>>>     | field-get(edu.brown.cs.cs032.crawler.CrawlerUrlManager
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager)
>>>     | |             GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager
>>> Ledu/brown/cs/cs032/crawler/CrawlerUrlManager;
>>>     | field-get(edu.brown.cs.cs032.crawler.CrawlerUrlManager
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this
>>>     | field-get(boolean
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_test)
>>>     | |             GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_test Z
>>>     | field-get(boolean
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_test)
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.setDoTesting(boolean))
>>>     | |             INVOKEINTERFACE
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.setDoTesting (Z)V
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.setDoTesting(boolean))
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 124)
>>>     | field-get(java.lang.String
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.base_directory)
>>>     | |             GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.base_directory Ljava/lang/String;
>>>     | field-get(java.lang.String
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.base_directory)
>>>     |               IFNULL L0
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 125)
>>>     | field-get(edu.brown.cs.cs032.crawler.CrawlerUrlManager
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager)
>>>     | |             GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager
>>> Ledu/brown/cs/cs032/crawler/CrawlerUrlManager;
>>>     | field-get(edu.brown.cs.cs032.crawler.CrawlerUrlManager
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this
>>>     | field-get(java.lang.String
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.base_directory)
>>>     | |             GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.base_directory Ljava/lang/String;
>>>     | field-get(java.lang.String
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.base_directory)
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.setBaseDirectory(java.lang.String))
>>>     | |             INVOKEINTERFACE
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.setBaseDirectory
>>> (Ljava/lang/String;)V
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.setBaseDirectory(java.lang.String))
>>>     |           L0: ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 127)
>>>     | field-get(boolean
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_create)
>>>     | |             GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_create Z
>>>     | field-get(boolean
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_create)
>>>     |               IFEQ L1
>>>     | field-get(java.io.PrintStream java.lang.System.err)
>>>     | |             GETSTATIC java.lang.System.err Ljava/io/PrintStream;
>>> (line 128)
>>>     | field-get(java.io.PrintStream java.lang.System.err)
>>>     |               LDC "CRAWL: Clearing Repository"
>>>     | method-call(void java.io.PrintStream.println(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.io.PrintStream.println
>>> (Ljava/lang/String;)V
>>>     | method-call(void java.io.PrintStream.println(java.lang.String))
>>>     | catch java.io.IOException -> E0
>>>     | |             ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 130)
>>>     | | field-get(edu.brown.cs.cs032.crawler.CrawlerUrlManager
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager)
>>>     | | |           GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager
>>> Ledu/brown/cs/cs032/crawler/CrawlerUrlManager;
>>>     | | field-get(edu.brown.cs.cs032.crawler.CrawlerUrlManager
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager)
>>>     | | method-call(void
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.clearRepository())
>>>     | | |           INVOKEINTERFACE
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.clearRepository ()V
>>>     | | method-call(void
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.clearRepository())
>>>     | catch java.io.IOException -> E0
>>>     |               GOTO L1   (line 134)
>>>     |           E0: ASTORE_2   (line 131)
>>>     | field-get(java.io.PrintStream java.lang.System.err)
>>>     | |             GETSTATIC java.lang.System.err Ljava/io/PrintStream;
>>> (line 132)
>>>     | field-get(java.io.PrintStream java.lang.System.err)
>>>     |               NEW java.lang.StringBuilder
>>>     |               DUP
>>>     |               INVOKESPECIAL java.lang.StringBuilder.<init> ()V
>>>     |               LDC "Problem clearing repository: "
>>>     | method-call(java.lang.StringBuilder
>>> java.lang.StringBuilder.append(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.lang.StringBuilder.append
>>> (Ljava/lang/String;)Ljava/lang/StringBuilder;
>>>     | method-call(java.lang.StringBuilder
>>> java.lang.StringBuilder.append(java.lang.String))
>>>     |               ALOAD_2     // Ljava/io/IOException; e
>>>     | method-call(java.lang.StringBuilder
>>> java.lang.StringBuilder.append(java.lang.Object))
>>>     | |             INVOKEVIRTUAL java.lang.StringBuilder.append
>>> (Ljava/lang/Object;)Ljava/lang/StringBuilder;
>>>     | method-call(java.lang.StringBuilder
>>> java.lang.StringBuilder.append(java.lang.Object))
>>>     | method-call(java.lang.String java.lang.StringBuilder.toString())
>>>     | |             INVOKEVIRTUAL java.lang.StringBuilder.toString
>>> ()Ljava/lang/String;
>>>     | method-call(java.lang.String java.lang.StringBuilder.toString())
>>>     | method-call(void java.io.PrintStream.println(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.io.PrintStream.println
>>> (Ljava/lang/String;)V
>>>     | method-call(void java.io.PrintStream.println(java.lang.String))
>>>     |               ICONST_1   (line 133)
>>>     | method-call(void java.lang.System.exit(int))
>>>     | |             INVOKESTATIC java.lang.System.exit (I)V
>>>     | method-call(void java.lang.System.exit(int))
>>>     |           L1: RETURN   (line 136)
>>>     constructor-execution(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.<init>(java.lang.String[]))
>>>   end private void <init>(String[])
>>>
>>>   private void scanArgs(String[]):
>>>     method-execution(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.scanArgs(java.lang.String[]))
>>>     |               ICONST_0   (line 145)
>>>     |               ISTORE_2
>>>     |           L0: ILOAD_2     // I i
>>>     |               ALOAD_1     // [Ljava/lang/String; args
>>>     |               ARRAYLENGTH
>>>     |               IF_ICMPGE L10
>>>     |               ALOAD_1     // [Ljava/lang/String; args   (line 146)
>>>     |               ILOAD_2     // I i
>>>     |               AALOAD
>>>     |               LDC "-t"
>>>     | method-call(boolean java.lang.String.startsWith(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.lang.String.startsWith
>>> (Ljava/lang/String;)Z
>>>     | method-call(boolean java.lang.String.startsWith(java.lang.String))
>>>     |               IFEQ L1
>>>     |               ILOAD_2     // I i
>>>     |               ICONST_1
>>>     |               IADD
>>>     |               ALOAD_1     // [Ljava/lang/String; args
>>>     |               ARRAYLENGTH
>>>     |               IF_ICMPGE L1
>>>     | catch java.lang.NumberFormatException -> E0
>>>     | |             ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 149)
>>>     | |             ALOAD_1     // [Ljava/lang/String; args
>>>     | |             IINC_2 1     // I i
>>>     | |             ILOAD_2     // I i
>>>     | |             AALOAD
>>>     | | method-call(int java.lang.Integer.parseInt(java.lang.String))
>>>     | | |           INVOKESTATIC java.lang.Integer.parseInt
>>> (Ljava/lang/String;)I
>>>     | | method-call(int java.lang.Integer.parseInt(java.lang.String))
>>>     | | field-set(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.num_threads)
>>>     | | |           PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.num_threads I
>>>     | | field-set(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.num_threads)
>>>     | catch java.lang.NumberFormatException -> E0
>>>     |               GOTO L9   (line 152)
>>>     |           E0: ASTORE_3   (line 150)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 151)
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.badArgs())
>>>     | |             INVOKESPECIAL
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.badArgs ()V
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.badArgs())
>>>     |               GOTO L9   (line 152)
>>>     |           L1: ALOAD_1     // [Ljava/lang/String; args   (line 153)
>>>     |               ILOAD_2     // I i
>>>     |               AALOAD
>>>     |               LDC "-u"
>>>     | method-call(boolean java.lang.String.startsWith(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.lang.String.startsWith
>>> (Ljava/lang/String;)Z
>>>     | method-call(boolean java.lang.String.startsWith(java.lang.String))
>>>     |               IFEQ L2
>>>     |               ILOAD_2     // I i
>>>     |               ICONST_1
>>>     |               IADD
>>>     |               ALOAD_1     // [Ljava/lang/String; args
>>>     |               ARRAYLENGTH
>>>     |               IF_ICMPGE L2
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 155)
>>>     |               ALOAD_1     // [Ljava/lang/String; args
>>>     |               IINC_2 1     // I i
>>>     |               ILOAD_2     // I i
>>>     |               AALOAD
>>>     | field-set(java.lang.String
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_file)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_file Ljava/lang/String;
>>>     | field-set(java.lang.String
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_file)
>>>     |               GOTO L9
>>>     |           L2: ALOAD_1     // [Ljava/lang/String; args   (line 156)
>>>     |               ILOAD_2     // I i
>>>     |               AALOAD
>>>     |               LDC "-s"
>>>     | method-call(boolean java.lang.String.startsWith(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.lang.String.startsWith
>>> (Ljava/lang/String;)Z
>>>     | method-call(boolean java.lang.String.startsWith(java.lang.String))
>>>     |               IFEQ L3
>>>     |               ILOAD_2     // I i
>>>     |               ICONST_1
>>>     |               IADD
>>>     |               ALOAD_1     // [Ljava/lang/String; args
>>>     |               ARRAYLENGTH
>>>     |               IF_ICMPGE L3
>>>     | catch java.lang.NumberFormatException -> E1
>>>     | |             ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 160)
>>>     | |             ALOAD_1     // [Ljava/lang/String; args
>>>     | |             IINC_2 1     // I i
>>>     | |             ILOAD_2     // I i
>>>     | |             AALOAD
>>>     | | method-call(int java.lang.Integer.parseInt(java.lang.String))
>>>     | | |           INVOKESTATIC java.lang.Integer.parseInt
>>> (Ljava/lang/String;)I
>>>     | | method-call(int java.lang.Integer.parseInt(java.lang.String))
>>>     | | field-set(int edu.brown.cs.cs032.crawler.crawl.CrawlMain.start_at)
>>>     | | |           PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.start_at I
>>>     | | field-set(int edu.brown.cs.cs032.crawler.crawl.CrawlMain.start_at)
>>>     | catch java.lang.NumberFormatException -> E1
>>>     |               GOTO L9   (line 163)
>>>     |           E1: ASTORE_3   (line 161)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 162)
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.badArgs())
>>>     | |             INVOKESPECIAL
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.badArgs ()V
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.badArgs())
>>>     |               GOTO L9   (line 163)
>>>     |           L3: ALOAD_1     // [Ljava/lang/String; args   (line 164)
>>>     |               ILOAD_2     // I i
>>>     |               AALOAD
>>>     |               LDC "-p"
>>>     | method-call(boolean java.lang.String.startsWith(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.lang.String.startsWith
>>> (Ljava/lang/String;)Z
>>>     | method-call(boolean java.lang.String.startsWith(java.lang.String))
>>>     |               IFEQ L4
>>>     |               ILOAD_2     // I i
>>>     |               ICONST_1
>>>     |               IADD
>>>     |               ALOAD_1     // [Ljava/lang/String; args
>>>     |               ARRAYLENGTH
>>>     |               IF_ICMPGE L4
>>>     | catch java.lang.NumberFormatException -> E2
>>>     | |             ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 167)
>>>     | |             ALOAD_1     // [Ljava/lang/String; args
>>>     | |             IINC_2 1     // I i
>>>     | |             ILOAD_2     // I i
>>>     | |             AALOAD
>>>     | | method-call(int java.lang.Integer.parseInt(java.lang.String))
>>>     | | |           INVOKESTATIC java.lang.Integer.parseInt
>>> (Ljava/lang/String;)I
>>>     | | method-call(int java.lang.Integer.parseInt(java.lang.String))
>>>     | | field-set(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_count)
>>>     | | |           PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_count I
>>>     | | field-set(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_count)
>>>     | catch java.lang.NumberFormatException -> E2
>>>     |               GOTO L9   (line 170)
>>>     |           E2: ASTORE_3   (line 168)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 169)
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.badArgs())
>>>     | |             INVOKESPECIAL
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.badArgs ()V
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.badArgs())
>>>     |               GOTO L9   (line 170)
>>>     |           L4: ALOAD_1     // [Ljava/lang/String; args   (line 171)
>>>     |               ILOAD_2     // I i
>>>     |               AALOAD
>>>     |               LDC "-n"
>>>     | method-call(boolean java.lang.String.startsWith(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.lang.String.startsWith
>>> (Ljava/lang/String;)Z
>>>     | method-call(boolean java.lang.String.startsWith(java.lang.String))
>>>     |               IFEQ L5
>>>     |               ILOAD_2     // I i
>>>     |               ICONST_1
>>>     |               IADD
>>>     |               ALOAD_1     // [Ljava/lang/String; args
>>>     |               ARRAYLENGTH
>>>     |               IF_ICMPGE L5
>>>     | catch java.lang.NumberFormatException -> E3
>>>     | |             ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 174)
>>>     | |             ALOAD_1     // [Ljava/lang/String; args
>>>     | |             IINC_2 1     // I i
>>>     | |             ILOAD_2     // I i
>>>     | |             AALOAD
>>>     | | method-call(int java.lang.Integer.parseInt(java.lang.String))
>>>     | | |           INVOKESTATIC java.lang.Integer.parseInt
>>> (Ljava/lang/String;)I
>>>     | | method-call(int java.lang.Integer.parseInt(java.lang.String))
>>>     | | field-set(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.page_total)
>>>     | | |           PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.page_total I
>>>     | | field-set(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.page_total)
>>>     | catch java.lang.NumberFormatException -> E3
>>>     |               GOTO L9   (line 177)
>>>     |           E3: ASTORE_3   (line 175)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 176)
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.badArgs())
>>>     | |             INVOKESPECIAL
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.badArgs ()V
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.badArgs())
>>>     |               GOTO L9   (line 177)
>>>     |           L5: ALOAD_1     // [Ljava/lang/String; args   (line 178)
>>>     |               ILOAD_2     // I i
>>>     |               AALOAD
>>>     |               LDC "-c"
>>>     | method-call(boolean java.lang.String.startsWith(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.lang.String.startsWith
>>> (Ljava/lang/String;)Z
>>>     | method-call(boolean java.lang.String.startsWith(java.lang.String))
>>>     |               IFEQ L6
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 179)
>>>     |               ICONST_1
>>>     | field-set(boolean
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_create)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_create Z
>>>     | field-set(boolean
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_create)
>>>     |               GOTO L9
>>>     |           L6: ALOAD_1     // [Ljava/lang/String; args   (line 180)
>>>     |               ILOAD_2     // I i
>>>     |               AALOAD
>>>     |               LDC "-r"
>>>     | method-call(boolean java.lang.String.startsWith(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.lang.String.startsWith
>>> (Ljava/lang/String;)Z
>>>     | method-call(boolean java.lang.String.startsWith(java.lang.String))
>>>     |               IFEQ L7
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 181)
>>>     |               ICONST_0
>>>     | field-set(boolean
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_test)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_test Z
>>>     | field-set(boolean
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_test)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 182)
>>>     |               ICONST_0
>>>     | field-set(boolean
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_create)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_create Z
>>>     | field-set(boolean
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.do_create)
>>>     |               GOTO L9
>>>     |           L7: ALOAD_1     // [Ljava/lang/String; args   (line 183)
>>>     |               ILOAD_2     // I i
>>>     |               AALOAD
>>>     |               LDC "-d"
>>>     | method-call(boolean java.lang.String.startsWith(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.lang.String.startsWith
>>> (Ljava/lang/String;)Z
>>>     | method-call(boolean java.lang.String.startsWith(java.lang.String))
>>>     |               IFEQ L8
>>>     |               ILOAD_2     // I i
>>>     |               ICONST_1
>>>     |               IADD
>>>     |               ALOAD_1     // [Ljava/lang/String; args
>>>     |               ARRAYLENGTH
>>>     |               IF_ICMPGE L8
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 185)
>>>     |               ALOAD_1     // [Ljava/lang/String; args
>>>     |               IINC_2 1     // I i
>>>     |               ILOAD_2     // I i
>>>     |               AALOAD
>>>     | field-set(java.lang.String
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.base_directory)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.base_directory Ljava/lang/String;
>>>     | field-set(java.lang.String
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.base_directory)
>>>     |               GOTO L9
>>>     |           L8: ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 187)
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.badArgs())
>>>     | |             INVOKESPECIAL
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.badArgs ()V
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.badArgs())
>>>     |           L9: IINC_2 1     // I i   (line 145)
>>>     |               GOTO L0
>>>     |          L10: RETURN   (line 189)
>>>     method-execution(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.scanArgs(java.lang.String[]))
>>>   end private void scanArgs(String[])
>>>
>>>   private void badArgs():
>>>     method-execution(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.badArgs())
>>>     | field-get(java.io.PrintStream java.lang.System.err)
>>>     | |             GETSTATIC java.lang.System.err Ljava/io/PrintStream;
>>> (line 192)
>>>     | field-get(java.io.PrintStream java.lang.System.err)
>>>     |               LDC "CRAWL: crawl [-t #threads] [-u urlfile] [-run]
>>> [-s start#] [-n #pages]"
>>>     | method-call(void java.io.PrintStream.println(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.io.PrintStream.println
>>> (Ljava/lang/String;)V
>>>     | method-call(void java.io.PrintStream.println(java.lang.String))
>>>     | field-get(java.io.PrintStream java.lang.System.err)
>>>     | |             GETSTATIC java.lang.System.err Ljava/io/PrintStream;
>>> (line 194)
>>>     | field-get(java.io.PrintStream java.lang.System.err)
>>>     |               LDC "             [-p #urls to process] [-create]"
>>>     | method-call(void java.io.PrintStream.println(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.io.PrintStream.println
>>> (Ljava/lang/String;)V
>>>     | method-call(void java.io.PrintStream.println(java.lang.String))
>>>     |               ICONST_0   (line 195)
>>>     | method-call(void java.lang.System.exit(int))
>>>     | |             INVOKESTATIC java.lang.System.exit (I)V
>>>     | method-call(void java.lang.System.exit(int))
>>>     |               RETURN   (line 196)
>>>     method-execution(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.badArgs())
>>>   end private void badArgs()
>>>
>>>   private void process():
>>>     method-execution(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.process())
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 205)
>>>     |               ICONST_1
>>>     | field-set(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count)
>>>     | |             PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count I
>>>     | field-set(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count)
>>>     | field-get(java.io.PrintStream java.lang.System.err)
>>>     | |             GETSTATIC java.lang.System.err Ljava/io/PrintStream;
>>> (line 207)
>>>     | field-get(java.io.PrintStream java.lang.System.err)
>>>     |               NEW java.lang.StringBuilder
>>>     |               DUP
>>>     |               INVOKESPECIAL java.lang.StringBuilder.<init> ()V
>>>     |               LDC "CRAWL: Start processing at "
>>>     | method-call(java.lang.StringBuilder
>>> java.lang.StringBuilder.append(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.lang.StringBuilder.append
>>> (Ljava/lang/String;)Ljava/lang/StringBuilder;
>>>     | method-call(java.lang.StringBuilder
>>> java.lang.StringBuilder.append(java.lang.String))
>>>     |               NEW java.util.Date
>>>     |               DUP
>>>     |               INVOKESPECIAL java.util.Date.<init> ()V
>>>     | method-call(java.lang.StringBuilder
>>> java.lang.StringBuilder.append(java.lang.Object))
>>>     | |             INVOKEVIRTUAL java.lang.StringBuilder.append
>>> (Ljava/lang/Object;)Ljava/lang/StringBuilder;
>>>     | method-call(java.lang.StringBuilder
>>> java.lang.StringBuilder.append(java.lang.Object))
>>>     | method-call(java.lang.String java.lang.StringBuilder.toString())
>>>     | |             INVOKEVIRTUAL java.lang.StringBuilder.toString
>>> ()Ljava/lang/String;
>>>     | method-call(java.lang.String java.lang.StringBuilder.toString())
>>>     | method-call(void java.io.PrintStream.println(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.io.PrintStream.println
>>> (Ljava/lang/String;)V
>>>     | method-call(void java.io.PrintStream.println(java.lang.String))
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 209)
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.startThreads())
>>>     | |             INVOKESPECIAL
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.startThreads ()V
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.startThreads())
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 210)
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.loadUrls())
>>>     | |             INVOKESPECIAL
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.loadUrls ()V
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.loadUrls())
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 212)
>>>     | field-get(java.lang.Object
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_sema)
>>>     | |             GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_sema Ljava/lang/Object;
>>>     | field-get(java.lang.Object
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_sema)
>>>     |               DUP
>>>     |               ASTORE_1
>>>     |               MONITORENTER
>>>     | finally -> E1
>>>     | |             ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 213)
>>>     | |             DUP
>>>     | | field-get(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count)
>>>     | | |           GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count I
>>>     | | field-get(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count)
>>>     | |             ICONST_1
>>>     | |             ISUB
>>>     | | field-set(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count)
>>>     | | |           PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count I
>>>     | | field-set(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count)
>>>     | |             ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 214)
>>>     | | field-get(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count)
>>>     | | |           GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count I
>>>     | | field-get(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count)
>>>     | |             IFNE L0
>>>     | |             ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 215)
>>>     | | field-get(java.lang.Object
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_sema)
>>>     | | |           GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_sema Ljava/lang/Object;
>>>     | | field-get(java.lang.Object
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_sema)
>>>     | | method-call(void java.lang.Object.notifyAll())
>>>     | | |           INVOKEVIRTUAL java.lang.Object.notifyAll ()V
>>>     | | method-call(void java.lang.Object.notifyAll())
>>>     | |         L0: ALOAD_1   (line 216)
>>>     | |             MONITOREXIT
>>>     | finally -> E1
>>>     |               GOTO L1
>>>     | finally -> E1
>>>     | |         E1: ASTORE_2
>>>     | |             ALOAD_1
>>>     | |             MONITOREXIT
>>>     | finally -> E1
>>>     |               ALOAD_2
>>>     |               ATHROW
>>>     |           L1: ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 218)
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.waitForDone())
>>>     | |             INVOKESPECIAL
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.waitForDone ()V
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.waitForDone())
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 220)
>>>     | field-get(edu.brown.cs.cs032.crawler.CrawlerUrlManager
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager)
>>>     | |             GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager
>>> Ledu/brown/cs/cs032/crawler/CrawlerUrlManager;
>>>     | field-get(edu.brown.cs.cs032.crawler.CrawlerUrlManager
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this
>>>     | field-get(java.lang.String
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_file)
>>>     | |             GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_file Ljava/lang/String;
>>>     | field-get(java.lang.String
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_file)
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this
>>>     | field-get(java.util.Set
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.future_urls)
>>>     | |             GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.future_urls Ljava/util/Set;
>>>     | field-get(java.util.Set
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.future_urls)
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.addFutureUrls(java.lang.String,
>>> java.util.Collection))
>>>     | |             INVOKEINTERFACE
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.addFutureUrls
>>> (Ljava/lang/String;Ljava/util/Collection;)V
>>>     | method-call(void
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.addFutureUrls(java.lang.String,
>>> java.util.Collection))
>>>     | field-get(java.io.PrintStream java.lang.System.err)
>>>     | |             GETSTATIC java.lang.System.err Ljava/io/PrintStream;
>>> (line 222)
>>>     | field-get(java.io.PrintStream java.lang.System.err)
>>>     |               NEW java.lang.StringBuilder
>>>     |               DUP
>>>     |               INVOKESPECIAL java.lang.StringBuilder.<init> ()V
>>>     |               LDC "CRAWL: Done processing at "
>>>     | method-call(java.lang.StringBuilder
>>> java.lang.StringBuilder.append(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.lang.StringBuilder.append
>>> (Ljava/lang/String;)Ljava/lang/StringBuilder;
>>>     | method-call(java.lang.StringBuilder
>>> java.lang.StringBuilder.append(java.lang.String))
>>>     |               NEW java.util.Date
>>>     |               DUP
>>>     |               INVOKESPECIAL java.util.Date.<init> ()V
>>>     | method-call(java.lang.StringBuilder
>>> java.lang.StringBuilder.append(java.lang.Object))
>>>     | |             INVOKEVIRTUAL java.lang.StringBuilder.append
>>> (Ljava/lang/Object;)Ljava/lang/StringBuilder;
>>>     | method-call(java.lang.StringBuilder
>>> java.lang.StringBuilder.append(java.lang.Object))
>>>     | method-call(java.lang.String java.lang.StringBuilder.toString())
>>>     | |             INVOKEVIRTUAL java.lang.StringBuilder.toString
>>> ()Ljava/lang/String;
>>>     | method-call(java.lang.String java.lang.StringBuilder.toString())
>>>     | method-call(void java.io.PrintStream.println(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.io.PrintStream.println
>>> (Ljava/lang/String;)V
>>>     | method-call(void java.io.PrintStream.println(java.lang.String))
>>>     |               RETURN   (line 223)
>>>     method-execution(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.process())
>>>   end private void process()
>>>
>>>   private void loadUrls():
>>>     method-execution(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.loadUrls())
>>>     | catch java.io.IOException -> E1
>>>     | |             NEW java.io.LineNumberReader   (line 233)
>>>     | |             DUP
>>>     | |             NEW java.io.FileReader
>>>     | |             DUP
>>>     | |             ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this
>>>     | | field-get(java.lang.String
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_file)
>>>     | | |           GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_file Ljava/lang/String;
>>>     | | field-get(java.lang.String
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_file)
>>>     | |             INVOKESPECIAL java.io.FileReader.<init>
>>> (Ljava/lang/String;)V
>>>     | |             INVOKESPECIAL java.io.LineNumberReader.<init>
>>> (Ljava/io/Reader;)V
>>>     | |             ASTORE_1
>>>     | |             ICONST_0   (line 236)
>>>     | |             ISTORE_2
>>>     | |         L0: ILOAD_2     // I i
>>>     | |             ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this
>>>     | | field-get(int edu.brown.cs.cs032.crawler.crawl.CrawlMain.start_at)
>>>     | | |           GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.start_at I
>>>     | | field-get(int edu.brown.cs.cs032.crawler.crawl.CrawlMain.start_at)
>>>     | |             IF_ICMPGE L2
>>>     | |             ALOAD_1     // Ljava/io/LineNumberReader; lnr   (line
>>> 237)
>>>     | | method-call(java.lang.String java.io.LineNumberReader.readLine())
>>>     | | |           INVOKEVIRTUAL java.io.LineNumberReader.readLine
>>> ()Ljava/lang/String;
>>>     | | method-call(java.lang.String java.io.LineNumberReader.readLine())
>>>     | |             ASTORE_3
>>>     | |             ALOAD_3     // Ljava/lang/String; ln   (line 238)
>>>     | |             IFNONNULL L1
>>>     | catch java.io.IOException -> E1
>>>     |               RETURN   (line 239)
>>>     | catch java.io.IOException -> E1
>>>     | |         L1: IINC_2 1     // I i   (line 236)
>>>     | |             GOTO L0
>>>     | |         L2: ICONST_0   (line 241)
>>>     | |             ISTORE_2
>>>     | |         L3: ILOAD_2     // I i
>>>     | |             ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this
>>>     | | field-get(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_count)
>>>     | | |           GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_count I
>>>     | | field-get(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_count)
>>>     | |             IF_ICMPGE L6
>>>     | |             ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this
>>>     | | field-get(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.pages_queued)
>>>     | | |           GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.pages_queued I
>>>     | | field-get(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.pages_queued)
>>>     | |             ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this
>>>     | | field-get(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.page_total)
>>>     | | |           GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.page_total I
>>>     | | field-get(int
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.page_total)
>>>     | |             IF_ICMPGT L6
>>>     | |             ALOAD_1     // Ljava/io/LineNumberReader; lnr   (line
>>> 242)
>>>     | | method-call(java.lang.String java.io.LineNumberReader.readLine())
>>>     | | |           INVOKEVIRTUAL java.io.LineNumberReader.readLine
>>> ()Ljava/lang/String;
>>>     | | method-call(java.lang.String java.io.LineNumberReader.readLine())
>>>     | |             ASTORE_3
>>>     | |             ALOAD_3     // Ljava/lang/String; ln   (line 243)
>>>     | |             IFNONNULL L4
>>>     | |             GOTO L6   (line 244)
>>>     | |         L4: ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 245)
>>>     | | field-get(edu.brown.cs.cs032.crawler.CrawlerUrlManager
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager)
>>>     | | |           GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager
>>> Ledu/brown/cs/cs032/crawler/CrawlerUrlManager;
>>>     | | field-get(edu.brown.cs.cs032.crawler.CrawlerUrlManager
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager)
>>>     | |             ALOAD_3     // Ljava/lang/String; ln
>>>     | |             ACONST_NULL
>>>     | | method-call(edu.brown.cs.cs032.crawler.CrawlerUrl
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.normalizeNewUrl(java.lang.String,
>>> edu.brown.cs.cs032.crawler.CrawlerUrl))
>>>     | | |           INVOKEINTERFACE
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.normalizeNewUrl
>>> (Ljava/lang/String;Ledu/brown/cs/cs032/crawler/CrawlerUrl;)Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>>     | | method-call(edu.brown.cs.cs032.crawler.CrawlerUrl
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.normalizeNewUrl(java.lang.String,
>>> edu.brown.cs.cs032.crawler.CrawlerUrl))
>>>     | |             ASTORE 4
>>>     | |             ALOAD 4     // Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>> url   (line 246)
>>>     | |             IFNULL L5
>>>     | |             ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this
>>>     | |             ALOAD 4     // Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>> url
>>>     | | method-call(boolean
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.addUrlCandidate(edu.brown.cs.cs032.crawler.CrawlerUrl))
>>>     | | |           INVOKESPECIAL
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.addUrlCandidate
>>> (Ledu/brown/cs/cs032/crawler/CrawlerUrl;)Z
>>>     | | method-call(boolean
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.addUrlCandidate(edu.brown.cs.cs032.crawler.CrawlerUrl))
>>>     | |             IFEQ L5
>>>     | |             IINC_2 1     // I i   (line 247)
>>>     | |         L5: GOTO L3   (line 248)
>>>     | |         L6: ALOAD_1     // Ljava/io/LineNumberReader; lnr   (line
>>> 249)
>>>     | | method-call(void java.io.LineNumberReader.close())
>>>     | | |           INVOKEVIRTUAL java.io.LineNumberReader.close ()V
>>>     | | method-call(void java.io.LineNumberReader.close())
>>>     | catch java.io.IOException -> E1
>>>     |               GOTO L7   (line 253)
>>>     |           E1: ASTORE_1   (line 250)
>>>     | field-get(java.io.PrintStream java.lang.System.err)
>>>     | |             GETSTATIC java.lang.System.err Ljava/io/PrintStream;
>>> (line 251)
>>>     | field-get(java.io.PrintStream java.lang.System.err)
>>>     |               NEW java.lang.StringBuilder
>>>     |               DUP
>>>     |               INVOKESPECIAL java.lang.StringBuilder.<init> ()V
>>>     |               LDC "CRAWL: Problem reading url file: "
>>>     | method-call(java.lang.StringBuilder
>>> java.lang.StringBuilder.append(java.lang.String))
>>>     | |             INVOKEVIRTUAL java.lang.StringBuilder.append
>>> (Ljava/lang/String;)Ljava/lang/StringBuilder;
>>>     | method-call(java.lang.StringBuilder
>>> java.lang.StringBuilder.append(java.lang.String))
>>>     |               ALOAD_1     // Ljava/io/IOException; e
>>>     |               INVOKEVIRTUAL java.lang.StringBuilder.append
>>> (Ljava/lang/Object;)Ljava/lang/StringBuilder;
>>>     |               INVOKEVIRTUAL java.lang.StringBuilder.toString
>>> ()Ljava/lang/String;
>>>     |               INVOKEVIRTUAL java.io.PrintStream.println
>>> (Ljava/lang/String;)V
>>>     |               ICONST_1   (line 252)
>>>     |               INVOKESTATIC java.lang.System.exit (I)V
>>>     |           L7: RETURN   (line 254)
>>>     method-execution(void
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.loadUrls())
>>>   end private void loadUrls()
>>>
>>>   void addRedirectUrl(edu.brown.cs.cs032.crawler.CrawlerUrl, String):
>>>                     ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 257)
>>>                     GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager
>>> Ledu/brown/cs/cs032/crawler/CrawlerUrlManager;
>>>                     ALOAD_2     // Ljava/lang/String; nm
>>>                     ALOAD_1     // Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>> base
>>>                     INVOKEINTERFACE
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.normalizeNewUrl
>>> (Ljava/lang/String;Ledu/brown/cs/cs032/crawler/CrawlerUrl;)Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>>                     ASTORE_3
>>>                     ALOAD_3     // Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>> url   (line 259)
>>>                     IFNULL L0
>>>                     ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 260)
>>>                     ALOAD_3     // Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>> url
>>>                     INVOKESPECIAL
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.addUrlCandidate
>>> (Ledu/brown/cs/cs032/crawler/CrawlerUrl;)Z
>>>                     POP
>>>                 L0: RETURN   (line 261)
>>>   end void addRedirectUrl(edu.brown.cs.cs032.crawler.CrawlerUrl, String)
>>>
>>>   edu.brown.cs.cs032.crawler.CrawlerUrl
>>> addUrlCandidate(edu.brown.cs.cs032.crawler.CrawlerUrl, String):
>>>                     ALOAD_2     // Ljava/lang/String; nm   (line 264)
>>>                     IFNONNULL L0
>>>                     ACONST_NULL   (line 265)
>>>                     ARETURN
>>>                 L0: ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 267)
>>>                     GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager
>>> Ledu/brown/cs/cs032/crawler/CrawlerUrlManager;
>>>                     ALOAD_2     // Ljava/lang/String; nm
>>>                     ALOAD_1     // Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>> base
>>>                     INVOKEINTERFACE
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.normalizeNewUrl
>>> (Ljava/lang/String;Ledu/brown/cs/cs032/crawler/CrawlerUrl;)Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>>                     ASTORE_3
>>>                     ALOAD_3     // Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>> url   (line 269)
>>>                     IFNULL L1
>>>                     ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this
>>>                     GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.pages_queued I
>>>                     ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this
>>>                     GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.page_total I
>>>                     IF_ICMPLE L2
>>>                 L1: ALOAD_3     // Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>> url   (line 270)
>>>                     ARETURN
>>>                 L2: ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 272)
>>>                     ALOAD_3     // Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>> url
>>>                     INVOKESPECIAL
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.addUrlCandidate
>>> (Ledu/brown/cs/cs032/crawler/CrawlerUrl;)Z
>>>                     POP
>>>                     ACONST_NULL   (line 274)
>>>                     ARETURN
>>>   end edu.brown.cs.cs032.crawler.CrawlerUrl
>>> addUrlCandidate(edu.brown.cs.cs032.crawler.CrawlerUrl, String)
>>>
>>>   private boolean addUrlCandidate(edu.brown.cs.cs032.crawler.CrawlerUrl):
>>>                     ALOAD_1     // Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>> url   (line 278)
>>>                     IFNONNULL L0
>>>                     ICONST_0   (line 279)
>>>                     IRETURN
>>>                 L0: ALOAD_1     // Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>> url   (line 281)
>>>                     INVOKEINTERFACE
>>> edu.brown.cs.cs032.crawler.CrawlerUrl.getNormalizedName ()Ljava/lang/String;
>>>                     ASTORE_2
>>>                     ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 283)
>>>                     GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.urls_sema Ljava/lang/Object;
>>>                     DUP
>>>                     ASTORE_3
>>>                     MONITORENTER
>>>     finally -> E2
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 284)
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.urls_done Ljava/util/Set;
>>>     |               ALOAD_2     // Ljava/lang/String; surl
>>>     |               INVOKEINTERFACE java.util.Set.contains
>>> (Ljava/lang/Object;)Z
>>>     |               IFEQ L1
>>>     |               ICONST_0   (line 285)
>>>     |               ALOAD_3
>>>     |               MONITOREXIT
>>>     finally -> E2
>>>                     IRETURN
>>>     finally -> E2
>>>     |           L1: ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 286)
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.urls_done Ljava/util/Set;
>>>     |               ALOAD_2     // Ljava/lang/String; surl
>>>     |               INVOKEINTERFACE java.util.Set.add
>>> (Ljava/lang/Object;)Z
>>>     |               POP
>>>     |               ALOAD_3   (line 287)
>>>     |               MONITOREXIT
>>>     finally -> E2
>>>                     GOTO L2
>>>     finally -> E2
>>>     |           E2: ASTORE 4
>>>     |               ALOAD_3
>>>     |               MONITOREXIT
>>>     finally -> E2
>>>                     ALOAD 4
>>>                     ATHROW
>>>                 L2: ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 289)
>>>                     GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_sema Ljava/lang/Object;
>>>                     DUP
>>>                     ASTORE_3
>>>                     MONITORENTER
>>>     finally -> E5
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 290)
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_queue Ljava/util/Set;
>>>     |               ALOAD_1     // Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>> url
>>>     |               INVOKEINTERFACE java.util.Set.contains
>>> (Ljava/lang/Object;)Z
>>>     |               IFEQ L3
>>>     |               ICONST_0   (line 291)
>>>     |               ALOAD_3
>>>     |               MONITOREXIT
>>>     finally -> E5
>>>                     IRETURN
>>>     finally -> E5
>>>     |           L3: ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 292)
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.pages_queued I
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.page_total I
>>>     |               IF_ICMPGT L4
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 293)
>>>     |               DUP
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.pages_queued I
>>>     |               ICONST_1
>>>     |               IADD
>>>     |               PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.pages_queued I
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 294)
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_queue Ljava/util/Set;
>>>     |               ALOAD_1     // Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>> url
>>>     |               INVOKEINTERFACE java.util.Set.add
>>> (Ljava/lang/Object;)Z
>>>     |               POP
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 295)
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_sema Ljava/lang/Object;
>>>     |               INVOKEVIRTUAL java.lang.Object.notify ()V
>>>     |           L4: ALOAD_3   (line 297)
>>>     |               MONITOREXIT
>>>     finally -> E5
>>>                     GOTO L5
>>>     finally -> E5
>>>     |           E5: ASTORE 5
>>>     |               ALOAD_3
>>>     |               MONITOREXIT
>>>     finally -> E5
>>>                     ALOAD 5
>>>                     ATHROW
>>>                 L5: ICONST_1   (line 299)
>>>                     IRETURN
>>>   end private boolean
>>> addUrlCandidate(edu.brown.cs.cs032.crawler.CrawlerUrl)
>>>
>>>   edu.brown.cs.cs032.crawler.CrawlerUrl getNextUrl():
>>>                     ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 303)
>>>                     GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_sema Ljava/lang/Object;
>>>                     DUP
>>>                     ASTORE_1
>>>                     MONITORENTER
>>>     finally -> E1
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 304)
>>>     |               DUP
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count I
>>>     |               ICONST_1
>>>     |               ISUB
>>>     |               PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count I
>>>     |               ALOAD_1   (line 305)
>>>     |               MONITOREXIT
>>>     finally -> E1
>>>                     GOTO L0
>>>     finally -> E1
>>>     |           E1: ASTORE_2
>>>     |               ALOAD_1
>>>     |               MONITOREXIT
>>>     finally -> E1
>>>                     ALOAD_2
>>>                     ATHROW
>>>                 L0: ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 310)
>>>                     GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_sema Ljava/lang/Object;
>>>                     DUP
>>>                     ASTORE_2
>>>                     MONITORENTER
>>>     finally -> E5
>>>     |           L1: ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 311)
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_queue Ljava/util/Set;
>>>     |               INVOKEINTERFACE java.util.Set.isEmpty ()Z
>>>     |               IFEQ L3
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 312)
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count I
>>>     |               IFNE L2
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 313)
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_sema Ljava/lang/Object;
>>>     |               INVOKEVIRTUAL java.lang.Object.notifyAll ()V
>>>     |               ACONST_NULL   (line 314)
>>>     |               ALOAD_2
>>>     |               MONITOREXIT
>>>     finally -> E5
>>>                     ARETURN
>>>     finally -> E5
>>>     | catch java.lang.InterruptedException -> E2
>>>     | |         L2: ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 317)
>>>     | |             GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_sema Ljava/lang/Object;
>>>     | |             INVOKEVIRTUAL java.lang.Object.wait ()V
>>>     | catch java.lang.InterruptedException -> E2
>>>     |               GOTO L1   (line 319)
>>>     |           E2: ASTORE_3   (line 318)
>>>     |               GOTO L1   (line 319)
>>>     |           L3: ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 322)
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_queue Ljava/util/Set;
>>>     |               INVOKEINTERFACE java.util.Set.iterator
>>> ()Ljava/util/Iterator;
>>>     |               ASTORE_3
>>>     |               ALOAD_3     // Ljava/util/Iterator; it   (line 323)
>>>     |               INVOKEINTERFACE java.util.Iterator.next
>>> ()Ljava/lang/Object;
>>>     |               CHECKCAST edu.brown.cs.cs032.crawler.CrawlerUrl
>>>     |               ASTORE_1
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 324)
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_queue Ljava/util/Set;
>>>     |               ALOAD_1     // Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>> u
>>>     |               INVOKEINTERFACE java.util.Set.remove
>>> (Ljava/lang/Object;)Z
>>>     |               POP
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 325)
>>>     |               DUP
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count I
>>>     |               ICONST_1
>>>     |               IADD
>>>     |               PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count I
>>>     |               ALOAD_2   (line 326)
>>>     |               MONITOREXIT
>>>     finally -> E5
>>>                     GOTO L4
>>>     finally -> E5
>>>     |           E5: ASTORE 4
>>>     |               ALOAD_2
>>>     |               MONITOREXIT
>>>     finally -> E5
>>>                     ALOAD 4
>>>                     ATHROW
>>>                 L4: ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 328)
>>>                     GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.url_manager
>>> Ledu/brown/cs/cs032/crawler/CrawlerUrlManager;
>>>                     ALOAD_1     // Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>> u
>>>                     INVOKEINTERFACE
>>> edu.brown.cs.cs032.crawler.CrawlerUrlManager.beginProcessing
>>> (Ledu/brown/cs/cs032/crawler/CrawlerUrl;)Z
>>>                     IFEQ L5
>>>                     ALOAD_1     // Ledu/brown/cs/cs032/crawler/CrawlerUrl;
>>> u   (line 329)
>>>                     ARETURN
>>>                 L5: ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 331)
>>>                     GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_sema Ljava/lang/Object;
>>>                     DUP
>>>                     ASTORE_2
>>>                     MONITORENTER
>>>     finally -> E7
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 332)
>>>     |               DUP
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.page_total I
>>>     |               ICONST_1
>>>     |               IADD
>>>     |               PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.page_total I
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 333)
>>>     |               DUP
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count I
>>>     |               ICONST_1
>>>     |               ISUB
>>>     |               PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count I
>>>     |               ALOAD_2   (line 334)
>>>     |               MONITOREXIT
>>>     finally -> E7
>>>                     GOTO L6
>>>     finally -> E7
>>>     |           E7: ASTORE 5
>>>     |               ALOAD_2
>>>     |               MONITOREXIT
>>>     finally -> E7
>>>                     ALOAD 5
>>>                     ATHROW
>>>                 L6: GOTO L0   (line 336)
>>>   end edu.brown.cs.cs032.crawler.CrawlerUrl getNextUrl()
>>>
>>>   void addFutureUrls(java.util.Collection):
>>>                     ALOAD_1     // Ljava/util/Collection; c   (line 340)
>>>                     IFNULL L0
>>>                     ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 341)
>>>                     GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.future_sema Ljava/lang/Object;
>>>                     DUP
>>>                     ASTORE_2
>>>                     MONITORENTER
>>>     finally -> E1
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 342)
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.future_urls Ljava/util/Set;
>>>     |               ALOAD_1     // Ljava/util/Collection; c
>>>     |               INVOKEINTERFACE java.util.Set.addAll
>>> (Ljava/util/Collection;)Z
>>>     |               POP
>>>     |               ALOAD_2   (line 343)
>>>     |               MONITOREXIT
>>>     finally -> E1
>>>                     GOTO L0
>>>     finally -> E1
>>>     |           E1: ASTORE_3
>>>     |               ALOAD_2
>>>     |               MONITOREXIT
>>>     finally -> E1
>>>                     ALOAD_3
>>>                     ATHROW
>>>                 L0: RETURN   (line 345)
>>>   end void addFutureUrls(java.util.Collection)
>>>
>>>   private void startThreads():
>>>                     ICONST_0   (line 354)
>>>                     ISTORE_1
>>>                 L0: ILOAD_1     // I i
>>>                     ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this
>>>                     GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.num_threads I
>>>                     IF_ICMPGE L2
>>>                     NEW edu.brown.cs.cs032.crawler.crawl.CrawlThread
>>> (line 355)
>>>                     DUP
>>>                     ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this
>>>                     ILOAD_1     // I i
>>>                     INVOKESPECIAL
>>> edu.brown.cs.cs032.crawler.crawl.CrawlThread.<init>
>>> (Ledu/brown/cs/cs032/crawler/crawl/CrawlMain;I)V
>>>                     ASTORE_2
>>>                     ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 356)
>>>                     GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.thread_set Ljava/util/Collection;
>>>                     ALOAD_2     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlThread; ct
>>>                     INVOKEINTERFACE java.util.Collection.add
>>> (Ljava/lang/Object;)Z
>>>                     POP
>>>                     ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 357)
>>>                     GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.work_sema Ljava/lang/Object;
>>>                     DUP
>>>                     ASTORE_3
>>>                     MONITORENTER
>>>     finally -> E1
>>>     |               ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 358)
>>>     |               DUP
>>>     |               GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count I
>>>     |               ICONST_1
>>>     |               IADD
>>>     |               PUTFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.active_count I
>>>     |               ALOAD_2     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlThread; ct   (line 359)
>>>     |               INVOKEVIRTUAL
>>> edu.brown.cs.cs032.crawler.crawl.CrawlThread.start ()V
>>>     |               ALOAD_3   (line 360)
>>>     |               MONITOREXIT
>>>     finally -> E1
>>>                     GOTO L1
>>>     finally -> E1
>>>     |           E1: ASTORE 4
>>>     |               ALOAD_3
>>>     |               MONITOREXIT
>>>     finally -> E1
>>>                     ALOAD 4
>>>                     ATHROW
>>>                 L1: IINC_1 1     // I i   (line 354)
>>>                     GOTO L0
>>>                 L2: RETURN   (line 362)
>>>   end private void startThreads()
>>>
>>>   private void waitForDone():
>>>                     ALOAD_0     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlMain; this   (line 365)
>>>                     GETFIELD
>>> edu.brown.cs.cs032.crawler.crawl.CrawlMain.thread_set Ljava/util/Collection;
>>>                     INVOKEINTERFACE java.util.Collection.iterator
>>> ()Ljava/util/Iterator;
>>>                     ASTORE_1
>>>                 L0: ALOAD_1     // Ljava/util/Iterator; i$
>>>                     INVOKEINTERFACE java.util.Iterator.hasNext ()Z
>>>                     IFEQ L2
>>>                     ALOAD_1     // Ljava/util/Iterator; i$
>>>                     INVOKEINTERFACE java.util.Iterator.next
>>> ()Ljava/lang/Object;
>>>                     CHECKCAST edu.brown.cs.cs032.crawler.crawl.CrawlThread
>>>                     ASTORE_2
>>>     catch java.lang.InterruptedException -> E0
>>>     |               ALOAD_2     //
>>> Ledu/brown/cs/cs032/crawler/crawl/CrawlThread; ct   (line 367)
>>>     |               INVOKEVIRTUAL
>>> edu.brown.cs.cs032.crawler.crawl.CrawlThread.join ()V
>>>     catch java.lang.InterruptedException -> E0
>>>                     GOTO L1   (line 369)
>>>                 E0: ASTORE_3   (line 368)
>>>                 L1: GOTO L0   (line 369)
>>>                 L2: RETURN   (line 371)
>>>   end private void waitForDone()
>>>
>>> end public class edu.brown.cs.cs032.crawler.crawl.CrawlMain
>>>  -- (OutOfMemoryError) GC overhead limit exceeded
>>> GC overhead limit exceeded
>>> java.lang.OutOfMemoryError: GC overhead limit exceeded
>>>     at java.util.Arrays.copyOfRange(Arrays.java:3209)
>>>     at java.lang.String.<init>(String.java:216)
>>>     at java.lang.StringBuffer.toString(StringBu
>>
>> _______________________________________________
>> aspectj-users mailing list
>> aspectj-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/aspectj-users
>>
>>
> _______________________________________________
> aspectj-users mailing list
> aspectj-users@xxxxxxxxxxx
> h


Back to the top