Java 11 support (#3399)

* Support Java 11

* config travis to use oracle jdk 11

* Add check jdk version
diff --git a/heron/executor/src/python/heron_executor.py b/heron/executor/src/python/heron_executor.py
index 01f59a9..aac24c2 100755
--- a/heron/executor/src/python/heron_executor.py
+++ b/heron/executor/src/python/heron_executor.py
@@ -432,21 +432,7 @@
                       # for instance, the default -Xmx in Twitter mesos machine is around 18GB
                       '-Xmx1024M',
                       '-XX:+PrintCommandLineFlags',
-                      '-verbosegc',
-                      '-XX:+PrintGCDetails',
-                      '-XX:+PrintGCTimeStamps',
-                      '-XX:+PrintGCDateStamps',
-                      '-XX:+PrintGCCause',
-                      '-XX:+UseGCLogFileRotation',
-                      '-XX:NumberOfGCLogFiles=5',
-                      '-XX:GCLogFileSize=100M',
-                      '-XX:+PrintPromotionFailure',
-                      '-XX:+PrintTenuringDistribution',
-                      '-XX:+PrintHeapAtGC',
-                      '-XX:+HeapDumpOnOutOfMemoryError',
-                      '-XX:+UseConcMarkSweepGC',
-                      '-XX:+PrintCommandLineFlags',
-                      '-Xloggc:log-files/gc.' + metricsManagerId + '.log',
+                      self._get_java_gc_instance_cmd(metricsManagerId),
                       '-Djava.net.preferIPv4Stack=true',
                       '-cp',
                       self.metrics_manager_classpath,
@@ -473,21 +459,7 @@
                            # for instance, the default -Xmx in Twitter mesos machine is around 18GB
                            '-Xmx1024M',
                            '-XX:+PrintCommandLineFlags',
-                           '-verbosegc',
-                           '-XX:+PrintGCDetails',
-                           '-XX:+PrintGCTimeStamps',
-                           '-XX:+PrintGCDateStamps',
-                           '-XX:+PrintGCCause',
-                           '-XX:+UseGCLogFileRotation',
-                           '-XX:NumberOfGCLogFiles=5',
-                           '-XX:GCLogFileSize=100M',
-                           '-XX:+PrintPromotionFailure',
-                           '-XX:+PrintTenuringDistribution',
-                           '-XX:+PrintHeapAtGC',
-                           '-XX:+HeapDumpOnOutOfMemoryError',
-                           '-XX:+UseConcMarkSweepGC',
-                           '-XX:+PrintCommandLineFlags',
-                           '-Xloggc:log-files/gc.metricscache.log',
+                           self._get_java_gc_instance_cmd('metricscache'),
                            '-Djava.net.preferIPv4Stack=true',
                            '-cp',
                            self.metricscache_manager_classpath,
@@ -515,21 +487,7 @@
                      # for instance, the default -Xmx in Twitter mesos machine is around 18GB
                      '-Xmx1024M',
                      '-XX:+PrintCommandLineFlags',
-                     '-verbosegc',
-                     '-XX:+PrintGCDetails',
-                     '-XX:+PrintGCTimeStamps',
-                     '-XX:+PrintGCDateStamps',
-                     '-XX:+PrintGCCause',
-                     '-XX:+UseGCLogFileRotation',
-                     '-XX:NumberOfGCLogFiles=5',
-                     '-XX:GCLogFileSize=100M',
-                     '-XX:+PrintPromotionFailure',
-                     '-XX:+PrintTenuringDistribution',
-                     '-XX:+PrintHeapAtGC',
-                     '-XX:+HeapDumpOnOutOfMemoryError',
-                     '-XX:+UseConcMarkSweepGC',
-                     '-XX:+PrintCommandLineFlags',
-                     '-Xloggc:log-files/gc.healthmgr.log',
+                     self._get_java_gc_instance_cmd('healthmgr'),
                      '-Djava.net.preferIPv4Stack=true',
                      '-cp', self.health_manager_classpath,
                      healthmgr_main_class,
@@ -619,6 +577,41 @@
   def _get_jvm_instance_cmd(self):
     return Command(os.path.join(self.heron_java_home, 'bin/java'), self.shell_env)
 
+  def _get_java_major_version(self):
+    return int(self._get_jvm_version().split(".")[0])
+
+  def _get_java_gc_instance_cmd(self, instance_id):
+    if self._get_java_major_version() >= 9:
+      return ' '.join([
+          '-verbosegc',
+          '-XX:MaxGCPauseMillis=100',
+          '-XX:InitiatingHeapOccupancyPercent=30',
+          '-XX:+HeapDumpOnOutOfMemoryError',
+          '-XX:+UseG1GC',
+          '-XX:+ParallelRefProcEnabled',
+          '-XX:+UseStringDeduplication',
+          '-Xlog:gc=info:file=log-files/gc.%s.log:time,uptime,pid:filecount=5,filesize=100M'
+          % instance_id])
+    else:
+      return ' '.join([
+          '-XX:+CMSScavengeBeforeRemark',
+          '-XX:TargetSurvivorRatio=90',
+          '-verbosegc',
+          '-XX:+PrintGCDetails',
+          '-XX:+PrintGCTimeStamps',
+          '-XX:+PrintGCDateStamps',
+          '-XX:+PrintGCCause',
+          '-XX:+UseGCLogFileRotation',
+          '-XX:NumberOfGCLogFiles=5',
+          '-XX:GCLogFileSize=100M',
+          '-XX:+PrintPromotionFailure',
+          '-XX:+PrintTenuringDistribution',
+          '-XX:+PrintHeapAtGC',
+          '-XX:+HeapDumpOnOutOfMemoryError',
+          '-XX:+UseConcMarkSweepGC',
+          '-XX:ParallelGCThreads=4',
+          '-Xloggc:log-files/gc.%s.log' % instance_id])
+
   def _get_jvm_instance_options(self, instance_id, component_name, remote_debugger_port):
     code_cache_size_mb = 64
     java_metasize_mb = 128
@@ -645,24 +638,8 @@
         '-XX:Max%s=%dM' % (java_metasize_param, java_metasize_mb),
         '-XX:%s=%dM' % (java_metasize_param, java_metasize_mb),
         '-XX:ReservedCodeCacheSize=%dM' % code_cache_size_mb,
-        '-XX:+CMSScavengeBeforeRemark',
-        '-XX:TargetSurvivorRatio=90',
         '-XX:+PrintCommandLineFlags',
-        '-verbosegc',
-        '-XX:+PrintGCDetails',
-        '-XX:+PrintGCTimeStamps',
-        '-XX:+PrintGCDateStamps',
-        '-XX:+PrintGCCause',
-        '-XX:+UseGCLogFileRotation',
-        '-XX:NumberOfGCLogFiles=5',
-        '-XX:GCLogFileSize=100M',
-        '-XX:+PrintPromotionFailure',
-        '-XX:+PrintTenuringDistribution',
-        '-XX:+PrintHeapAtGC',
-        '-XX:+HeapDumpOnOutOfMemoryError',
-        '-XX:+UseConcMarkSweepGC',
-        '-XX:ParallelGCThreads=4',
-        '-Xloggc:log-files/gc.%s.log' % instance_id,
+        self._get_java_gc_instance_cmd(instance_id),
         '-Djava.net.preferIPv4Stack=true',
         '-cp',
         '%s:%s'% (self.instance_classpath, self.classpath)]
@@ -850,21 +827,7 @@
                    '-Xms%dM' % ckptmgr_ram_mb,
                    '-Xmx%dM' % ckptmgr_ram_mb,
                    '-XX:+PrintCommandLineFlags',
-                   '-verbosegc',
-                   '-XX:+PrintGCDetails',
-                   '-XX:+PrintGCTimeStamps',
-                   '-XX:+PrintGCDateStamps',
-                   '-XX:+PrintGCCause',
-                   '-XX:+UseGCLogFileRotation',
-                   '-XX:NumberOfGCLogFiles=5',
-                   '-XX:GCLogFileSize=100M',
-                   '-XX:+PrintPromotionFailure',
-                   '-XX:+PrintTenuringDistribution',
-                   '-XX:+PrintHeapAtGC',
-                   '-XX:+HeapDumpOnOutOfMemoryError',
-                   '-XX:+UseConcMarkSweepGC',
-                   '-XX:+UseConcMarkSweepGC',
-                   '-Xloggc:log-files/gc.' + ckptmgr_id + '.log',
+                   self._get_java_gc_instance_cmd(ckptmgr_id),
                    '-Djava.net.preferIPv4Stack=true',
                    '-cp',
                    self.checkpoint_manager_classpath,