-
Notifications
You must be signed in to change notification settings - Fork 78
[IGNORE] #39
base: main
Are you sure you want to change the base?
[IGNORE] #39
Conversation
podobaAlex
commented
Sep 26, 2023
- Dao and Factory implementing.
if (to != null) { | ||
innerMap = innerMap.headMap(to); | ||
} | ||
return innerMap.values().iterator(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Лишняя аллокация в этом методе. ищи где
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
А теперь очень сложные ифы (условно). Можно сделать в начале !=null && !=null. Но это вкусовщина, можешь забить.
Если исправил замечание - надо на коммент ответить в чем заключалась ошибка (чтобы я понял, правильно ли ты меня понял) и объяснить исправление.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Так как у нас два отдельных if, в которых создаётся новая map, то может быть случай, когда у нас выполняются два условия и будут две аллокации, а теперь только одна.
|
||
@Override | ||
public int compare(MemorySegment o1, MemorySegment o2) { | ||
return o1.asByteBuffer().compareTo(o2.asByteBuffer()); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Лишняя аллокация
- смысл от того, что мы используем MemorySegment, если мы приводим к ByteBuffer
- тут будет ошибка, если размер MemorySegment больше Integer.MAX_INT
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Теперь, сравниваются не байт буферы, а ищем элемент, с которого начинают различаться массивы байтов, и сравниваем элементы на этом месте, если размер какого-то массива равен нулю, то сравниваются размеры массивов.
|
||
@Override | ||
public String toString(MemorySegment memorySegment) { | ||
return new String(memorySegment.asByteBuffer().array(), StandardCharsets.UTF_8); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Тоже, что и выше
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Поменял на чтение с heapBase, чтобы не было аллокации
- Fix Comparator using mismatch and Long.compare() - Fix toString() using heapBase
if (o1.byteSize() != 0 && o2.byteSize() != 0) { | ||
int diff = mismatch == -1 | ||
? 0 | ||
: o1.get(ValueLayout.JAVA_BYTE, mismatch) - o2.get(ValueLayout.JAVA_BYTE, mismatch); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
тоже сложный иф тоже вкусовщина
|
||
@Override | ||
public String toString(MemorySegment memorySegment) { | ||
return new String((byte[]) memorySegment.heapBase().orElseThrow(), StandardCharsets.UTF_8); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
ты не решил проблемы, ты все так же кастишь к массиву байт, это все тоже самое, что и раньше (прошлое замечание) + в дальнейшем там не всегда будет хип сегмент
|
||
@Override | ||
public Iterator<Entry<MemorySegment>> get(MemorySegment from, MemorySegment to) { | ||
ConcurrentNavigableMap<MemorySegment, Entry<MemorySegment>> innerMap = memorySegmentEntryMap; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
почему ты хранишь в начале ключ, а потом ентри, где тоже содержится ключ