Предполагая, что синглтон реализован как статические методы в классе или как статическая ссылка (есть ли другие способы?), Синглтон можно собрать, выгрузив загрузчик классов, который загрузил класс синглтона, предполагая, что ссылок нетиз классов в других загрузчиках классов (например, общая проблема - экземпляры ThreadLocal, висящие на ссылках.)
Я не использовал GAE, но я предполагаю, что это то, что происходит - загрузчик классов выгружается.GAE не знает, что это синглтон - он просто освобождает ссылку на загрузчик классов.Для приложений в контейнере, это в идеале единственная ссылка, хранящая приложение в памяти (если вам повезет!).Когда это недоступно, все приложение становится недоступным и собирается сборщиком мусора.Конечно, любые запущенные потоки могут иметь ссылки на экземпляры приложения, и поэтому это будет мешать этому, но я предполагаю, что контейнер контролирует потоки приложений и освобождает загрузчик классов, только когда нет запросов (т. Е. Потоков), выполняющих приложение.код.