jdk1.8u131 与jdk1.8u222 cpu获取方式的差异有哪些

这篇文章将为大家详细讲解有关jdk1.8u131 与jdk1.8u222 cpu获取方式的差异有哪些,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

JDK1.8u222 的cpu获取方式

int OSContainer::active_processor_count() {

 int quota_count = 0, share_count = 0;

 int cpu_count, limit_count;

 int result;

 cpu_count = limit_count = os::Linux::active_processor_count();

 int quota  = cpu_quota();

 int period = cpu_period();

 int share  = cpu_shares();

 if (quota > -1 && period > 0) {

   quota_count = ceilf((float)quota / (float)period);

   if (PrintContainerInfo) {

     tty->print_cr("CPU Quota count based on quota/period: %d", quota_count);

   }

 }

 if (share > -1) {

   share_count = ceilf((float)share / (float)PER_CPU_SHARES);

   if (PrintContainerInfo) {

     tty->print_cr("CPU Share count based on shares: %d", share_count);

   }

 }

 // If both shares and quotas are setup results depend

 // on flag PreferContainerQuotaForCPUCount.

 // If true, limit CPU count to quota

 // If false, use minimum of shares and quotas

 if (quota_count !=0 && share_count != 0) {

   if (PreferContainerQuotaForCPUCount) {

     limit_count = quota_count;

   } else {

     limit_count = MIN2(quota_count, share_count);

   }

 } else if (quota_count != 0) {

   limit_count = quota_count;

 } else if (share_count != 0) {

   limit_count = share_count;

 }

 result = MIN2(cpu_count, limit_count);

 if (PrintContainerInfo) {

   tty->print_cr("OSContainer::active_processor_count: %d", result);

 }

 return result;

}

JDK1.8u131 的cpu获取方式

int os::active_processor_count() {

 // Linux doesn't yet have a (official) notion of processor sets,

 // so just return the number of online processors.

 int online_cpus = ::sysconf(_SC_NPROCESSORS_ONLN);

 assert(online_cpus > 0 && online_cpus <= processor_count(), "sanity check");

 return online_cpus;

}

容器场景需要注意jdk版本,造成的线程数不一致,机器负载太高等情况

关于“jdk1.8u131 与jdk1.8u222 cpu获取方式的差异有哪些”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。