Jam*_*hek 17
单例异常应该是性能优化.我们的想法是,在创建异常(通常是异常中最昂贵的部分)时,可以消除填充堆栈跟踪的成本.
如果异常足够独特且具有描述性并且不会使用堆栈跟踪,则单例可能有效.您可以设计应用程序,使具有特定消息的特定异常类型始终表示从特定位置开始的异常.然后堆栈跟踪将无关紧要.
在2003年4月22日技术技巧文章描述了你重用异常的情况.在这种情况下,他们试图通过减少创建的对象数来对垃圾收集器进行游戏.如果您跳过了populateStackTrace()通话,则无需担心线程.
通常,如果异常的性能影响导致问题,则表明应用程序逻辑正在使用异常,而应使用错误代码.
在较新的JVM(1.4+,我相信)中,这种"优化"可以在"-server"模式下运行时由JVM自动完成.此热点优化可由该选项控制-XX:+OmitStackTraceInFastThrow.
就个人而言,我建议不要使用单例异常[反]模式.