Предисловие
Недавно мы добавили стратегию понижения в компонент предохранителя (Hystrix, похоже, не имеет этой конфигурации), и мы предоставляем следующие стратегии:
1. Политика по умолчанию
2. вернуть постоянное значение
3. Выбросить указанное исключение
4. Выполните отличный скрипт
Конечно, эти конфигурации могут быть настроены на платформе и немедленно вступить в силу.
Текущая реализация возвращающихся постоянных значений заключается в следующем:
Сегодня я обнаружил, что если один и тот же объект возвращается каждый раз, и эта логика является черным ящиком для бизнеса (бизнес не знает, что объект, полученный каждый раз, одинаковы), если объект работает, он определенно повлияет на другие запросы. Чтобы избежать вины, нам нужно каждый раз возвращать новый объект. Первая реакция заключается в том, является ли это возможным через клон (потому что каждая сериализация JS также потеряет производительность), но метод клона, который поставляется с JDK, является только мелким клоном. Если объект содержит другой сложный объект, объект, полученный из клона, по -прежнему имеет риск изменения.
Подробное введение:
Вы можете увидеть следующий пример:
класс Master {string name; public Master (String name) {this.name = name; }}Инициализировать мастер -класс
Class Dog реализует клонируемые {String name; int возраст; Мастер Мастер; Public Dog (название строки, int age, Master Master) {this.name = name; this.age = возраст; this.master = Master; } @Override Protected Object Clone () бросает ClonenotSupportedException {return super.clone (); } @Override public String toString () {return "{name:" + name + ", age:" + age + ", master:" + master.name + "}"; }}Инициализировать собаку
public static void main (string [] args) бросает исключение {Master Master = new Master ("zj0"); Dog Dog1 = новая собака ("Wangcai", 1, Master); Dog Dog2 = (Dog) dog1.clone (); dog1.name = "billy"; dog1.master.name = "zj1"; System.out.println (dog2);}Наконец -то запустите его, результат заключается в следующем:
{имя: 王彩, возраст: 1, Мастер: ZJ1}Dog1 - примитивная собака, Dog2 клонирован, но когда я изменяю имя мастера Dog1, клонированный мастер также изменился, что, очевидно, не работает.
Хотя я всегда знал, что метод объекта клона является мелким клоном, и я не продолжал исследовать его. Сегодня я наткнулся на это и посмотрел на реализацию JVM. Это кажется очень простым. В файле jvm.cpp поиск "jvm_clone"
Я никогда раньше не использовал метод клона. Через исходный код я обнаружил, что при запуске я проверяю, реализует ли класс клонируемый интерфейс. Я не проверяю это во время компиляции. Что я думаю?
Согласно размеру объекта или данных, откройте кусок памяти того же размера из кучи, а затем скопируйте данные исходного объекта на новый адрес памяти. Для основных типов исходное значение можно скопировать, но для внутренних объектов оно сохраняет только адрес, а также является копией адреса во время копирования и в конечном итоге указывает на тот же объект, который вызывает вышеуказанные проблемы.
Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.