попытка хранить объекты Java в непрерывной памяти

Сделать .side-nav > .side-nav-top > a flexbox (для предотвращения переноса текста ссылки под значком) и добавить white-space: nowrap для предотвращения переноса текста текста ссылки [1110 ].

Теперь вместо того, чтобы переключать отображение текста меню, вы можете добавить overflow: hidden к side-nav itslef - см. Демонстрацию ниже:

nav {
  background-color: #f5f5f5;
}
nav a {
  text-decoration: none;
  color: black;
}
.side-nav {
  position: fixed;
  top: 54px;
  left: 0;
  bottom: 0;
  width: 3.5rem; /* percentage might not be a good idea here */
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  transition: width 2s;
  overflow: hidden; /* added overflow here*/
} 
.side-nav > .side-nav-top > a { /* made a flexbox */
  display: flex;
  align-items: center; /* aligns the icon and link text vertically */
  white-space: nowrap; /* prevent text wrapping */
}
.side-nav>.side-nav-top {
  display: flex;
  flex-direction: column;
}
.side-nav>.side-nav-top>a>span:first-child {
  margin: 5px 20px 5px 20px;
}
.side-nav i {
  color: #909090;
}
.side-nav:hover {
  width: 40%;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.dev.js"></script>
  <link href="https://fonts.googleapis.com/css?family=Dosis" rel="stylesheet">
  <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.6.3/css/all.css">
  
  <nav class="side-nav">
    <div class="side-nav-top">
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
      <a href="#"><span><i class="fas fa-home"></i></span><span class="hide">The Home page</span></a>
    </div>
  </nav>
[1114 ]

8
задан Jon Skeet 25 March 2009 в 17:06
поделиться

4 ответа

Нет, Вы не можете гарантировать эту местность ссылки.

Путем выделения массива байтов или использования отображенного байта буферизуют от nio пакеты, Вы могли получить блок непрерывной памяти, из которой можно декодировать данные, которые Вы хотите (эффективно десериализация предметов интереса от этого блока памяти). Однако при повторном доступе к тем же объектам десериализация наверху, вероятно, победила бы цель.

9
ответ дан 5 December 2019 в 06:24
поделиться

Вы написали этот код уже в Java? И если так, Вы представили его? Я утверждал бы, что Вы, вероятно, не должны волноваться об объектах, находящихся в непрерывной памяти - JVM лучше в управлении памятью, чем Вы находитесь в собравшей "мусор" среде.

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

4
ответ дан 5 December 2019 в 06:24
поделиться

Я предлагаю использовать HashMap (не распараллелил), или Хеш-таблица (распараллелила) для Вашего кэша. Оба хранят объект в массив на солнце jvm. Так как все объекты в Java передаются ссылкой, это должно быть представлено как массив указателей в c. Моя ставка - то, что Вы выполняете преждевременную оптимизацию.

Если у Вас абсолютно должно быть это, у Вас есть две опции:

1) Используйте JNI и запишите это в c. 2) Получите БОЛЬШОЙ буфер байта и используйте ObjectOutputStream для записи объектов в него. Это будет вероятный быть ОЧЕНЬ МЕДЛЕННЫМ по сравнению с использованием хеш-таблицы.

-1
ответ дан 5 December 2019 в 06:24
поделиться

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

Кроме того, уплотнение GC переместит значения в памяти.

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

14
ответ дан 5 December 2019 в 06:24
поделиться
Другие вопросы по тегам:

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