Что такое фасетный поиск?

Обнуление локальных переменных может действительно помочь в некоторых пограничных случаях. Это не относится к ситуации в исходном вопросе, но является образовательным так или иначе... Давайте рассмотрим эту программу:

public class Main {
    public static void main(String[] args) {
       {
           Main local = new Main();

           // inner = null;
       }

       while (true) {
           // long running method
       }
    }
}

, Если inner = null; комментируется, объект в local, переменная не может быть собрана "мусор" во время цикла с условием продолжения. Причина состоит в том, что виртуальная машина Java не знает об объемах как это. Все, что это имеет:

D:\workspaces\workspace-3.4\test\src>javap -verbose -c Main
public class Main extends java.lang.Object
  minor version: 0
  major version: 50
  Constant pool:
const #1 = Method       #4.#11; //  java/lang/Object."":()V
const #2 = class        #12;    //  Main
const #3 = Method       #2.#11; //  Main."":()V
const #4 = class        #13;    //  java/lang/Object
const #5 = Asciz        ;
const #6 = Asciz        ()V;
const #7 = Asciz        Code;
const #8 = Asciz        main;
const #9 = Asciz        ([Ljava/lang/String;)V;
const #10 = Asciz       StackMapTable;
const #11 = NameAndType #5:#6;//  "":()V
const #12 = Asciz       Main;
const #13 = Asciz       java/lang/Object;

{
public Main();
  Code:
   Stack=1, Locals=1, Args_size=1
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."":()V
   4:   return

public static void main(java.lang.String[]);
  Code:
   Stack=2, Locals=2, Args_size=1
   0:   new     #2; //class Main
   3:   dup
   4:   invokespecial   #3; //Method "":()V
   7:   astore_1
   8:   goto    8
  StackMapTable: number_of_entries = 1
   frame_type = 8 /* same */

}

нет никакой информации об объеме локальной переменной. Таким образом с точки зрения JVM, выше программы эквивалентно:

public class Main
{

    public Main() { }

    public static void main(String args[])
    {
        Main main1 = new Main();
        do
            ;
        while(true);
    }
}

(Сгенерированный декомпилятором JAD)

Заключение: СУЩЕСТВУЕТ некоторое объяснение в обнулении локальных переменных в совершенно особых случаях как это. Но если метод собирается закончиться скоро (как в моем исходном вопросе), он не помогает.

Это было вдохновлено комментарием от Zdenek Tronicek в списке рассылки java-cz (на чешском языке, извините)

87
задан Gnanam 17 March 2011 в 04:31
поделиться

1 ответ

Фасетный поиск является технически ведомой навигацией, которая позволяет пользователям сужать свои результаты поиска. Это может использоваться в больших каталогах (как библиотека изображений, например), но наиболее популярный способ использования этой функции поиска для веб-магазинов электронной коммерции / веб-магазины. Вот новое и всесторонняя статья о том, что является фасетным поиском и как это работает - я надеюсь, что это помогает.

0
ответ дан 24 November 2019 в 07:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: