This is an automated email from the ASF dual-hosted git repository.

nizhikov pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ignite.git


The following commit(s) were added to refs/heads/master by this push:
     new ab0b24a06d4 IGNITE-26194 Move OptimizedMarshaller to 
ignite-binary-impl (#12268)
ab0b24a06d4 is described below

commit ab0b24a06d4b1e90dcde72fe31702fa4f14e8dc1
Author: Nikolay <nizhi...@apache.org>
AuthorDate: Tue Aug 19 15:42:20 2025 +0300

    IGNITE-26194 Move OptimizedMarshaller to ignite-binary-impl (#12268)
---
 .../ignite/internal/MarshallerPlatformIds.java     |   0
 .../marshaller/optimized/OptimizedMarshaller.java  | 113 +++++
 .../optimized/OptimizedMarshallerIdMapper.java     |   0
 .../ignite/marshaller/AbstractMarshaller.java      |   9 -
 .../AbstractNodeNameAwareMarshaller.java           |   8 +-
 .../org/apache/ignite/marshaller/Marshaller.java   |  16 +
 .../org/apache/ignite/marshaller/Marshallers.java  |  25 ++
 .../ignite/marshaller/MarshallersFactory.java      |  14 +
 .../optimized/OptimizedClassDescriptor.java        |   6 +-
 .../marshaller/optimized/OptimizedFieldType.java   |   0
 .../optimized/OptimizedMarshallerImpl.java}        |  64 +--
 ...imizedMarshallerInaccessibleClassException.java |   0
 .../optimized/OptimizedMarshallerUtils.java        |   7 +-
 .../optimized/OptimizedObjectInputStream.java      |  20 +-
 .../optimized/OptimizedObjectOutputStream.java     |   4 +-
 .../OptimizedObjectPooledStreamRegistry.java       |   6 +-
 .../OptimizedObjectSharedStreamRegistry.java       |   8 +-
 .../optimized/OptimizedObjectStreamRegistry.java   |   0
 .../ignite/marshaller/MarshallersFactoryImpl.java  |  12 +
 .../ignite/IgniteCommonsSystemProperties.java      |  24 +
 .../main/java/org/apache/ignite/IgniteLogger.java  |   0
 .../IgniteInterruptedCheckedException.java         |   0
 .../apache/ignite/internal/util/CommonUtils.java   | 481 ++++++++++++++++++++-
 .../ignite/internal/util/GridHandleTable.java      |   0
 .../ignite/internal/util/GridLogThrottle.java      |  20 +-
 .../ignite/internal/util/io/GridDataInput.java     |   0
 .../ignite/internal/util/io/GridDataOutput.java    |   0
 .../ignite/internal/util/typedef/internal/LT.java  |   0
 .../org/apache/ignite/IgniteSystemProperties.java  |  24 -
 .../org/apache/ignite/internal/IgniteKernal.java   |   7 +-
 .../ignite/internal/MarshallerContextImpl.java     |   2 +-
 .../ignite/internal/binary/BinaryContext.java      |   2 +-
 .../optimized/GridClientOptimizedMarshaller.java   |   5 +-
 .../apache/ignite/internal/util/IgniteUtils.java   | 468 +-------------------
 .../apache/ignite/marshaller/MarshallerUtils.java  |  11 -
 .../ignite/spi/discovery/tcp/TcpDiscoverySpi.java  |   3 +-
 .../ignite/stream/socket/SocketStreamer.java       |   3 +-
 .../GridDiscoveryManagerAttributesSelfTest.java    |   4 +-
 .../optimized/OptimizedMarshallerEnumSelfTest.java |   3 +-
 .../OptimizedMarshallerPooledSelfTest.java         |   5 +-
 .../optimized/OptimizedMarshallerSelfTest.java     |   3 +-
 ...edMarshallerSerialPersistentFieldsSelfTest.java |   3 +-
 .../optimized/OptimizedMarshallerTest.java         |   3 +-
 .../optimized/OptimizedObjectStreamSelfTest.java   |   9 +-
 ...rMetricsSnapshotSerializeCompatibilityTest.java |   3 +-
 .../internal/util/io/GridUnsafeDataInput.java      |   9 +-
 .../internal/util/io/GridUnsafeDataOutput.java     |  13 +-
 47 files changed, 779 insertions(+), 638 deletions(-)

diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerPlatformIds.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/internal/MarshallerPlatformIds.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/MarshallerPlatformIds.java
rename to 
modules/binary/api/src/main/java/org/apache/ignite/internal/MarshallerPlatformIds.java
diff --git 
a/modules/binary/api/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
new file mode 100644
index 00000000000..e4733564f76
--- /dev/null
+++ 
b/modules/binary/api/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
@@ -0,0 +1,113 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.ignite.internal.marshaller.optimized;
+
+import java.io.ObjectOutputStream;
+import java.io.Serializable;
+import org.apache.ignite.marshaller.Marshaller;
+
+/**
+ * Optimized implementation of {@link org.apache.ignite.marshaller.Marshaller}.
+ * Unlike {@link org.apache.ignite.marshaller.jdk.JdkMarshaller},
+ * which is based on standard {@link ObjectOutputStream}, this marshaller does 
not
+ * enforce that all serialized objects implement {@link Serializable} 
interface. It is also
+ * about 20 times faster as it removes lots of serialization overhead that 
exists in
+ * default JDK implementation.
+ * <p>
+ * {@code OptimizedMarshaller} is tested only on Java HotSpot VM on other VMs
+ * it could yield unexpected results. It is the default marshaller on Java 
HotSpot VMs
+ * and will be used if no other marshaller was explicitly configured.
+ * <p>
+ * <h1 class="header">Configuration</h1>
+ * <h2 class="header">Mandatory</h2>
+ * This marshaller has no mandatory configuration parameters.
+ * <h2 class="header">Java Example</h2>
+ * <pre name="code" class="java">
+ * OptimizedMarshaller marshaller = new OptimizedMarshaller();
+ *
+ * // Enforce Serializable interface.
+ * marshaller.setRequireSerializable(true);
+ *
+ * IgniteConfiguration cfg = new IgniteConfiguration();
+ *
+ * // Override marshaller.
+ * cfg.setMarshaller(marshaller);
+ *
+ * // Starts grid.
+ * G.start(cfg);
+ * </pre>
+ * <h2 class="header">Spring Example</h2>
+ * GridOptimizedMarshaller can be configured from Spring XML configuration 
file:
+ * <pre name="code" class="xml">
+ * &lt;bean id="grid.custom.cfg" 
class="org.apache.ignite.configuration.IgniteConfiguration" singleton="true"&gt;
+ *     ...
+ *     &lt;property name="marshaller"&gt;
+ *         &lt;bean class="OptimizedMarshaller"&gt;
+ *             &lt;property name="requireSerializable"&gt;true&lt;/property&gt;
+ *         &lt;/bean&gt;
+ *     &lt;/property&gt;
+ *     ...
+ * &lt;/bean&gt;
+ * </pre>
+ * <p>
+ * <img src="http://ignite.apache.org/images/spring-small.png";>
+ * <br>
+ * For information about Spring framework visit <a 
href="http://www.springframework.org/";>www.springframework.org</a>
+ */
+public interface OptimizedMarshaller extends Marshaller {
+    /**
+     * Sets whether marshaller should require {@link Serializable} interface 
or not.
+     *
+     * @param requireSer Whether to require {@link Serializable}.
+     * @return {@code this} for chaining.
+     */
+    public OptimizedMarshaller setRequireSerializable(boolean requireSer);
+
+    /**
+     * Sets ID mapper.
+     *
+     * @param mapper ID mapper.
+     * @return {@code this} for chaining.
+     */
+    public OptimizedMarshaller setIdMapper(OptimizedMarshallerIdMapper mapper);
+
+    /**
+     * Specifies size of cached object streams used by marshaller. Object 
streams are cached for
+     * performance reason to avoid costly recreation for every serialization 
routine. If {@code 0} (default),
+     * pool is not used and each thread has its own cached object stream which 
it keeps reusing.
+     * <p>
+     * Since each stream has an internal buffer, creating a stream for each 
thread can lead to
+     * high memory consumption if many large messages are marshalled or 
unmarshalled concurrently.
+     * Consider using pool in this case. This will limit number of streams 
that can be created and,
+     * therefore, decrease memory consumption.
+     * <p>
+     * NOTE: Using streams pool can decrease performance since streams will be 
shared between
+     * different threads which will lead to more frequent context switching.
+     *
+     * @param poolSize Streams pool size. If {@code 0}, pool is not used.
+     * @return {@code this} for chaining.
+     */
+    public OptimizedMarshaller setPoolSize(int poolSize);
+
+    /**
+     * Clears the optimized class descriptors cache. This is essential for the 
clients
+     * on disconnect in order to make them register their user types again 
(server nodes may
+     * lose previously registered types).
+     */
+    public void clearClassDescriptorsCache();
+}
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerIdMapper.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerIdMapper.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerIdMapper.java
rename to 
modules/binary/api/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerIdMapper.java
diff --git 
a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java
index 032e758f853..ee1e3c493fd 100644
--- 
a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java
+++ 
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractMarshaller.java
@@ -30,15 +30,6 @@ public abstract class AbstractMarshaller implements 
Marshaller {
     /** Context. */
     protected MarshallerContext ctx;
 
-    /**
-     * Undeployment callback invoked when class loader is being undeployed.
-     *
-     * Some marshallers may want to clean their internal state that uses the 
undeployed class loader somehow.
-     *
-     * @param ldr Class loader being undeployed.
-     */
-    public abstract void onUndeploy(ClassLoader ldr);
-
     /**
      * @return Marshaller context.
      */
diff --git 
a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java
index 6f8150f09fb..ccf32d80a2b 100644
--- 
a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java
+++ 
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/AbstractNodeNameAwareMarshaller.java
@@ -33,12 +33,8 @@ public abstract class AbstractNodeNameAwareMarshaller 
extends AbstractMarshaller
     /** Node name. */
     private volatile String nodeName = CommonUtils.LOC_IGNITE_NAME_EMPTY;
 
-    /**
-     * Set node name.
-     *
-     * @param nodeName Node name.
-     */
-    public void nodeName(@Nullable String nodeName) {
+    /** {@inheritDoc} */
+    @Override public void nodeName(@Nullable String nodeName) {
         if (!nodeNameSet) {
             this.nodeName = nodeName;
 
diff --git 
a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshaller.java 
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshaller.java
index 7bc328ef2b8..6112c6fc188 100644
--- 
a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshaller.java
+++ 
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshaller.java
@@ -73,6 +73,13 @@ public interface Marshaller {
      */
     public void setContext(MarshallerContext ctx);
 
+    /**
+     * Set node name.
+     *
+     * @param nodeName Node name.
+     */
+    public void nodeName(@Nullable String nodeName);
+
     /**
      * Marshals object to the output stream. This method should not close
      * given output stream.
@@ -114,4 +121,13 @@ public interface Marshaller {
      * @throws IgniteCheckedException If unmarshalling failed.
      */
     public <T> T unmarshal(byte[] arr, @Nullable ClassLoader clsLdr) throws 
IgniteCheckedException;
+
+    /**
+     * Undeployment callback invoked when class loader is being undeployed.
+     *
+     * Some marshallers may want to clean their internal state that uses the 
undeployed class loader somehow.
+     *
+     * @param ldr Class loader being undeployed.
+     */
+    public void onUndeploy(ClassLoader ldr);
 }
diff --git 
a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshallers.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshallers.java
index ef54a1452d9..d590e1aaf8d 100644
--- 
a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshallers.java
+++ 
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/Marshallers.java
@@ -17,13 +17,18 @@
 
 package org.apache.ignite.marshaller;
 
+import java.io.Serializable;
 import java.util.Iterator;
+import org.apache.ignite.IgniteCommonsSystemProperties;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.util.CommonUtils;
 import org.apache.ignite.internal.util.typedef.internal.A;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.marshaller.jdk.JdkMarshaller;
 import org.jetbrains.annotations.Nullable;
 
+import static 
org.apache.ignite.IgniteCommonsSystemProperties.IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID;
+
 /**
  * Factory to create implementation of {@link Marshaller}.
  */
@@ -31,6 +36,10 @@ public class Marshallers {
     /** Flag whether class caching should be used by the current thread. */
     public static final ThreadLocal<Boolean> USE_CACHE = 
ThreadLocal.withInitial(() -> Boolean.TRUE);
 
+    /** Use default {@code serialVersionUID} for {@link Serializable} classes. 
*/
+    public static final boolean USE_DFLT_SUID =
+        
IgniteCommonsSystemProperties.getBoolean(IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID,
 false);
+
     /** Streams factory implementation. */
     private static final MarshallersFactory factory;
 
@@ -57,4 +66,20 @@ public class Marshallers {
     public static JdkMarshaller jdk(@Nullable IgnitePredicate<String> 
clsFilter) {
         return factory.jdk(clsFilter);
     }
+
+    /** @return Optimized marshaller instance. */
+    public static OptimizedMarshaller optimized() {
+        return factory.optimized();
+    }
+
+    /**
+     * Creates new marshaller providing whether it should
+     * require {@link Serializable} interface or not.
+     *
+     * @param requireSer Whether to require {@link Serializable}.
+     * @return Optimized marshaller instance.
+     */
+    public static OptimizedMarshaller optimized(boolean requireSer) {
+        return factory.optimized(requireSer);
+    }
 }
diff --git 
a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallersFactory.java
 
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallersFactory.java
index 4500c703eb3..0c7809213ae 100644
--- 
a/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallersFactory.java
+++ 
b/modules/binary/api/src/main/java/org/apache/ignite/marshaller/MarshallersFactory.java
@@ -17,7 +17,9 @@
 
 package org.apache.ignite.marshaller;
 
+import java.io.Serializable;
 import java.util.ServiceLoader;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.util.CommonUtils;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.marshaller.jdk.JdkMarshaller;
@@ -39,4 +41,16 @@ public interface MarshallersFactory {
      * @return Filtered instance of {@link JdkMarshaller}.
      */
     public JdkMarshaller jdk(@Nullable IgnitePredicate<String> clsFilter);
+
+    /** @return Optimized marshaller instance. */
+    public OptimizedMarshaller optimized();
+
+    /**
+     * Creates new marshaller providing whether it should
+     * require {@link Serializable} interface or not.
+     *
+     * @param requireSer Whether to require {@link Serializable}.
+     * @return Optimized marshaller instance.
+     */
+    public OptimizedMarshaller optimized(boolean requireSer);
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
similarity index 99%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
index 67747d00807..4dee1dff695 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
+++ 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedClassDescriptor.java
@@ -45,8 +45,8 @@ import java.util.Map;
 import java.util.Properties;
 import java.util.UUID;
 import java.util.concurrent.ConcurrentMap;
+import org.apache.ignite.internal.util.CommonUtils;
 import org.apache.ignite.internal.util.GridUnsafe;
-import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.marshaller.MarshallerContext;
 import org.apache.ignite.marshaller.MarshallerExclusions;
 import org.apache.ignite.marshaller.Marshallers;
@@ -89,7 +89,7 @@ import static 
org.apache.ignite.internal.marshaller.optimized.OptimizedMarshalle
 import static 
org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.STR;
 import static 
org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.UUID;
 import static 
org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.computeSerialVersionUid;
-import static org.apache.ignite.internal.util.IgniteUtils.isLambda;
+import static org.apache.ignite.internal.util.CommonUtils.isLambda;
 
 /**
  * Class descriptor.
@@ -1000,7 +1000,7 @@ class OptimizedClassDescriptor {
         ClassFields(List<FieldInfo> fields) {
             this.fields = fields;
 
-            nameToIndex = U.newHashMap(fields.size());
+            nameToIndex = CommonUtils.newHashMap(fields.size());
 
             for (int i = 0; i < fields.size(); ++i)
                 nameToIndex.put(fields.get(i).name(), i);
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedFieldType.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedFieldType.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedFieldType.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedFieldType.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerImpl.java
similarity index 81%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerImpl.java
index f8738a6e58a..9c5549a29c6 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshaller.java
+++ 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerImpl.java
@@ -26,16 +26,13 @@ import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.ConcurrentMap;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
-import org.apache.ignite.IgniteSystemProperties;
+import org.apache.ignite.internal.util.CommonUtils;
 import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.marshaller.AbstractNodeNameAwareMarshaller;
 import org.apache.ignite.marshaller.Marshallers;
 import org.jetbrains.annotations.Nullable;
 import sun.misc.Unsafe;
 
-import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID;
-
 /**
  * Optimized implementation of {@link org.apache.ignite.marshaller.Marshaller}.
  * Unlike {@link org.apache.ignite.marshaller.jdk.JdkMarshaller},
@@ -84,11 +81,7 @@ import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_OPTIMIZED_MARSHALL
  * <br>
  * For information about Spring framework visit <a 
href="http://www.springframework.org/";>www.springframework.org</a>
  */
-public class OptimizedMarshaller extends AbstractNodeNameAwareMarshaller {
-    /** Use default {@code serialVersionUID} for {@link Serializable} classes. 
*/
-    public static final boolean USE_DFLT_SUID =
-        
IgniteSystemProperties.getBoolean(IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID, 
false);
-
+public class OptimizedMarshallerImpl extends AbstractNodeNameAwareMarshaller 
implements OptimizedMarshaller {
     /** Default class loader. */
     private final ClassLoader dfltClsLdr = getClass().getClassLoader();
 
@@ -112,7 +105,7 @@ public class OptimizedMarshaller extends 
AbstractNodeNameAwareMarshaller {
      *
      * @throws IgniteException If this marshaller is not supported on the 
current JVM.
      */
-    public OptimizedMarshaller() {
+    public OptimizedMarshallerImpl() {
         if (!available())
             throw new IgniteException("Using OptimizedMarshaller on 
unsupported JVM version (some of " +
                 "JVM-private APIs required for the marshaller to work are 
missing).");
@@ -124,51 +117,26 @@ public class OptimizedMarshaller extends 
AbstractNodeNameAwareMarshaller {
      *
      * @param requireSer Whether to require {@link Serializable}.
      */
-    public OptimizedMarshaller(boolean requireSer) {
+    public OptimizedMarshallerImpl(boolean requireSer) {
         this.requireSer = requireSer;
     }
 
-    /**
-     * Sets whether marshaller should require {@link Serializable} interface 
or not.
-     *
-     * @param requireSer Whether to require {@link Serializable}.
-     * @return {@code this} for chaining.
-     */
-    public OptimizedMarshaller setRequireSerializable(boolean requireSer) {
+    /** {@inheritDoc} */
+    @Override public OptimizedMarshaller setRequireSerializable(boolean 
requireSer) {
         this.requireSer = requireSer;
 
         return this;
     }
 
-    /**
-     * Sets ID mapper.
-     *
-     * @param mapper ID mapper.
-     * @return {@code this} for chaining.
-     */
-    public OptimizedMarshaller setIdMapper(OptimizedMarshallerIdMapper mapper) 
{
+    /** {@inheritDoc} */
+    @Override public OptimizedMarshaller 
setIdMapper(OptimizedMarshallerIdMapper mapper) {
         this.mapper = mapper;
 
         return this;
     }
 
-    /**
-     * Specifies size of cached object streams used by marshaller. Object 
streams are cached for
-     * performance reason to avoid costly recreation for every serialization 
routine. If {@code 0} (default),
-     * pool is not used and each thread has its own cached object stream which 
it keeps reusing.
-     * <p>
-     * Since each stream has an internal buffer, creating a stream for each 
thread can lead to
-     * high memory consumption if many large messages are marshalled or 
unmarshalled concurrently.
-     * Consider using pool in this case. This will limit number of streams 
that can be created and,
-     * therefore, decrease memory consumption.
-     * <p>
-     * NOTE: Using streams pool can decrease performance since streams will be 
shared between
-     * different threads which will lead to more frequent context switching.
-     *
-     * @param poolSize Streams pool size. If {@code 0}, pool is not used.
-     * @return {@code this} for chaining.
-     */
-    public OptimizedMarshaller setPoolSize(int poolSize) {
+    /** {@inheritDoc} */
+    @Override public OptimizedMarshaller setPoolSize(int poolSize) {
         registry = poolSize > 0 ?
             new OptimizedObjectPooledStreamRegistry(poolSize) :
             new OptimizedObjectSharedStreamRegistry();
@@ -337,20 +305,16 @@ public class OptimizedMarshaller extends 
AbstractNodeNameAwareMarshaller {
                 clsMap.remove(cls);
         }
 
-        U.clearClassCache(ldr);
+        CommonUtils.clearClassCache(ldr);
     }
 
-    /**
-     * Clears the optimized class descriptors cache. This is essential for the 
clients
-     * on disconnect in order to make them register their user types again 
(server nodes may
-     * lose previously registered types).
-     */
-    public void clearClassDescriptorsCache() {
+    /** {@inheritDoc} */
+    @Override public void clearClassDescriptorsCache() {
         clsMap.clear();
     }
 
     /** {@inheritDoc} */
     @Override public String toString() {
-        return S.toString(OptimizedMarshaller.class, this);
+        return S.toString(OptimizedMarshallerImpl.class, this);
     }
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerInaccessibleClassException.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerInaccessibleClassException.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerInaccessibleClassException.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerInaccessibleClassException.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerUtils.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerUtils.java
similarity index 98%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerUtils.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerUtils.java
index 8581b322ea9..1c9836956ad 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerUtils.java
+++ 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerUtils.java
@@ -30,10 +30,11 @@ import java.util.List;
 import java.util.concurrent.ConcurrentMap;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteException;
+import org.apache.ignite.internal.util.CommonUtils;
 import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.marshaller.MarshallerContext;
+import org.apache.ignite.marshaller.Marshallers;
 import org.jetbrains.annotations.NotNull;
 
 import static org.apache.ignite.internal.MarshallerPlatformIds.JAVA_ID;
@@ -300,7 +301,7 @@ class OptimizedMarshallerUtils {
             throw new IOException("Failed to resolve class for ID: " + typeId, 
e);
         }
 
-        Class cls = U.forName(clsName, ldr, null);
+        Class cls = CommonUtils.forName(clsName, ldr, null, 
Marshallers.USE_CACHE.get());
 
         OptimizedClassDescriptor desc = clsMap.get(cls);
 
@@ -375,7 +376,7 @@ class OptimizedMarshallerUtils {
                 throw new IOException(e);
             }
 
-            if (OptimizedMarshaller.USE_DFLT_SUID)
+            if (Marshallers.USE_DFLT_SUID)
                 return 
(short)ObjectStreamClass.lookup(cls).getSerialVersionUID();
         }
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java
similarity index 97%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java
index d3566905c3d..08e0a367217 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java
+++ 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectInputStream.java
@@ -42,11 +42,12 @@ import java.util.Properties;
 import java.util.UUID;
 import java.util.concurrent.ConcurrentMap;
 import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.internal.util.CommonUtils;
 import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.io.GridDataInput;
 import org.apache.ignite.internal.util.typedef.internal.SB;
-import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.marshaller.MarshallerContext;
+import org.apache.ignite.marshaller.Marshallers;
 
 import static 
org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.ARRAY_LIST;
 import static 
org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerUtils.BOOLEAN;
@@ -336,16 +337,21 @@ class OptimizedObjectInputStream extends 
ObjectInputStream {
 
                 InvocationHandler ih = (InvocationHandler)readObject();
 
-                return Proxy.newProxyInstance(clsLdr != null ? clsLdr : 
U.gridClassLoader(), intfs, ih);
+                return Proxy.newProxyInstance(clsLdr != null ? clsLdr : 
CommonUtils.gridClassLoader(), intfs, ih);
 
             case ENUM:
             case EXTERNALIZABLE:
             case SERIALIZABLE:
                 int typeId = readInt();
 
-                OptimizedClassDescriptor desc = typeId == 0 ?
-                    classDescriptor(clsMap, U.forName(readUTF(), clsLdr, 
ctx.classNameFilter()), useCache, ctx, mapper) :
-                    classDescriptor(clsMap, typeId, clsLdr, useCache, ctx, 
mapper);
+                OptimizedClassDescriptor desc = typeId == 0
+                    ? classDescriptor(
+                        clsMap,
+                        CommonUtils.forName(readUTF(), clsLdr, 
ctx.classNameFilter(), useCache),
+                        useCache,
+                        ctx,
+                        mapper)
+                    : classDescriptor(clsMap, typeId, clsLdr, useCache, ctx, 
mapper);
 
                 curCls = desc.describedClass();
 
@@ -380,7 +386,7 @@ class OptimizedObjectInputStream extends ObjectInputStream {
     private Class<?> readClass() throws ClassNotFoundException, IOException {
         int compTypeId = readInt();
 
-        return compTypeId == 0 ? U.forName(readUTF(), clsLdr, null, useCache) :
+        return compTypeId == 0 ? CommonUtils.forName(readUTF(), clsLdr, null, 
useCache) :
             classDescriptor(clsMap, compTypeId, clsLdr, useCache, ctx, 
mapper).describedClass();
     }
 
@@ -539,7 +545,7 @@ class OptimizedObjectInputStream extends ObjectInputStream {
         // Must have 'Class.forName()' instead of clsLoader.loadClass()
         // due to weird ClassNotFoundExceptions for arrays of classes
         // in certain cases.
-        return U.forName(desc.getName(), clsLdr, ctx.classNameFilter());
+        return CommonUtils.forName(desc.getName(), clsLdr, 
ctx.classNameFilter(), Marshallers.USE_CACHE.get());
     }
 
     /**
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java
similarity index 99%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java
index d3ce371324a..86e29e16298 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java
+++ 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectOutputStream.java
@@ -39,10 +39,10 @@ import java.util.Set;
 import java.util.UUID;
 import java.util.concurrent.ConcurrentMap;
 import org.apache.ignite.IgniteCheckedException;
+import org.apache.ignite.internal.util.CommonUtils;
 import org.apache.ignite.internal.util.GridHandleTable;
 import org.apache.ignite.internal.util.io.GridDataOutput;
 import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.apache.ignite.marshaller.MarshallerContext;
 import org.apache.ignite.marshaller.Marshallers;
@@ -182,7 +182,7 @@ public class OptimizedObjectOutputStream extends 
ObjectOutputStream {
         if (obj == null)
             writeByte(NULL);
         else {
-            if (obj instanceof Throwable && !(obj instanceof Externalizable) 
|| U.isEnum(obj.getClass())) {
+            if (obj instanceof Throwable && !(obj instanceof Externalizable) 
|| CommonUtils.isEnum(obj.getClass())) {
                 // Avoid problems with differing Enum objects or Enum 
implementation class deadlocks.
                 writeByte(JDK);
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectPooledStreamRegistry.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectPooledStreamRegistry.java
similarity index 95%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectPooledStreamRegistry.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectPooledStreamRegistry.java
index 632be9e577d..1ff85173d9d 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectPooledStreamRegistry.java
+++ 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectPooledStreamRegistry.java
@@ -20,7 +20,7 @@ package org.apache.ignite.internal.marshaller.optimized;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.LinkedBlockingQueue;
 import org.apache.ignite.internal.IgniteInterruptedCheckedException;
-import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.util.CommonUtils;
 
 /**
  *
@@ -71,7 +71,7 @@ public class OptimizedObjectPooledStreamRegistry extends 
OptimizedObjectStreamRe
 
     /** {@inheritDoc} */
     @Override void closeOut(OptimizedObjectOutputStream out) {
-        U.close(out, null);
+        CommonUtils.close(out, null);
 
         boolean b = outPool.offer(out);
 
@@ -80,7 +80,7 @@ public class OptimizedObjectPooledStreamRegistry extends 
OptimizedObjectStreamRe
 
     /** {@inheritDoc} */
     @Override void closeIn(OptimizedObjectInputStream in) {
-        U.close(in, null);
+        CommonUtils.close(in, null);
 
         boolean b = inPool.offer(in);
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectSharedStreamRegistry.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectSharedStreamRegistry.java
similarity index 95%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectSharedStreamRegistry.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectSharedStreamRegistry.java
index c938ccbe795..c27f2b0b517 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectSharedStreamRegistry.java
+++ 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectSharedStreamRegistry.java
@@ -17,7 +17,7 @@
 
 package org.apache.ignite.internal.marshaller.optimized;
 
-import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.internal.util.CommonUtils;
 
 /**
  *
@@ -38,7 +38,7 @@ public class OptimizedObjectSharedStreamRegistry extends 
OptimizedObjectStreamRe
 
     /** {@inheritDoc} */
     @Override void closeOut(OptimizedObjectOutputStream out) {
-        U.close(out, null);
+        CommonUtils.close(out, null);
 
         StreamHolder holder = holders.get();
 
@@ -48,7 +48,7 @@ public class OptimizedObjectSharedStreamRegistry extends 
OptimizedObjectStreamRe
 
     /** {@inheritDoc} */
     @Override void closeIn(OptimizedObjectInputStream in) {
-        U.close(in, null);
+        CommonUtils.close(in, null);
 
         StreamHolder holder = holders.get();
 
@@ -62,7 +62,7 @@ public class OptimizedObjectSharedStreamRegistry extends 
OptimizedObjectStreamRe
      * @param in Object input stream.
      */
     void closeNotCachedIn(OptimizedObjectInputStream in) {
-        U.close(in, null);
+        CommonUtils.close(in, null);
 
         StreamHolder holder = holders.get();
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamRegistry.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamRegistry.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamRegistry.java
rename to 
modules/binary/impl/src/main/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamRegistry.java
diff --git 
a/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/MarshallersFactoryImpl.java
 
b/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/MarshallersFactoryImpl.java
index 04a1224f8b3..e75f8cab375 100644
--- 
a/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/MarshallersFactoryImpl.java
+++ 
b/modules/binary/impl/src/main/java/org/apache/ignite/marshaller/MarshallersFactoryImpl.java
@@ -17,6 +17,8 @@
 
 package org.apache.ignite.marshaller;
 
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshallerImpl;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.marshaller.jdk.JdkMarshaller;
 import org.apache.ignite.marshaller.jdk.JdkMarshallerImpl;
@@ -38,4 +40,14 @@ public class MarshallersFactoryImpl implements 
MarshallersFactory {
     @Override public JdkMarshaller jdk(@Nullable IgnitePredicate<String> 
clsFilter) {
         return clsFilter == null ? INSTANCE : new JdkMarshallerImpl(clsFilter);
     }
+
+    /** {@inheritDoc} */
+    @Override public OptimizedMarshaller optimized() {
+        return new OptimizedMarshallerImpl();
+    }
+
+    /** {@inheritDoc} */
+    @Override public OptimizedMarshaller optimized(boolean requireSer) {
+        return new OptimizedMarshallerImpl(requireSer);
+    }
 }
diff --git 
a/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java
 
b/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java
index b0957c244c5..64dcfd2274a 100644
--- 
a/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java
+++ 
b/modules/commons/src/main/java/org/apache/ignite/IgniteCommonsSystemProperties.java
@@ -17,11 +17,14 @@
 
 package org.apache.ignite;
 
+import java.io.Serializable;
+import org.apache.ignite.internal.util.GridLogThrottle;
 import org.jetbrains.annotations.Nullable;
 
 import static 
org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE;
 import static 
org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_RECHECK;
 import static 
org.apache.ignite.internal.util.CommonUtils.DFLT_MEMORY_PER_BYTE_COPY_THRESHOLD;
+import static 
org.apache.ignite.internal.util.GridLogThrottle.DFLT_LOG_THROTTLE_CAPACITY;
 import static 
org.apache.ignite.internal.util.tostring.GridToStringBuilder.DFLT_TO_STRING_COLLECTION_LIMIT;
 import static 
org.apache.ignite.internal.util.tostring.GridToStringBuilder.DFLT_TO_STRING_INCLUDE_SENSITIVE;
 import static 
org.apache.ignite.internal.util.tostring.GridToStringBuilder.DFLT_TO_STRING_MAX_LENGTH;
@@ -85,6 +88,27 @@ public class IgniteCommonsSystemProperties {
         type = Integer.class, defaults = "" + 
DFLT_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE)
     public static final String IGNITE_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE = 
"IGNITE_MARSHAL_BUFFERS_PER_THREAD_POOL_SIZE";
 
+    /**
+     * Manages {@code OptimizedMarshaller} behavior of {@code 
serialVersionUID} computation for
+     * {@link Serializable} classes.
+     */
+    @SystemProperty("Manages OptimizedMarshaller behavior of serialVersionUID 
computation " +
+        "for Serializable classes")
+    public static final String IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID =
+        "IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID";
+
+    /**
+     * When set to {@code true}, warnings that are intended for development 
environments and not for production
+     * (such as coding mistakes in code using Ignite) will not be logged.
+     */
+    @SystemProperty("Enables development environments warnings")
+    public static final String IGNITE_DEV_ONLY_LOGGING_DISABLED = 
"IGNITE_DEV_ONLY_LOGGING_DISABLED";
+
+    /** Max amount of remembered errors for {@link GridLogThrottle}. */
+    @SystemProperty(value = "Max amount of remembered errors for 
GridLogThrottle", type = Integer.class,
+        defaults = "" + DFLT_LOG_THROTTLE_CAPACITY)
+    public static final String IGNITE_LOG_THROTTLE_CAPACITY = 
"IGNITE_LOG_THROTTLE_CAPACITY";
+
     /**
      * @param enumCls Enum type.
      * @param name Name of the system property or environment variable.
diff --git a/modules/core/src/main/java/org/apache/ignite/IgniteLogger.java 
b/modules/commons/src/main/java/org/apache/ignite/IgniteLogger.java
similarity index 100%
rename from modules/core/src/main/java/org/apache/ignite/IgniteLogger.java
rename to modules/commons/src/main/java/org/apache/ignite/IgniteLogger.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/IgniteInterruptedCheckedException.java
 
b/modules/commons/src/main/java/org/apache/ignite/internal/IgniteInterruptedCheckedException.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/IgniteInterruptedCheckedException.java
rename to 
modules/commons/src/main/java/org/apache/ignite/internal/IgniteInterruptedCheckedException.java
diff --git 
a/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
 
b/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
index 2b1c7ccc6e3..0a8f4174100 100644
--- 
a/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
+++ 
b/modules/commons/src/main/java/org/apache/ignite/internal/util/CommonUtils.java
@@ -21,11 +21,22 @@ import java.io.DataInput;
 import java.io.DataOutput;
 import java.io.Externalizable;
 import java.io.IOException;
+import java.io.PrintStream;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.net.DatagramSocket;
+import java.net.Socket;
+import java.net.SocketException;
+import java.net.URLClassLoader;
+import java.nio.channels.ClosedChannelException;
+import java.nio.channels.SelectionKey;
+import java.nio.channels.Selector;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.time.Instant;
+import java.time.ZoneId;
+import java.time.format.DateTimeFormatter;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.ServiceLoader;
@@ -35,9 +46,13 @@ import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.TimeUnit;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.IgniteCommonsSystemProperties;
+import org.apache.ignite.IgniteLogger;
 import org.apache.ignite.internal.processors.cache.CacheClassLoaderMarker;
 import org.apache.ignite.internal.util.typedef.F;
+import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.internal.util.typedef.internal.A;
+import org.apache.ignite.internal.util.typedef.internal.LT;
+import org.apache.ignite.internal.util.typedef.internal.SB;
 import org.apache.ignite.lang.IgnitePredicate;
 import org.jetbrains.annotations.Nullable;
 
@@ -45,6 +60,10 @@ import org.jetbrains.annotations.Nullable;
  * Collection of utility methods used in 'ignite-commons' and throughout the 
system.
  */
 public abstract class CommonUtils {
+    /** Dev only logging disabled. */
+    private static final boolean devOnlyLogDisabled =
+        
IgniteCommonsSystemProperties.getBoolean(IgniteCommonsSystemProperties.IGNITE_DEV_ONLY_LOGGING_DISABLED);
+
     /**
      * The maximum size of array to allocate.
      * Some VMs reserve some header words in an array.
@@ -100,6 +119,17 @@ public abstract class CommonUtils {
         }
     };
 
+    /** Ignite package. */
+    public static final String IGNITE_PKG = "org.apache.ignite.";
+
+    /**
+     * Short date format pattern for log messages in "quiet" mode.
+     * Only time is included since we don't expect "quiet" mode to be used
+     * for longer runs.
+     */
+    public static final DateTimeFormatter SHORT_DATE_FMT =
+        
DateTimeFormatter.ofPattern("HH:mm:ss").withZone(ZoneId.systemDefault());
+
     /** Class loader used to load Ignite. */
     private static final ClassLoader gridClassLoader = 
CommonUtils.class.getClassLoader();
 
@@ -561,7 +591,7 @@ public abstract class CommonUtils {
     }
 
     /**
-     * Tests whether given class is loadable by provided class loader.
+     * Tests whether given class is loadable with provided class loader.
      *
      * @param clsName Class name to test.
      * @param ldr Class loader to test with. If {@code null} - we'll use 
system class loader instead.
@@ -587,7 +617,7 @@ public abstract class CommonUtils {
     }
 
     /**
-     * Gets a class for a given name if it can be loaded or a given default 
class otherwise.
+     * Gets class for the given name if it can be loaded or default given 
class.
      *
      * @param cls Class.
      * @param dflt Default class to return.
@@ -598,7 +628,7 @@ public abstract class CommonUtils {
     }
 
     /**
-     * Gets a class for a given name if it can be loaded or a given default 
class otherwise.
+     * Gets class for the given name if it can be loaded or default given 
class.
      *
      * @param cls Class.
      * @param dflt Default class to return.
@@ -740,4 +770,449 @@ public abstract class CommonUtils {
 
         return clsName.substring(0, idx0 >= 0 ? idx0 : idx1);
     }
+
+    /**
+     * Returns {@code true} if class is a lambda.
+     *
+     * @param objectClass Class.
+     * @return {@code true} if class is a lambda, {@code false} otherwise.
+     */
+    public static boolean isLambda(Class<?> objectClass) {
+        return !objectClass.isPrimitive() && !objectClass.isArray()
+            // Order is crucial here, isAnonymousClass and isLocalClass may 
fail if
+            // class' outer class was loaded with different classloader.
+            && objectClass.isSynthetic()
+            && !objectClass.isAnonymousClass() && !objectClass.isLocalClass()
+            && classCannotBeLoadedByName(objectClass);
+    }
+
+    /**
+     * Returns {@code true} if class can not be loaded by name.
+     *
+     * @param objectClass Class.
+     * @return {@code true} if class can not be loaded by name, {@code false} 
otherwise.
+     */
+    public static boolean classCannotBeLoadedByName(Class<?> objectClass) {
+        try {
+            Class.forName(objectClass.getName());
+            return false;
+        }
+        catch (ClassNotFoundException e) {
+            return true;
+        }
+    }
+
+    /**
+     * Creates new {@link HashMap} with expected size.
+     *
+     * @param expSize Expected size of created map.
+     * @param <K> Type of map keys.
+     * @param <V> Type of map values.
+     * @return New map.
+     */
+    public static <K, V> HashMap<K, V> newHashMap(int expSize) {
+        return new HashMap<>(capacity(expSize));
+    }
+
+    /**
+     * Closes given resource logging possible checked exception.
+     *
+     * @param rsrc Resource to close. If it's {@code null} - it's no-op.
+     * @param log Logger to log possible checked exception with (optional).
+     */
+    public static void close(@Nullable AutoCloseable rsrc, @Nullable 
IgniteLogger log) {
+        if (rsrc != null) {
+            try {
+                rsrc.close();
+            }
+            catch (Exception e) {
+                warn(log, "Failed to close resource: " + e.getMessage(), e);
+            }
+        }
+    }
+
+    /**
+     * Closes given socket logging possible checked exception.
+     *
+     * @param sock Socket to close. If it's {@code null} - it's no-op.
+     * @param log Logger to log possible checked exception with (optional).
+     */
+    public static void close(@Nullable Socket sock, @Nullable IgniteLogger 
log) {
+        if (sock == null || sock.isClosed())
+            return;
+
+        try {
+            // Closing output and input first to avoid tls 1.3 incompatibility
+            // https://bugs.openjdk.java.net/browse/JDK-8208526
+            if (!sock.isOutputShutdown())
+                sock.shutdownOutput();
+            if (!sock.isInputShutdown())
+                sock.shutdownInput();
+        }
+        catch (ClosedChannelException | SocketException ex) {
+            LT.warn(log, "Failed to shutdown socket", ex);
+        }
+        catch (Exception e) {
+            warn(log, "Failed to shutdown socket: " + e.getMessage(), e);
+        }
+
+        try {
+            sock.close();
+        }
+        catch (ClosedChannelException | SocketException ex) {
+            LT.warn(log, "Failed to close socket", ex);
+        }
+        catch (Exception e) {
+            warn(log, "Failed to close socket: " + e.getMessage(), e);
+        }
+    }
+
+    /**
+     * Closes given resource logging possible checked exceptions.
+     *
+     * @param rsrc Resource to close. If it's {@code null} - it's no-op.
+     * @param log Logger to log possible checked exception with (optional).
+     */
+    public static void close(@Nullable SelectionKey rsrc, @Nullable 
IgniteLogger log) {
+        if (rsrc != null)
+            // This apply will automatically deregister the selection key as 
well.
+            close(rsrc.channel(), log);
+    }
+
+    /**
+     * Closes given resource.
+     *
+     * @param rsrc Resource to close. If it's {@code null} - it's no-op.
+     */
+    public static void close(@Nullable DatagramSocket rsrc) {
+        if (rsrc != null)
+            rsrc.close();
+    }
+
+    /**
+     * Closes given resource logging possible checked exception.
+     *
+     * @param rsrc Resource to close. If it's {@code null} - it's no-op.
+     * @param log Logger to log possible checked exception with (optional).
+     */
+    public static void close(@Nullable Selector rsrc, @Nullable IgniteLogger 
log) {
+        if (rsrc != null)
+            try {
+                if (rsrc.isOpen())
+                    rsrc.close();
+            }
+            catch (IOException e) {
+                warn(log, "Failed to close resource: " + e.getMessage());
+            }
+    }
+
+    /**
+     * Closes class loader logging possible checked exception.
+     *
+     * @param clsLdr Class loader. If it's {@code null} - it's no-op.
+     * @param log Logger to log possible checked exception with (optional).
+     */
+    public static void close(@Nullable URLClassLoader clsLdr, @Nullable 
IgniteLogger log) {
+        if (clsLdr != null) {
+            try {
+                clsLdr.close();
+            }
+            catch (Exception e) {
+                warn(log, "Failed to close resource: " + e.getMessage());
+            }
+        }
+    }
+
+    /**
+     * Depending on whether log is provided and quiet mode is enabled logs 
given
+     * messages as quiet message or normal log WARN message. If {@code log} is 
{@code null}
+     * or in QUIET mode it will add {@code (wrn)} prefix to the message.
+     *
+     * @param log Optional logger to use when QUIET mode is not enabled.
+     * @param msg Message to log.
+     */
+    public static void warn(@Nullable IgniteLogger log, Object msg) {
+        assert msg != null;
+
+        String s = msg.toString();
+
+        warn(log, s, null);
+    }
+
+    /**
+     * Depending on whether log is provided and quiet mode is enabled logs 
given
+     * messages as quiet message or normal log WARN message. If {@code log} is 
{@code null}
+     * or in QUIET mode it will add {@code (wrn)} prefix to the message.
+     *
+     * @param log Optional logger to use when QUIET mode is not enabled.
+     * @param msg Message to log using normal logger.
+     * @param e Optional exception.
+     */
+    public static void warn(@Nullable IgniteLogger log, Object msg, @Nullable 
Throwable e) {
+        assert msg != null;
+
+        if (log != null)
+            log.warning(compact(msg.toString()), e);
+        else {
+            X.println("[" + SHORT_DATE_FMT.format(Instant.now()) + "] (wrn) " +
+                compact(msg.toString()));
+
+            if (e != null)
+                e.printStackTrace(System.err);
+            else
+                X.printerrln();
+        }
+    }
+
+    /**
+     * Logs warning message in both verbose and quiet modes.
+     *
+     * @param log Logger to use.
+     * @param msg Message to log.
+     */
+    public static void quietAndWarn(IgniteLogger log, Object msg) {
+        quietAndWarn(log, msg, msg);
+    }
+
+    /**
+     * Logs warning message in both verbose and quiet modes.
+     *
+     * @param log Logger to use.
+     * @param shortMsg Short message.
+     * @param msg Message to log.
+     */
+    public static void quietAndWarn(IgniteLogger log, Object msg, Object 
shortMsg) {
+        warn(log, msg);
+
+        if (log.isQuiet())
+            quiet(false, shortMsg);
+    }
+
+    /**
+     * Logs warning message in both verbose and quiet modes.
+     *
+     * @param log Logger to use.
+     * @param msg Message to log.
+     * @param e Optional exception.
+     */
+    public static void quietAndWarn(IgniteLogger log, Object msg, @Nullable 
Throwable e) {
+        warn(log, msg, e);
+
+        if (log.isQuiet())
+            quiet(false, msg);
+    }
+
+    /**
+     * Depending on whether log is provided and quiet mode is enabled logs 
given
+     * messages as quiet message or normal log ERROR message. If {@code log} 
is {@code null}
+     * or in QUIET mode it will add {@code (err)} prefix to the message.
+     *
+     * @param log Optional logger to use when QUIET mode is not enabled.
+     * @param msg Message to log.
+     */
+    public static void error(@Nullable IgniteLogger log, Object msg) {
+        assert msg != null;
+
+        if (msg instanceof Throwable) {
+            Throwable t = (Throwable)msg;
+
+            error(log, t.getMessage(), t);
+        }
+        else {
+            String s = msg.toString();
+
+            error(log, s, s, null);
+        }
+    }
+
+    /**
+     * Depending on whether log is provided and quiet mode is enabled logs 
given
+     * messages as quiet message or normal log WARN message with {@link 
IgniteLogger#DEV_ONLY DEV_ONLY} marker.
+     * If {@code log} is {@code null} or in QUIET mode it will add {@code 
(wrn)} prefix to the message.
+     * If property {@link 
IgniteCommonsSystemProperties#IGNITE_DEV_ONLY_LOGGING_DISABLED 
IGNITE_DEV_ONLY_LOGGING_DISABLED}
+     * is set to true, the message will not be logged.
+     *
+     * @param log Optional logger to use when QUIET mode is not enabled.
+     * @param msg Message to log.
+     */
+    public static void warnDevOnly(@Nullable IgniteLogger log, Object msg) {
+        assert msg != null;
+
+        // don't log message if DEV_ONLY messages are disabled
+        if (devOnlyLogDisabled)
+            return;
+
+        if (log != null)
+            log.warning(IgniteLogger.DEV_ONLY, compact(msg.toString()), null);
+        else
+            X.println("[" + SHORT_DATE_FMT.format(Instant.now()) + "] (wrn) " +
+                compact(msg.toString()));
+    }
+
+    /**
+     * Depending on whether log is provided and quiet mode is enabled logs 
given
+     * messages as quiet message or normal log INFO message.
+     * <p>
+     * <b>NOTE:</b> unlike the normal logging when INFO level may not be 
enabled and
+     * therefore no logging will happen - using this method the log will be 
written
+     * always either via INFO log or quiet mode.
+     * <p>
+     * <b>USE IT APPROPRIATELY.</b>
+     *
+     * @param log Optional logger to use when QUIET mode is not enabled.
+     * @param longMsg Message to log using normal logger.
+     * @param shortMsg Message to log using quiet logger.
+     */
+    public static void log(@Nullable IgniteLogger log, Object longMsg, Object 
shortMsg) {
+        assert longMsg != null;
+        assert shortMsg != null;
+
+        if (log != null) {
+            if (log.isInfoEnabled())
+                log.info(compact(longMsg.toString()));
+        }
+        else
+            quiet(false, shortMsg);
+    }
+
+    /**
+     * Depending on whether log is provided and quiet mode is enabled logs 
given
+     * messages as quiet message or normal log INF0 message.
+     * <p>
+     * <b>NOTE:</b> unlike the normal logging when INFO level may not be 
enabled and
+     * therefore no logging will happen - using this method the log will be 
written
+     * always either via INFO log or quiet mode.
+     * <p>
+     * <b>USE IT APPROPRIATELY.</b>
+     *
+     * @param log Optional logger to use when QUIET mode is not enabled.
+     * @param msg Message to log.
+     */
+    public static void log(@Nullable IgniteLogger log, Object msg) {
+        assert msg != null;
+
+        String s = msg.toString();
+
+        log(log, s, s);
+    }
+
+    /**
+     * Depending on whether log is provided and quiet mode is enabled logs 
given
+     * messages as quiet message or normal log ERROR message. If {@code log} 
is {@code null}
+     * or in QUIET mode it will add {@code (err)} prefix to the message.
+     *
+     * @param log Optional logger to use when QUIET mode is not enabled.
+     * @param longMsg Message to log using normal logger.
+     * @param shortMsg Message to log using quiet logger.
+     * @param e Optional exception.
+     */
+    public static void error(@Nullable IgniteLogger log, Object longMsg, 
Object shortMsg, @Nullable Throwable e) {
+        assert longMsg != null;
+        assert shortMsg != null;
+
+        if (log != null) {
+            if (e == null)
+                log.error(compact(longMsg.toString()));
+            else
+                log.error(compact(longMsg.toString()), e);
+        }
+        else {
+            X.printerr("[" + SHORT_DATE_FMT.format(Instant.now()) + "] (err) " 
+
+                compact(shortMsg.toString()));
+
+            if (e != null)
+                e.printStackTrace(System.err);
+            else
+                X.printerrln();
+        }
+    }
+
+    /**
+     * Shortcut for {@link #error(org.apache.ignite.IgniteLogger, Object, 
Object, Throwable)}.
+     *
+     * @param log Optional logger.
+     * @param shortMsg Message to log using quiet logger.
+     * @param e Optional exception.
+     */
+    public static void error(@Nullable IgniteLogger log, Object shortMsg, 
@Nullable Throwable e) {
+        assert shortMsg != null;
+
+        String s = shortMsg.toString();
+
+        error(log, s, s, e);
+    }
+
+    /**
+     *
+     * @param err Whether to print to {@code System.err}.
+     * @param objs Objects to log in quiet mode.
+     */
+    public static void quiet(boolean err, Object... objs) {
+        assert objs != null;
+
+        String time = SHORT_DATE_FMT.format(Instant.now());
+
+        SB sb = new SB();
+
+        for (Object obj : objs)
+            sb.a('[').a(time).a("] ").a(obj.toString()).a(NL);
+
+        PrintStream ps = err ? System.err : System.out;
+
+        ps.print(compact(sb.toString()));
+    }
+
+    /**
+     *
+     * @param err Whether to print to {@code System.err}.
+     * @param multiline Multiple lines string to print.
+     */
+    public static void quietMultipleLines(boolean err, String multiline) {
+        assert multiline != null;
+
+        quiet(err, multiline.split(NL));
+    }
+
+    /**
+     * Prints out the message in quiet and info modes.
+     *
+     * @param log Logger.
+     * @param msg Message to print.
+     */
+    public static void quietAndInfo(IgniteLogger log, String msg) {
+        if (log.isQuiet())
+            quiet(false, msg);
+
+        if (log.isInfoEnabled())
+            log.info(msg);
+    }
+
+    /**
+     * Replaces all occurrences of {@code org.apache.ignite.} with {@code 
o.a.i.},
+     * {@code org.apache.ignite.internal.} with {@code o.a.i.i.},
+     * {@code org.apache.ignite.internal.visor.} with {@code o.a.i.i.v.} and
+     *
+     * @param s String to replace in.
+     * @return Replaces string.
+     */
+    public static String compact(String s) {
+        return s.replace("org.apache.ignite.internal.visor.", "o.a.i.i.v.").
+            replace("org.apache.ignite.internal.", "o.a.i.i.").
+            replace(IGNITE_PKG, "o.a.i.");
+    }
+
+    /**
+     * Check if given class represents a Enum.
+     *
+     * @param cls Class to check.
+     * @return {@code True} if this is a Enum class.
+     */
+    public static boolean isEnum(Class cls) {
+        if (cls.isEnum())
+            return true;
+
+        Class sCls = cls.getSuperclass();
+
+        return sCls != null && sCls.isEnum();
+    }
 }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java
 
b/modules/commons/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java
rename to 
modules/commons/src/main/java/org/apache/ignite/internal/util/GridHandleTable.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/GridLogThrottle.java
 
b/modules/commons/src/main/java/org/apache/ignite/internal/util/GridLogThrottle.java
similarity index 93%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/util/GridLogThrottle.java
rename to 
modules/commons/src/main/java/org/apache/ignite/internal/util/GridLogThrottle.java
index 3061ba5de0a..707926a819d 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/GridLogThrottle.java
+++ 
b/modules/commons/src/main/java/org/apache/ignite/internal/util/GridLogThrottle.java
@@ -18,15 +18,13 @@
 package org.apache.ignite.internal.util;
 
 import java.util.concurrent.ConcurrentMap;
+import org.apache.ignite.IgniteCommonsSystemProperties;
 import org.apache.ignite.IgniteLogger;
-import org.apache.ignite.IgniteSystemProperties;
 import org.apache.ignite.internal.util.typedef.F;
-import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.lang.IgniteBiTuple;
 import org.jetbrains.annotations.Nullable;
 import org.jsr166.ConcurrentLinkedHashMap;
 
-import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_LOG_THROTTLE_CAPACITY;
 import static org.jsr166.ConcurrentLinkedHashMap.DFLT_CONCUR_LVL;
 
 /**
@@ -44,12 +42,12 @@ public class GridLogThrottle {
     /** Throttle timeout in milliseconds. */
     private static volatile int throttleTimeout = DFLT_THROTTLE_TIMEOUT;
 
-    /** @see IgniteSystemProperties#IGNITE_LOG_THROTTLE_CAPACITY */
+    /** @see IgniteCommonsSystemProperties#IGNITE_LOG_THROTTLE_CAPACITY */
     public static final int DFLT_LOG_THROTTLE_CAPACITY = 128;
 
     /** Throttle capacity. */
     private static final int throttleCap =
-        IgniteSystemProperties.getInteger(IGNITE_LOG_THROTTLE_CAPACITY, 
DFLT_LOG_THROTTLE_CAPACITY);
+        
IgniteCommonsSystemProperties.getInteger(IgniteCommonsSystemProperties.IGNITE_LOG_THROTTLE_CAPACITY,
 DFLT_LOG_THROTTLE_CAPACITY);
 
     /** Errors. */
     private static volatile ConcurrentMap<IgniteBiTuple<Class<? extends 
Throwable>, String>, Long> errors =
@@ -220,7 +218,7 @@ public class GridLogThrottle {
         while (true) {
             Long loggedTs = errors.get(tup);
 
-            long curTs = U.currentTimeMillis();
+            long curTs = CommonUtils.currentTimeMillis();
 
             if (loggedTs == null || loggedTs < curTs - throttleTimeout) {
                 if (replace(tup, loggedTs, curTs)) {
@@ -268,9 +266,9 @@ public class GridLogThrottle {
             /** {@inheritDoc} */
             @Override public void doLog(IgniteLogger log, String msg, 
Throwable e, boolean quiet) {
                 if (e != null)
-                    U.error(log, msg, e);
+                    CommonUtils.error(log, msg, e);
                 else
-                    U.error(log, msg);
+                    CommonUtils.error(log, msg);
             }
         },
 
@@ -279,9 +277,9 @@ public class GridLogThrottle {
             /** {@inheritDoc} */
             @Override public void doLog(IgniteLogger log, String msg, 
Throwable e, boolean quiet) {
                 if (quiet)
-                    U.quietAndWarn(log, msg, e);
+                    CommonUtils.quietAndWarn(log, msg, e);
                 else
-                    U.warn(log, msg, e);
+                    CommonUtils.warn(log, msg, e);
             }
         },
 
@@ -290,7 +288,7 @@ public class GridLogThrottle {
             /** {@inheritDoc} */
             @Override public void doLog(IgniteLogger log, String msg, 
Throwable e, boolean quiet) {
                 if (quiet)
-                    U.quietAndInfo(log, msg);
+                    CommonUtils.quietAndInfo(log, msg);
                 else {
                     if (log.isInfoEnabled())
                         log.info(msg);
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridDataInput.java
 
b/modules/commons/src/main/java/org/apache/ignite/internal/util/io/GridDataInput.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/util/io/GridDataInput.java
rename to 
modules/commons/src/main/java/org/apache/ignite/internal/util/io/GridDataInput.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridDataOutput.java
 
b/modules/commons/src/main/java/org/apache/ignite/internal/util/io/GridDataOutput.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/util/io/GridDataOutput.java
rename to 
modules/commons/src/main/java/org/apache/ignite/internal/util/io/GridDataOutput.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/typedef/internal/LT.java
 
b/modules/commons/src/main/java/org/apache/ignite/internal/util/typedef/internal/LT.java
similarity index 100%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/util/typedef/internal/LT.java
rename to 
modules/commons/src/main/java/org/apache/ignite/internal/util/typedef/internal/LT.java
diff --git 
a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java 
b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
index 2dfee417fbd..b759d2f7488 100644
--- a/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
+++ b/modules/core/src/main/java/org/apache/ignite/IgniteSystemProperties.java
@@ -34,7 +34,6 @@ import org.apache.ignite.configuration.DiskPageCompression;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.binary.BinaryUtils;
 import 
org.apache.ignite.internal.cache.query.index.sorted.inline.InlineRecommender;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import 
org.apache.ignite.internal.processors.cache.persistence.checkpoint.CheckpointEntry;
 import 
org.apache.ignite.internal.processors.cache.persistence.checkpoint.CheckpointMarkersStorage;
 import 
org.apache.ignite.internal.processors.cache.persistence.snapshot.IgniteSnapshotManager;
@@ -42,7 +41,6 @@ import 
org.apache.ignite.internal.processors.metastorage.DistributedMetaStorage;
 import 
org.apache.ignite.internal.processors.performancestatistics.FilePerformanceStatisticsWriter;
 import 
org.apache.ignite.internal.processors.query.schema.SchemaIndexCachePartitionWorker;
 import org.apache.ignite.internal.processors.rest.GridRestCommand;
-import org.apache.ignite.internal.util.GridLogThrottle;
 import org.apache.ignite.internal.util.IgniteUtils;
 import org.apache.ignite.lang.IgniteExperimental;
 import org.apache.ignite.mxbean.MetricsMxBean;
@@ -134,7 +132,6 @@ import static 
org.apache.ignite.internal.processors.query.schema.SchemaIndexCach
 import static 
org.apache.ignite.internal.processors.rest.GridRestProcessor.DFLT_SES_TIMEOUT;
 import static 
org.apache.ignite.internal.processors.rest.GridRestProcessor.DFLT_SES_TOKEN_INVALIDATE_INTERVAL;
 import static 
org.apache.ignite.internal.processors.rest.handlers.task.GridTaskCommandHandler.DFLT_MAX_TASK_RESULTS;
-import static 
org.apache.ignite.internal.util.GridLogThrottle.DFLT_LOG_THROTTLE_CAPACITY;
 import static 
org.apache.ignite.internal.util.GridReflectionCache.DFLT_REFLECTION_CACHE_SIZE;
 import static 
org.apache.ignite.internal.util.IgniteExceptionRegistry.DEFAULT_QUEUE_SIZE;
 import static 
org.apache.ignite.internal.util.IgniteUtils.DFLT_MBEAN_APPEND_CLASS_LOADER_ID;
@@ -834,15 +831,6 @@ public final class IgniteSystemProperties extends 
IgniteCommonsSystemProperties
     @SystemProperty("Enables local store keeps primary only. Backward 
compatibility flag")
     public static final String IGNITE_LOCAL_STORE_KEEPS_PRIMARY_ONLY = 
"IGNITE_LOCAL_STORE_KEEPS_PRIMARY_ONLY";
 
-    /**
-     * Manages {@link OptimizedMarshaller} behavior of {@code 
serialVersionUID} computation for
-     * {@link Serializable} classes.
-     */
-    @SystemProperty("Manages OptimizedMarshaller behavior of serialVersionUID 
computation " +
-        "for Serializable classes")
-    public static final String IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID =
-        "IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID";
-
     /**
      * Manages type of serialization mechanism for {@link String} that is 
marshalled/unmarshalled by BinaryMarshaller.
      * Should be used for cases when a String contains a surrogate symbol 
without its pair one. This is frequently used
@@ -1162,11 +1150,6 @@ public final class IgniteSystemProperties extends 
IgniteCommonsSystemProperties
         defaults = "" + DFLT_USE_ASYNC_FILE_IO_FACTORY)
     public static final String IGNITE_USE_ASYNC_FILE_IO_FACTORY = 
"IGNITE_USE_ASYNC_FILE_IO_FACTORY";
 
-    /** Max amount of remembered errors for {@link GridLogThrottle}. */
-    @SystemProperty(value = "Max amount of remembered errors for 
GridLogThrottle", type = Integer.class,
-        defaults = "" + DFLT_LOG_THROTTLE_CAPACITY)
-    public static final String IGNITE_LOG_THROTTLE_CAPACITY = 
"IGNITE_LOG_THROTTLE_CAPACITY";
-
     /**
      * If this property is set, {@link 
DataStorageConfiguration#setWriteThrottlingEnabled(boolean)}
      * will be overridden to {@code true} regardless the initial value in the 
configuration.
@@ -1267,13 +1250,6 @@ public final class IgniteSystemProperties extends 
IgniteCommonsSystemProperties
         "this mode", defaults = "true")
     public static final String IGNITE_DIRECT_IO_ENABLED = 
"IGNITE_DIRECT_IO_ENABLED";
 
-    /**
-     * When set to {@code true}, warnings that are intended for development 
environments and not for production
-     * (such as coding mistakes in code using Ignite) will not be logged.
-     */
-    @SystemProperty("Enables development environments warnings")
-    public static final String IGNITE_DEV_ONLY_LOGGING_DISABLED = 
"IGNITE_DEV_ONLY_LOGGING_DISABLED";
-
     /**
      * When set to {@code true} (default), pages are written to page store 
without holding segment lock (with delay).
      * Because other thread may require exactly the same page to be loaded 
from store, reads are protected by locking.
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java 
b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
index ac58cfc992d..a3e0ac10b61 100644
--- a/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
+++ b/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java
@@ -112,7 +112,6 @@ import 
org.apache.ignite.internal.managers.systemview.GridSystemViewManager;
 import 
org.apache.ignite.internal.managers.systemview.IgniteConfigurationIterable;
 import 
org.apache.ignite.internal.managers.systemview.walker.ConfigurationViewWalker;
 import org.apache.ignite.internal.managers.tracing.GridTracingManager;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.plugin.IgniteLogInfoProvider;
 import org.apache.ignite.internal.plugin.IgniteLogInfoProviderImpl;
 import org.apache.ignite.internal.processors.GridProcessor;
@@ -205,6 +204,7 @@ import 
org.apache.ignite.marshaller.IgniteMarshallerClassFilter;
 import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.marshaller.MarshallerExclusions;
 import org.apache.ignite.marshaller.MarshallerUtils;
+import org.apache.ignite.marshaller.Marshallers;
 import org.apache.ignite.metric.IgniteMetrics;
 import org.apache.ignite.metric.MetricRegistry;
 import org.apache.ignite.plugin.IgnitePlugin;
@@ -1416,8 +1416,7 @@ public class IgniteKernal implements IgniteEx, 
Externalizable {
         Marshaller marsh = ctx.marshaller();
 
         marsh.setContext(ctx.marshallerContext());
-
-        MarshallerUtils.setNodeName(marsh, ctx.igniteInstanceName());
+        marsh.nodeName(ctx.igniteInstanceName());
     }
 
     /** */
@@ -1535,7 +1534,7 @@ public class IgniteKernal implements IgniteEx, 
Externalizable {
         add(ATTR_BUILD_DATE, BUILD_TSTAMP_STR);
         add(ATTR_MARSHALLER, ctx.marshaller().getClass().getName());
         add(ATTR_MARSHALLER_USE_DFLT_SUID,
-            getBoolean(IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID, 
OptimizedMarshaller.USE_DFLT_SUID));
+            getBoolean(IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID, 
Marshallers.USE_DFLT_SUID));
         add(ATTR_LATE_AFFINITY_ASSIGNMENT, cfg.isLateAffinityAssignment());
 
         add(ATTR_MARSHALLER_COMPACT_FOOTER, cfg.getBinaryConfiguration() == 
null ?
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
index 28131e156d0..9191ceddfb1 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/MarshallerContextImpl.java
@@ -639,7 +639,7 @@ public class MarshallerContextImpl implements 
MarshallerContext {
         if (CU.isPersistenceEnabled(ctx.config()))
             fileStore.restoreMappings(this);
 
-        MarshallerUtils.setNodeName(jdkMarsh, ctx.igniteInstanceName());
+        jdkMarsh.nodeName(ctx.igniteInstanceName());
     }
 
     /**
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
index 81b8035a3e3..099b3edaf65 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/binary/BinaryContext.java
@@ -147,7 +147,7 @@ public class BinaryContext {
     private final IgniteLogger log;
 
     /** */
-    private final OptimizedMarshaller optmMarsh = new 
OptimizedMarshaller(false);
+    private final OptimizedMarshaller optmMarsh = Marshallers.optimized(false);
 
     /** Compact footer flag. */
     private final boolean compactFooter;
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java
 
b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java
index 267abee4784..2677959f0b4 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/client/marshaller/optimized/GridClientOptimizedMarshaller.java
@@ -26,6 +26,7 @@ import 
org.apache.ignite.internal.client.marshaller.GridClientMarshaller;
 import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import 
org.apache.ignite.internal.processors.rest.client.message.GridClientMessage;
 import org.apache.ignite.internal.util.typedef.internal.U;
+import org.apache.ignite.marshaller.Marshallers;
 import org.apache.ignite.plugin.PluginProvider;
 import org.jetbrains.annotations.Nullable;
 
@@ -44,7 +45,7 @@ public class GridClientOptimizedMarshaller implements 
GridClientMarshaller {
      * Default constructor.
      */
     public GridClientOptimizedMarshaller() {
-        opMarsh = new OptimizedMarshaller();
+        opMarsh = Marshallers.optimized();
 
         opMarsh.setContext(new MarshallerContextImpl(null, null));
     }
@@ -55,7 +56,7 @@ public class GridClientOptimizedMarshaller implements 
GridClientMarshaller {
      * @param plugins Plugins.
      */
     public GridClientOptimizedMarshaller(@Nullable List<PluginProvider> 
plugins) {
-        opMarsh = new OptimizedMarshaller();
+        opMarsh = Marshallers.optimized();
 
         opMarsh.setContext(new MarshallerContextImpl(plugins, null));
     }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java 
b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
index 71e42f6a04b..e8c5a63c337 100755
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/internal/util/IgniteUtils.java
@@ -35,7 +35,6 @@ import java.io.ObjectInputStream;
 import java.io.ObjectOutput;
 import java.io.ObjectOutputStream;
 import java.io.OutputStream;
-import java.io.PrintStream;
 import java.io.Reader;
 import java.io.Serializable;
 import java.io.StringWriter;
@@ -55,7 +54,6 @@ import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.math.BigDecimal;
 import java.math.MathContext;
-import java.net.DatagramSocket;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
 import java.net.MalformedURLException;
@@ -70,10 +68,7 @@ import java.net.URL;
 import java.net.URLClassLoader;
 import java.nio.ByteBuffer;
 import java.nio.ByteOrder;
-import java.nio.channels.ClosedChannelException;
 import java.nio.channels.FileLock;
-import java.nio.channels.SelectionKey;
-import java.nio.channels.Selector;
 import java.nio.channels.SocketChannel;
 import java.nio.charset.Charset;
 import java.nio.file.DirectoryStream;
@@ -218,7 +213,6 @@ import org.apache.ignite.internal.util.typedef.P1;
 import org.apache.ignite.internal.util.typedef.X;
 import org.apache.ignite.internal.util.typedef.internal.A;
 import org.apache.ignite.internal.util.typedef.internal.CU;
-import org.apache.ignite.internal.util.typedef.internal.LT;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.SB;
 import org.apache.ignite.internal.util.worker.GridWorker;
@@ -353,9 +347,6 @@ public abstract class IgniteUtils extends CommonUtils {
     /** Length of numbered file name. */
     public static final int NUMBER_FILE_NAME_LENGTH = 16;
 
-    /** Ignite package. */
-    public static final String IGNITE_PKG = "org.apache.ignite.";
-
     /** Project home directory. */
     private static volatile GridTuple<String> ggHome;
 
@@ -403,14 +394,6 @@ public abstract class IgniteUtils extends CommonUtils {
     public static final DateTimeFormatter LONG_DATE_FMT =
         DateTimeFormatter.ofPattern("MM/dd/yyyy 
HH:mm:ss").withZone(ZoneId.systemDefault());
 
-    /**
-     * Short date format pattern for log messages in "quiet" mode.
-     * Only time is included since we don't expect "quiet" mode to be used
-     * for longer runs.
-     */
-    public static final DateTimeFormatter SHORT_DATE_FMT =
-        
DateTimeFormatter.ofPattern("HH:mm:ss").withZone(ZoneId.systemDefault());
-
     /** Debug date format. */
     public static final DateTimeFormatter DEBUG_DATE_FMT =
         
DateTimeFormatter.ofPattern("HH:mm:ss,SSS").withZone(ZoneId.systemDefault());
@@ -493,10 +476,6 @@ public abstract class IgniteUtils extends CommonUtils {
      */
     private static final Field urlClsLdrField = urlClassLoaderField();
 
-    /** Dev only logging disabled. */
-    private static final boolean devOnlyLogDisabled =
-        
IgniteSystemProperties.getBoolean(IgniteSystemProperties.IGNITE_DEV_ONLY_LOGGING_DISABLED);
-
     /** JDK9: jdk.internal.loader.URLClassPath. */
     private static Class clsURLClassPath;
 
@@ -3264,59 +3243,6 @@ public abstract class IgniteUtils extends CommonUtils {
         return false;
     }
 
-    /**
-     * Closes given resource logging possible checked exception.
-     *
-     * @param rsrc Resource to close. If it's {@code null} - it's no-op.
-     * @param log Logger to log possible checked exception with (optional).
-     */
-    public static void close(@Nullable AutoCloseable rsrc, @Nullable 
IgniteLogger log) {
-        if (rsrc != null) {
-            try {
-                rsrc.close();
-            }
-            catch (Exception e) {
-                warn(log, "Failed to close resource: " + e.getMessage(), e);
-            }
-        }
-    }
-
-    /**
-     * Closes given socket logging possible checked exception.
-     *
-     * @param sock Socket to close. If it's {@code null} - it's no-op.
-     * @param log Logger to log possible checked exception with (optional).
-     */
-    public static void close(@Nullable Socket sock, @Nullable IgniteLogger 
log) {
-        if (sock == null || sock.isClosed())
-            return;
-
-        try {
-            // Closing output and input first to avoid tls 1.3 incompatibility
-            // https://bugs.openjdk.java.net/browse/JDK-8208526
-            if (!sock.isOutputShutdown())
-                sock.shutdownOutput();
-            if (!sock.isInputShutdown())
-                sock.shutdownInput();
-        }
-        catch (ClosedChannelException | SocketException ex) {
-            LT.warn(log, "Failed to shutdown socket", ex);
-        }
-        catch (Exception e) {
-            warn(log, "Failed to shutdown socket: " + e.getMessage(), e);
-        }
-
-        try {
-            sock.close();
-        }
-        catch (ClosedChannelException | SocketException ex) {
-            LT.warn(log, "Failed to close socket", ex);
-        }
-        catch (Exception e) {
-            warn(log, "Failed to close socket: " + e.getMessage(), e);
-        }
-    }
-
     /**
      * Closes given resource suppressing possible checked exception.
      *
@@ -3348,62 +3274,6 @@ public abstract class IgniteUtils extends CommonUtils {
             }
     }
 
-    /**
-     * Closes given resource logging possible checked exceptions.
-     *
-     * @param rsrc Resource to close. If it's {@code null} - it's no-op.
-     * @param log Logger to log possible checked exception with (optional).
-     */
-    public static void close(@Nullable SelectionKey rsrc, @Nullable 
IgniteLogger log) {
-        if (rsrc != null)
-            // This apply will automatically deregister the selection key as 
well.
-            close(rsrc.channel(), log);
-    }
-
-    /**
-     * Closes given resource.
-     *
-     * @param rsrc Resource to close. If it's {@code null} - it's no-op.
-     */
-    public static void close(@Nullable DatagramSocket rsrc) {
-        if (rsrc != null)
-            rsrc.close();
-    }
-
-    /**
-     * Closes given resource logging possible checked exception.
-     *
-     * @param rsrc Resource to close. If it's {@code null} - it's no-op.
-     * @param log Logger to log possible checked exception with (optional).
-     */
-    public static void close(@Nullable Selector rsrc, @Nullable IgniteLogger 
log) {
-        if (rsrc != null)
-            try {
-                if (rsrc.isOpen())
-                    rsrc.close();
-            }
-            catch (IOException e) {
-                warn(log, "Failed to close resource: " + e.getMessage());
-            }
-    }
-
-    /**
-     * Closes class loader logging possible checked exception.
-     *
-     * @param clsLdr Class loader. If it's {@code null} - it's no-op.
-     * @param log Logger to log possible checked exception with (optional).
-     */
-    public static void close(@Nullable URLClassLoader clsLdr, @Nullable 
IgniteLogger log) {
-        if (clsLdr != null) {
-            try {
-                clsLdr.close();
-            }
-            catch (Exception e) {
-                warn(log, "Failed to close resource: " + e.getMessage());
-            }
-        }
-    }
-
     /**
      * Quietly closes given {@link Socket} ignoring possible checked exception.
      *
@@ -3499,158 +3369,6 @@ public abstract class IgniteUtils extends CommonUtils {
                 compact(shortMsg.toString()));
     }
 
-    /**
-     * Depending on whether or not log is provided and quiet mode is enabled 
logs given
-     * messages as quiet message or normal log WARN message. If {@code log} is 
{@code null}
-     * or in QUIET mode it will add {@code (wrn)} prefix to the message.
-     *
-     * @param log Optional logger to use when QUIET mode is not enabled.
-     * @param msg Message to log.
-     */
-    public static void warn(@Nullable IgniteLogger log, Object msg) {
-        assert msg != null;
-
-        String s = msg.toString();
-
-        warn(log, s, null);
-    }
-
-    /**
-     * Logs warning message in both verbose and quiet modes.
-     *
-     * @param log Logger to use.
-     * @param msg Message to log.
-     */
-    public static void quietAndWarn(IgniteLogger log, Object msg) {
-        quietAndWarn(log, msg, msg);
-    }
-
-    /**
-     * Logs warning message in both verbose and quiet modes.
-     *
-     * @param log Logger to use.
-     * @param shortMsg Short message.
-     * @param msg Message to log.
-     */
-    public static void quietAndWarn(IgniteLogger log, Object msg, Object 
shortMsg) {
-        warn(log, msg);
-
-        if (log.isQuiet())
-            quiet(false, shortMsg);
-    }
-
-    /**
-     * Logs warning message in both verbose and quiet modes.
-     *
-     * @param log Logger to use.
-     * @param msg Message to log.
-     * @param e Optional exception.
-     */
-    public static void quietAndWarn(IgniteLogger log, Object msg, @Nullable 
Throwable e) {
-        warn(log, msg, e);
-
-        if (log.isQuiet())
-            quiet(false, msg);
-    }
-
-    /**
-     * Depending on whether or not log is provided and quiet mode is enabled 
logs given
-     * messages as quiet message or normal log ERROR message. If {@code log} 
is {@code null}
-     * or in QUIET mode it will add {@code (err)} prefix to the message.
-     *
-     * @param log Optional logger to use when QUIET mode is not enabled.
-     * @param msg Message to log.
-     */
-    public static void error(@Nullable IgniteLogger log, Object msg) {
-        assert msg != null;
-
-        if (msg instanceof Throwable) {
-            Throwable t = (Throwable)msg;
-
-            error(log, t.getMessage(), t);
-        }
-        else {
-            String s = msg.toString();
-
-            error(log, s, s, null);
-        }
-    }
-
-    /**
-     * Depending on whether or not log is provided and quiet mode is enabled 
logs given
-     * messages as quiet message or normal log WARN message. If {@code log} is 
{@code null}
-     * or in QUIET mode it will add {@code (wrn)} prefix to the message.
-     *
-     * @param log Optional logger to use when QUIET mode is not enabled.
-     * @param msg Message to log using normal logger.
-     * @param e Optional exception.
-     */
-    public static void warn(@Nullable IgniteLogger log, Object msg, @Nullable 
Throwable e) {
-        assert msg != null;
-
-        if (log != null)
-            log.warning(compact(msg.toString()), e);
-        else {
-            X.println("[" + SHORT_DATE_FMT.format(Instant.now()) + "] (wrn) " +
-                    compact(msg.toString()));
-
-            if (e != null)
-                e.printStackTrace(System.err);
-            else
-                X.printerrln();
-        }
-    }
-
-    /**
-     * Depending on whether or not log is provided and quiet mode is enabled 
logs given
-     * messages as quiet message or normal log WARN message with {@link 
IgniteLogger#DEV_ONLY DEV_ONLY} marker.
-     * If {@code log} is {@code null} or in QUIET mode it will add {@code 
(wrn)} prefix to the message.
-     * If property {@link 
IgniteSystemProperties#IGNITE_DEV_ONLY_LOGGING_DISABLED 
IGNITE_DEV_ONLY_LOGGING_DISABLED}
-     * is set to true, the message will not be logged.
-     *
-     * @param log Optional logger to use when QUIET mode is not enabled.
-     * @param msg Message to log.
-     */
-    public static void warnDevOnly(@Nullable IgniteLogger log, Object msg) {
-        assert msg != null;
-
-        // don't log message if DEV_ONLY messages are disabled
-        if (devOnlyLogDisabled)
-            return;
-
-        if (log != null)
-            log.warning(IgniteLogger.DEV_ONLY, compact(msg.toString()), null);
-        else
-            X.println("[" + SHORT_DATE_FMT.format(Instant.now()) + "] (wrn) " +
-                compact(msg.toString()));
-    }
-
-    /**
-     * Depending on whether or not log is provided and quiet mode is enabled 
logs given
-     * messages as quiet message or normal log INFO message.
-     * <p>
-     * <b>NOTE:</b> unlike the normal logging when INFO level may not be 
enabled and
-     * therefore no logging will happen - using this method the log will be 
written
-     * always either via INFO log or quiet mode.
-     * <p>
-     * <b>USE IT APPROPRIATELY.</b>
-     *
-     * @param log Optional logger to use when QUIET mode is not enabled.
-     * @param longMsg Message to log using normal logger.
-     * @param shortMsg Message to log using quiet logger.
-     */
-    public static void log(@Nullable IgniteLogger log, Object longMsg, Object 
shortMsg) {
-        assert longMsg != null;
-        assert shortMsg != null;
-
-        if (log != null) {
-            if (log.isInfoEnabled())
-                log.info(compact(longMsg.toString()));
-        }
-        else
-            quiet(false, shortMsg);
-    }
-
     /**
      * Resolves work directory.
      * @param cfg Ignite configuration.
@@ -3773,118 +3491,6 @@ public abstract class IgniteUtils extends CommonUtils {
         }
     }
 
-    /**
-     * Depending on whether or not log is provided and quiet mode is enabled 
logs given
-     * messages as quiet message or normal log INF0 message.
-     * <p>
-     * <b>NOTE:</b> unlike the normal logging when INFO level may not be 
enabled and
-     * therefore no logging will happen - using this method the log will be 
written
-     * always either via INFO log or quiet mode.
-     * <p>
-     * <b>USE IT APPROPRIATELY.</b>
-     *
-     * @param log Optional logger to use when QUIET mode is not enabled.
-     * @param msg Message to log.
-     */
-    public static void log(@Nullable IgniteLogger log, Object msg) {
-        assert msg != null;
-
-        String s = msg.toString();
-
-        log(log, s, s);
-    }
-
-    /**
-     * Depending on whether or not log is provided and quiet mode is enabled 
logs given
-     * messages as quiet message or normal log ERROR message. If {@code log} 
is {@code null}
-     * or in QUIET mode it will add {@code (err)} prefix to the message.
-     *
-     * @param log Optional logger to use when QUIET mode is not enabled.
-     * @param longMsg Message to log using normal logger.
-     * @param shortMsg Message to log using quiet logger.
-     * @param e Optional exception.
-     */
-    public static void error(@Nullable IgniteLogger log, Object longMsg, 
Object shortMsg, @Nullable Throwable e) {
-        assert longMsg != null;
-        assert shortMsg != null;
-
-        if (log != null) {
-            if (e == null)
-                log.error(compact(longMsg.toString()));
-            else
-                log.error(compact(longMsg.toString()), e);
-        }
-        else {
-            X.printerr("[" + SHORT_DATE_FMT.format(Instant.now()) + "] (err) " 
+
-                compact(shortMsg.toString()));
-
-            if (e != null)
-                e.printStackTrace(System.err);
-            else
-                X.printerrln();
-        }
-    }
-
-    /**
-     * Shortcut for {@link #error(org.apache.ignite.IgniteLogger, Object, 
Object, Throwable)}.
-     *
-     * @param log Optional logger.
-     * @param shortMsg Message to log using quiet logger.
-     * @param e Optional exception.
-     */
-    public static void error(@Nullable IgniteLogger log, Object shortMsg, 
@Nullable Throwable e) {
-        assert shortMsg != null;
-
-        String s = shortMsg.toString();
-
-        error(log, s, s, e);
-    }
-
-    /**
-     *
-     * @param err Whether to print to {@code System.err}.
-     * @param objs Objects to log in quiet mode.
-     */
-    public static void quiet(boolean err, Object... objs) {
-        assert objs != null;
-
-        String time = SHORT_DATE_FMT.format(Instant.now());
-
-        SB sb = new SB();
-
-        for (Object obj : objs)
-            sb.a('[').a(time).a("] ").a(obj.toString()).a(NL);
-
-        PrintStream ps = err ? System.err : System.out;
-
-        ps.print(compact(sb.toString()));
-    }
-
-    /**
-     *
-     * @param err Whether to print to {@code System.err}.
-     * @param multiline Multiple lines string to print.
-     */
-    public static void quietMultipleLines(boolean err, String multiline) {
-        assert multiline != null;
-
-        quiet(err, multiline.split(NL));
-    }
-
-    /**
-     * Prints out the message in quiet and info modes.
-     *
-     * @param log Logger.
-     * @param msg Message to print.
-     */
-    public static void quietAndInfo(IgniteLogger log, String msg) {
-        if (log.isQuiet())
-            quiet(false, msg);
-
-        if (log.isInfoEnabled())
-            log.info(msg);
-    }
-
     /**
      * Quietly rollbacks JDBC connection ignoring possible checked exception.
      *
@@ -5305,20 +4911,6 @@ public abstract class IgniteUtils extends CommonUtils {
         return cls.getName().startsWith("org.apache.ignite.internal");
     }
 
-    /**
-     * Replaces all occurrences of {@code org.apache.ignite.} with {@code 
o.a.i.},
-     * {@code org.apache.ignite.internal.} with {@code o.a.i.i.},
-     * {@code org.apache.ignite.internal.visor.} with {@code o.a.i.i.v.} and
-     *
-     * @param s String to replace in.
-     * @return Replaces string.
-     */
-    public static String compact(String s) {
-        return s.replace("org.apache.ignite.internal.visor.", "o.a.i.i.v.").
-            replace("org.apache.ignite.internal.", "o.a.i.i.").
-            replace(IGNITE_PKG, "o.a.i.");
-    }
-
     /**
      * Check if given class is of JDK type.
      *
@@ -5334,21 +4926,6 @@ public abstract class IgniteUtils extends CommonUtils {
         return s.startsWith("java.") || s.startsWith("javax.");
     }
 
-    /**
-     * Check if given class represents a Enum.
-     *
-     * @param cls Class to check.
-     * @return {@code True} if this is a Enum class.
-     */
-    public static boolean isEnum(Class cls) {
-        if (cls.isEnum())
-            return true;
-
-        Class sCls = cls.getSuperclass();
-
-        return sCls != null && sCls.isEnum();
-    }
-
     /**
      * Converts {@link InterruptedException} to {@link IgniteCheckedException}.
      *
@@ -6821,7 +6398,7 @@ public abstract class IgniteUtils extends CommonUtils {
     public static Class<?> forName(
         String clsName,
         @Nullable ClassLoader ldr,
-        IgnitePredicate<String> clsFilter
+        @Nullable IgnitePredicate<String> clsFilter
     ) throws ClassNotFoundException {
         return forName(clsName, ldr, clsFilter, Marshallers.USE_CACHE.get());
     }
@@ -7508,18 +7085,6 @@ public abstract class IgniteUtils extends CommonUtils {
         return res;
     }
 
-    /**
-     * Creates new {@link HashMap} with expected size.
-     *
-     * @param expSize Expected size of created map.
-     * @param <K> Type of map keys.
-     * @param <V> Type of map values.
-     * @return New map.
-     */
-    public static <K, V> HashMap<K, V> newHashMap(int expSize) {
-        return new HashMap<>(capacity(expSize));
-    }
-
     /**
      * Creates new {@link LinkedHashMap} with expected size.
      *
@@ -9337,37 +8902,6 @@ public abstract class IgniteUtils extends CommonUtils {
         return IGNITE_SUCCESS_FILE_PROPERTY != null;
     }
 
-    /**
-     * Returns {@code true} if class is a lambda.
-     *
-     * @param objectClass Class.
-     * @return {@code true} if class is a lambda, {@code false} otherwise.
-     */
-    public static boolean isLambda(Class<?> objectClass) {
-        return !objectClass.isPrimitive() && !objectClass.isArray()
-            // Order is crucial here, isAnonymousClass and isLocalClass may 
fail if
-            // class' outer class was loaded with different classloader.
-            && objectClass.isSynthetic()
-            && !objectClass.isAnonymousClass() && !objectClass.isLocalClass()
-            && classCannotBeLoadedByName(objectClass);
-    }
-
-    /**
-     * Returns {@code true} if class can not be loaded by name.
-     *
-     * @param objectClass Class.
-     * @return {@code true} if class can not be loaded by name, {@code false} 
otherwise.
-     */
-    public static boolean classCannotBeLoadedByName(Class<?> objectClass) {
-        try {
-            Class.forName(objectClass.getName());
-            return false;
-        }
-        catch (ClassNotFoundException e) {
-            return true;
-        }
-    }
-
     /**
      * Appends spaces to end of input string for extending to needed length.
      *
diff --git 
a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java 
b/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java
index c77d2880896..fb23c8bcbbd 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/marshaller/MarshallerUtils.java
@@ -66,17 +66,6 @@ public class MarshallerUtils {
     /** */
     private static final Object MUX = new Object();
 
-    /**
-     * Set node name to marshaller context if possible.
-     *
-     * @param marsh Marshaller instance.
-     * @param nodeName Node name.
-     */
-    public static void setNodeName(Marshaller marsh, @Nullable String 
nodeName) {
-        if (marsh instanceof AbstractNodeNameAwareMarshaller)
-            ((AbstractNodeNameAwareMarshaller)marsh).nodeName(nodeName);
-    }
-
     /**
      * Private constructor.
      */
diff --git 
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
 
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
index a2d55b094f5..c4ba9264ebc 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/spi/discovery/tcp/TcpDiscoverySpi.java
@@ -74,7 +74,6 @@ import org.apache.ignite.lang.IgnitePredicate;
 import org.apache.ignite.lang.IgniteProductVersion;
 import org.apache.ignite.lang.IgniteUuid;
 import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.marshaller.MarshallerUtils;
 import org.apache.ignite.resources.IgniteInstanceResource;
 import org.apache.ignite.resources.LoggerResource;
 import org.apache.ignite.spi.IgniteSpiAdapter;
@@ -2531,7 +2530,7 @@ public class TcpDiscoverySpi extends IgniteSpiAdapter 
implements IgniteDiscovery
      * @return Marshaller.
      */
     protected Marshaller marshaller() {
-        MarshallerUtils.setNodeName(marsh, igniteInstanceName);
+        marsh.nodeName(igniteInstanceName);
 
         return marsh;
     }
diff --git 
a/modules/core/src/main/java/org/apache/ignite/stream/socket/SocketStreamer.java
 
b/modules/core/src/main/java/org/apache/ignite/stream/socket/SocketStreamer.java
index 9ea50a0819d..e4587555f3f 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/stream/socket/SocketStreamer.java
+++ 
b/modules/core/src/main/java/org/apache/ignite/stream/socket/SocketStreamer.java
@@ -38,7 +38,6 @@ import org.apache.ignite.internal.util.typedef.F;
 import org.apache.ignite.internal.util.typedef.internal.A;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.marshaller.Marshaller;
-import org.apache.ignite.marshaller.MarshallerUtils;
 import org.apache.ignite.marshaller.Marshallers;
 import org.apache.ignite.stream.StreamAdapter;
 import org.apache.ignite.stream.StreamTupleExtractor;
@@ -231,7 +230,7 @@ public class SocketStreamer<T, K, V> extends 
StreamAdapter<T, K, V> {
         private DefaultConverter(@Nullable String igniteInstanceName) {
             marsh = 
Marshallers.jdk(((IgniteKernal)ignite).context().marshallerContext().classNameFilter());
 
-            MarshallerUtils.setNodeName(marsh, igniteInstanceName);
+            marsh.nodeName(igniteInstanceName);
         }
 
         /** {@inheritDoc} */
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManagerAttributesSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManagerAttributesSelfTest.java
index 2f4212f9a9f..a89a8dfb11f 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManagerAttributesSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/managers/discovery/GridDiscoveryManagerAttributesSelfTest.java
@@ -22,7 +22,7 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.configuration.DeploymentMode;
 import org.apache.ignite.configuration.IgniteConfiguration;
 import org.apache.ignite.internal.IgniteEx;
-import org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
+import org.apache.ignite.marshaller.Marshallers;
 import org.apache.ignite.spi.discovery.TestReconnectSecurityPluginProvider;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
@@ -134,7 +134,7 @@ public class GridDiscoveryManagerAttributesSelfTest extends 
GridCommonAbstractTe
         }
         finally {
             System.setProperty(IGNITE_OPTIMIZED_MARSHALLER_USE_DEFAULT_SUID,
-                String.valueOf(OptimizedMarshaller.USE_DFLT_SUID));
+                String.valueOf(Marshallers.USE_DFLT_SUID));
         }
     }
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java
index 3cba5d59be1..dc15eedb27c 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerEnumSelfTest.java
@@ -18,6 +18,7 @@
 package org.apache.ignite.internal.marshaller.optimized;
 
 import org.apache.ignite.marshaller.Marshaller;
+import org.apache.ignite.marshaller.Marshallers;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
 
@@ -31,7 +32,7 @@ public class OptimizedMarshallerEnumSelfTest extends 
GridCommonAbstractTest {
      */
     @Test
     public void testEnumSerialisation() throws Exception {
-        Marshaller marsh = initTestMarshallerContext(new 
OptimizedMarshaller());
+        Marshaller marsh = initTestMarshallerContext(Marshallers.optimized());
 
         byte[] bytes = marsh.marshal(TestEnum.Bond);
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerPooledSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerPooledSelfTest.java
index 4199dc9686f..15223c9eb6a 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerPooledSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerPooledSelfTest.java
@@ -19,6 +19,7 @@ package org.apache.ignite.internal.marshaller.optimized;
 
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.marshaller.Marshaller;
+import org.apache.ignite.marshaller.Marshallers;
 import org.apache.ignite.testframework.junits.common.GridCommonTest;
 
 /**
@@ -28,7 +29,7 @@ import 
org.apache.ignite.testframework.junits.common.GridCommonTest;
 public class OptimizedMarshallerPooledSelfTest extends 
OptimizedMarshallerSelfTest {
     /** {@inheritDoc} */
     @Override protected Marshaller marshaller() throws IgniteCheckedException {
-        OptimizedMarshaller m = initTestMarshallerContext(new 
OptimizedMarshaller(false));
+        OptimizedMarshaller m = 
initTestMarshallerContext(Marshallers.optimized(false));
 
         m.setPoolSize(8);
 
@@ -38,6 +39,6 @@ public class OptimizedMarshallerPooledSelfTest extends 
OptimizedMarshallerSelfTe
     /** {@inheritDoc} */
     @Override protected void afterTestsStopped() throws Exception {
         // Reset static registry.
-        new OptimizedMarshaller().setPoolSize(0);
+        Marshallers.optimized().setPoolSize(0);
     }
 }
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSelfTest.java
index 4cc60836797..0e95b8c5bda 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSelfTest.java
@@ -26,6 +26,7 @@ import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.lang.IgniteRunnable;
 import org.apache.ignite.marshaller.GridMarshallerAbstractTest;
 import org.apache.ignite.marshaller.Marshaller;
+import org.apache.ignite.marshaller.Marshallers;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonTest;
 import org.junit.Test;
@@ -37,7 +38,7 @@ import org.junit.Test;
 public class OptimizedMarshallerSelfTest extends GridMarshallerAbstractTest {
     /** {@inheritDoc} */
     @Override protected Marshaller marshaller() throws IgniteCheckedException {
-        return initTestMarshallerContext(new OptimizedMarshaller(false));
+        return initTestMarshallerContext(Marshallers.optimized(false));
     }
 
     /**
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSerialPersistentFieldsSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSerialPersistentFieldsSelfTest.java
index 435ffdb59f0..3522c95aa1c 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSerialPersistentFieldsSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerSerialPersistentFieldsSelfTest.java
@@ -24,6 +24,7 @@ import java.io.Serializable;
 import org.apache.ignite.IgniteCheckedException;
 import org.apache.ignite.marshaller.GridMarshallerAbstractTest;
 import org.apache.ignite.marshaller.Marshaller;
+import org.apache.ignite.marshaller.Marshallers;
 import org.junit.Test;
 
 /**
@@ -32,7 +33,7 @@ import org.junit.Test;
 public class OptimizedMarshallerSerialPersistentFieldsSelfTest extends 
GridMarshallerAbstractTest {
     /** {@inheritDoc} */
     @Override protected Marshaller marshaller() throws IgniteCheckedException {
-        return initTestMarshallerContext(new OptimizedMarshaller(false));
+        return initTestMarshallerContext(Marshallers.optimized(false));
     }
 
     /**
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerTest.java
index 6b0fc73977e..e4aa8de4bdc 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedMarshallerTest.java
@@ -35,6 +35,7 @@ import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.marshaller.GridMarshallerTestInheritedBean;
 import org.apache.ignite.marshaller.Marshaller;
 import org.apache.ignite.marshaller.MarshallerContextTestImpl;
+import org.apache.ignite.marshaller.Marshallers;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinder;
 import 
org.apache.ignite.spi.discovery.tcp.ipfinder.TcpDiscoveryIpFinderAdapter;
 import org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder;
@@ -53,7 +54,7 @@ public class OptimizedMarshallerTest extends 
GridCommonAbstractTest {
     private OptimizedMarshaller marshaller() {
         U.clearClassCache();
 
-        OptimizedMarshaller marsh = new OptimizedMarshaller();
+        OptimizedMarshaller marsh = Marshallers.optimized();
 
         marsh.setContext(new MarshallerContextTestImpl());
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamSelfTest.java
 
b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamSelfTest.java
index b974f49f89b..67695c9ee51 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamSelfTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/internal/marshaller/optimized/OptimizedObjectStreamSelfTest.java
@@ -66,6 +66,7 @@ import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.marshaller.MarshallerContext;
 import org.apache.ignite.marshaller.MarshallerContextTestImpl;
 import org.apache.ignite.marshaller.MarshallerExclusions;
+import org.apache.ignite.marshaller.Marshallers;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.jetbrains.annotations.Nullable;
@@ -275,7 +276,7 @@ public class OptimizedObjectStreamSelfTest extends 
GridCommonAbstractTest {
     @Test
     public void testRequireSerializable() throws Exception {
         try {
-            OptimizedMarshaller marsh = new OptimizedMarshaller(true);
+            OptimizedMarshaller marsh = Marshallers.optimized(true);
 
             marsh.setContext(CTX);
 
@@ -298,7 +299,7 @@ public class OptimizedObjectStreamSelfTest extends 
GridCommonAbstractTest {
      */
     @Test
     public void testFailedUnmarshallingLogging() throws Exception {
-        OptimizedMarshaller marsh = new OptimizedMarshaller(true);
+        OptimizedMarshaller marsh = Marshallers.optimized(true);
 
         marsh.setContext(CTX);
 
@@ -320,7 +321,7 @@ public class OptimizedObjectStreamSelfTest extends 
GridCommonAbstractTest {
      */
     @Test
     public void testFailedMarshallingLogging() throws Exception {
-        OptimizedMarshaller marsh = new OptimizedMarshaller(true);
+        OptimizedMarshaller marsh = Marshallers.optimized(true);
 
         marsh.setContext(CTX);
 
@@ -350,7 +351,7 @@ public class OptimizedObjectStreamSelfTest extends 
GridCommonAbstractTest {
         Arrays.fill(obj.longArr, 100L);
         Arrays.fill(obj.doubleArr, 100.0d);
 
-        final OptimizedMarshaller marsh = new OptimizedMarshaller();
+        final OptimizedMarshaller marsh = Marshallers.optimized();
 
         marsh.setContext(CTX);
 
diff --git 
a/modules/core/src/test/java/org/apache/ignite/spi/discovery/ClusterMetricsSnapshotSerializeCompatibilityTest.java
 
b/modules/core/src/test/java/org/apache/ignite/spi/discovery/ClusterMetricsSnapshotSerializeCompatibilityTest.java
index 1e45af48272..d906a657ad7 100644
--- 
a/modules/core/src/test/java/org/apache/ignite/spi/discovery/ClusterMetricsSnapshotSerializeCompatibilityTest.java
+++ 
b/modules/core/src/test/java/org/apache/ignite/spi/discovery/ClusterMetricsSnapshotSerializeCompatibilityTest.java
@@ -23,6 +23,7 @@ import 
org.apache.ignite.internal.marshaller.optimized.OptimizedMarshaller;
 import org.apache.ignite.internal.processors.cache.CacheMetricsSnapshot;
 import org.apache.ignite.internal.util.typedef.internal.U;
 import org.apache.ignite.marshaller.MarshallerContextTestImpl;
+import org.apache.ignite.marshaller.Marshallers;
 import org.apache.ignite.testframework.GridTestUtils;
 import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
 import org.junit.Test;
@@ -81,7 +82,7 @@ public class ClusterMetricsSnapshotSerializeCompatibilityTest 
extends GridCommon
     private OptimizedMarshaller marshaller() {
         U.clearClassCache();
 
-        OptimizedMarshaller marsh = new OptimizedMarshaller();
+        OptimizedMarshaller marsh = Marshallers.optimized();
 
         marsh.setContext(new MarshallerContextTestImpl());
 
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java
 
b/modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java
similarity index 98%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java
rename to 
modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java
index 08666e0fa63..9d760df8d76 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java
+++ 
b/modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataInput.java
@@ -21,13 +21,13 @@ import java.io.EOFException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.UTFDataFormatException;
+import org.apache.ignite.IgniteCommonsSystemProperties;
+import org.apache.ignite.internal.util.CommonUtils;
 import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.tostring.GridToStringExclude;
 import org.apache.ignite.internal.util.typedef.internal.S;
 import org.apache.ignite.internal.util.typedef.internal.SB;
-import org.apache.ignite.internal.util.typedef.internal.U;
 
-import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_MARSHAL_BUFFERS_RECHECK;
 import static 
org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_RECHECK;
 import static org.apache.ignite.internal.util.GridUnsafe.BIG_ENDIAN;
 import static org.apache.ignite.internal.util.GridUnsafe.BYTE_ARR_OFF;
@@ -43,7 +43,8 @@ import static 
org.apache.ignite.internal.util.GridUnsafe.SHORT_ARR_OFF;
  */
 public class GridUnsafeDataInput extends InputStream implements GridDataInput {
     /** */
-    private static final Long CHECK_FREQ = 
Long.getLong(IGNITE_MARSHAL_BUFFERS_RECHECK, DFLT_MARSHAL_BUFFERS_RECHECK);
+    private static final Long CHECK_FREQ =
+        
Long.getLong(IgniteCommonsSystemProperties.IGNITE_MARSHAL_BUFFERS_RECHECK, 
DFLT_MARSHAL_BUFFERS_RECHECK);
 
     /** Maximum data block length. */
     private static final int MAX_BLOCK_SIZE = 1024;
@@ -125,7 +126,7 @@ public class GridUnsafeDataInput extends InputStream 
implements GridDataInput {
 
         maxOff = Math.max(maxOff, size);
 
-        long now = U.currentTimeMillis();
+        long now = CommonUtils.currentTimeMillis();
 
         // Increase size of buffer if needed.
         if (size > inBuf.length)
diff --git 
a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java
 
b/modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java
similarity index 97%
rename from 
modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java
rename to 
modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java
index f2331d84a09..2277c258204 100644
--- 
a/modules/core/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java
+++ 
b/modules/unsafe/src/main/java/org/apache/ignite/internal/util/io/GridUnsafeDataOutput.java
@@ -20,11 +20,11 @@ package org.apache.ignite.internal.util.io;
 import java.io.IOException;
 import java.io.OutputStream;
 import java.util.Arrays;
+import org.apache.ignite.IgniteCommonsSystemProperties;
+import org.apache.ignite.internal.util.CommonUtils;
 import org.apache.ignite.internal.util.GridUnsafe;
 import org.apache.ignite.internal.util.typedef.internal.S;
-import org.apache.ignite.internal.util.typedef.internal.U;
 
-import static 
org.apache.ignite.IgniteSystemProperties.IGNITE_MARSHAL_BUFFERS_RECHECK;
 import static 
org.apache.ignite.internal.util.CommonUtils.DFLT_MARSHAL_BUFFERS_RECHECK;
 import static org.apache.ignite.internal.util.CommonUtils.MAX_ARRAY_SIZE;
 import static org.apache.ignite.internal.util.GridUnsafe.BIG_ENDIAN;
@@ -41,7 +41,8 @@ import static 
org.apache.ignite.internal.util.GridUnsafe.SHORT_ARR_OFF;
  */
 public class GridUnsafeDataOutput extends OutputStream implements 
GridDataOutput {
     /** */
-    private static final long CHECK_FREQ = 
Long.getLong(IGNITE_MARSHAL_BUFFERS_RECHECK, DFLT_MARSHAL_BUFFERS_RECHECK);
+    private static final long CHECK_FREQ =
+        
Long.getLong(IgniteCommonsSystemProperties.IGNITE_MARSHAL_BUFFERS_RECHECK, 
DFLT_MARSHAL_BUFFERS_RECHECK);
 
     /** Length of char buffer (for writing strings). */
     private static final int CHAR_BUF_SIZE = 256;
@@ -62,7 +63,7 @@ public class GridUnsafeDataOutput extends OutputStream 
implements GridDataOutput
     private int maxOff;
 
     /** Last length check timestamp. */
-    private long lastCheck = U.currentTimeMillis();
+    private long lastCheck = CommonUtils.currentTimeMillis();
 
     /**
      *
@@ -132,7 +133,7 @@ public class GridUnsafeDataOutput extends OutputStream 
implements GridDataOutput
 
         maxOff = Math.max(maxOff, size);
 
-        long now = U.currentTimeMillis();
+        long now = CommonUtils.currentTimeMillis();
 
         if (size > bytes.length) {
             int newSize = size << 1;
@@ -156,7 +157,7 @@ public class GridUnsafeDataOutput extends OutputStream 
implements GridDataOutput
     /**
      * @param size Size of potential byte array to check.
      * @return true if {@code new byte[size]} won't throw {@link 
OutOfMemoryError} given enough heap space.
-     * @see U#MAX_ARRAY_SIZE
+     * @see CommonUtils#MAX_ARRAY_SIZE
      */
     private boolean canBeAllocated(long size) {
         return 0 <= size && size <= MAX_ARRAY_SIZE;

Reply via email to