<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><div>On Aug 4, 2008, at 1:26 PM, Charles Oliver Nutter wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><p style="margin: 0.0px 0.0px 0.0px 0.0px"><font face="Helvetica" size="3" style="font: 12.0px Helvetica">I asked because I've seen that too...LogCompilation messages about a method being too big when that method consisted almost entirely of an assertion line. Guess I'll have to be more careful about not putting assertions in the hottest, smallest methods like field accessors, eh?</font></p> </blockquote></div><br><div>The most common cliff to step off of is MaxInlineSize, the size (in bytecodes) beyond which a method is not inlined unless there is strong evidence to the contrary, such as a hot profile.  The number is currently 35.  Adding an assert to a field accessor method should not kick you over that limit, unless the assert has a complex structure.</div><div><br></div><div>Here's a rule of thumb, which should remain valid across a wide range of JVMs:  If a hot method contains cold paths, factor the code on those paths out into a (private) subroutine.  Assert expressions are cold paths, because they are not taken when asserts are disabled.</div><div><br></div><div>-- John</div><div><br></div><div>Not so good:</div><div><div>    String getName() {</div><div>        assert(name.indexOf('/') == name.lastIndexOf('/'));</div><div>        return name;</div><div>    }</div><div>    String getName2() {</div><div>        if (name.length() > 15)  throw new RuntimeException("length of name is "+name.length());</div><div>        return name;</div><div>    }</div><div><br></div></div><div>Better:</div><div><div><div><div>    String getName() {</div><div>        assert(!nameHasTwoSlashes());</div><div>        return name;</div><div>    }</div><div>    private boolean nameHasTwoSlashes() {</div><div>        return name.indexOf('/') != name.lastIndexOf('/');</div><div>    }</div><div>    String getName2() {</div><div>        if (name.length() > 15)  throw nameTooLongException();</div><div>        return name;</div><div>    }</div><div>    private RuntimeException nameTooLongException() {</div><div>        return new RuntimeException("length of name is "+name.length());</div><div>    }</div><div><br></div></div></div></div></body></html>