В Java, что такое мелкая копия?

Поле, которое вы ищете, - TotalCPU. С man-страницы sacct:

TotalCPU Сумма времени SystemCPU и UserCPU, используемого заданием или этапом задания.

blockquote>

Разделите это на CPUTime, чтобы получить эффективность.

CPUTime Форматированный счетчик (истекшее время * ЦП), используемый заданием или этапом.

blockquote>

Slurm поставляется со скриптом Perl для вычисления эффективности задания с именем seff (в разделе «contrib»). См. здесь .

50
задан Community 23 May 2017 в 02:02
поделиться

8 ответов

Неглубокая копия просто копирует значения ссылок в классе. Глубокая копия копирует значения. указано:

class Foo {
  private Bar myBar;
  ...
  public Foo shallowCopy() {
    Foo newFoo = new Foo();
    newFoo.myBar = myBar;
    return newFoo;
  }

  public Foo deepCopy() {
    Foo newFoo = new Foo();
    newFoo.myBar = myBar.clone(); //or new Bar(myBar) or myBar.deepCopy or ...
    return newFoo;
  }
}

Foo myFoo = new Foo();  
Foo sFoo = myFoo.shallowCopy();  
Foo dFoo = myFoo.deepCopy();  

myFoo.myBar == sFoo.myBar => true  
myFoo.myBar.equals(sFoo.myBar) => true  
myFoo.myBar == dFoo.myBar => **false**  
myFoo.myBar.equals(dFoo.myBar) => true  

В этом случае мелкая копия имеет ту же ссылку ( == ), а глубокая копия имеет только эквивалентную ссылку ( .equals () ).

Если изменяется значение неглубоко скопированной ссылки, то копия отражает это изменение, потому что она использует ту же ссылку. Если изменяется значение глубоко скопированной ссылки, то копия не отражает это изменение, потому что она не использует ту же ссылку.

C-ism

int a = 10; //init
int& b = a; //shallow - copies REFERENCE
int c = a;  //deep - copies VALUE
++a;

Результат:

a is 11  
*b is 11  
c is 10
76
ответ дан 7 November 2019 в 10:48
поделиться

Мелкая Копия: В этом клонировании любых изменений в Клонированном Объекте отражается к Исходному объекту также.

Глубокая Копия: В этом клонировании отдельной клонированной памяти выделяется, что означает, что любые изменения в клонированном объекте не будут отражены к исходному объекту.

0
ответ дан 7 November 2019 в 10:48
поделиться

МЕЛКОЙ КОПИЕЙ является ПЕРЕДАЧА ССЫЛКОЙ... ГЛУБОКОЙ КОПИЕЙ является PASS-BY-VALUE †¦, контекст отличается, но процесс является точно тем же. Сначала помните, что в вызове метода Java, примитивы передаются значением, в то время как объекты передаются ссылкой (на других языках, объекты могут также быть переданы значением). Теперь, в Java, когда вызывающая сторона передает примитив вызываемому методу, вызываемый метод просто клонирует его как новую локальную переменную, которая является глубокой копией. В то время как, если объект передается, вызываемый метод только сделает новую локальную ссылку на тот же объект, который является мелкой копией. Если Вы понимаете вызов, Вы понимаете глубокую/мелкую копию, & наоборот.

0
ответ дан 7 November 2019 в 10:48
поделиться

Неглубокая копия - это просто набор указателей на одни и те же ячейки памяти. Фактически он не создает настоящую копию, поэтому использование памяти ниже.

В случае глубокой копии создается точная копия сегмента памяти, и указатели устанавливаются на новые ячейки памяти. Так что теоретически потребление памяти в этом случае должно быть вдвое больше.

13
ответ дан 7 November 2019 в 10:48
поделиться

Неглубокая копия - это копия ссылочного указателя на объект, тогда как полная копия - это копия самого объекта. В Java объекты хранятся в фоновом режиме, при работе с объектами вы обычно взаимодействуете с указателями. Имена переменных указывают на область памяти объекта. Неглубокая копия создается, когда вы устанавливаете одну переменную равной другой, например:

Object B = A;

Глубокую копию можно сделать, получив свойства объекта A и поместив их в новый объект B.

Object B = new Object(A.getProperty1(), A.getProperty2()...);

Это влияет на поведение программы в этом если вы сделаете неглубокую копию и выполните над ней задачу, это повлияет на все мелкие копии объекта. Если вы вносите изменения в глубокую копию, это затрагивает только эту копию. Надеюсь, это достаточно подробно для вас.

6
ответ дан 7 November 2019 в 10:48
поделиться

Документ 1.6 docs Calendar.clone как «Создает и возвращает копию этого объекта». Буквальная неглубокая копия, указанная в Object.clone , не имеет никакого смысла. В Java термин «неглубокая копия» используется в довольно типичном смысле.

3
ответ дан 7 November 2019 в 10:48
поделиться

Похоже, это ошибка в документации. Я не понимаю, как что-либо из того, что делает Android-метод Calendar.clone, соответствует типичному определению (на Java или другом языке) «неглубокой копии».

2
ответ дан 7 November 2019 в 10:48
поделиться

Где вы берете эту документацию?

В официальных документах Java 6 на java.sun.com просто есть Calendar.clone () , возвращающий копию объекта . Никакого упоминания о неглубоких.

В более общем смысле, неглубокая копия в Java - это та, где вы получаете ссылку на новый объект, но новый объект содержит (прямо или косвенно) ссылки на данные в оригинале.

Например:

class MyClass{
  private List<Integer> innerList;

  public MyClass(List<Integer> list) { innerList = list; }

  //Some code...

  public Object clone(){
    return new MyClass(innerList);
  }
}

] возвращает неглубокую копию в своем clone ().

1
ответ дан 7 November 2019 в 10:48
поделиться
Другие вопросы по тегам:

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