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

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:

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.
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.
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
>
>


Back to the top