zoukankan      html  css  js  c++  java
  • java程序可以实现在指定CPU上运行吗?

    java程序可以指定CPU运行吗?这是我以前遇到的一个面试问题,这两天又想起来了。一般我们都知道C、C++是可以实现程序指定CPU运行的,那么java到底可不可以呢?网上一部分人说可以,一部分人说不可以,我先说一下我搜集的资料显示是可以的,不过实现起来需要特殊的开发环境,主要就是需要安装jrockit-jdk

    一、jrockit-jdk安装

    1. jrockit-jdk简介:
      Oracle JRockit JVM 是业界性能最高的 Java 虚拟机,现内置于 Oracle 融合中间件中。它通过 JRockit Real Time 提供业内领先的实时基础架构功能,通过 JRockit Mission Control 提供无与伦比的 JVM 诊断。

    2. 下载与安装:
      官网下载地址:https://www.oracle.com/java/technologies/javase-java-archive-jrockit-downloads.html
      在这里插入图片描述
      点击适合自己电脑的版本进行下载即可,下载完成后双击程序,按照程序提醒一步一步安装即可,跟普通jdk差别不大,安装完成以后:
      在这里插入图片描述
      jrockit-jdk安装完成以后,可以像普通的jdk那样进行环境变量配置:
      在这里插入图片描述
      到这里jrockit-jdk安装就算完成了。

    二、编码测试

    1. 创建一个普通maven工程,需要选择刚刚安装好的jrockit-jdk:

    在这里插入图片描述
    项目结构:
    在这里插入图片描述
    3. 编码:

    public class AppointCpuTest {
    
        public static void main(String[] args) {
            // 获取jvm对象
            JVM jvm = JVMFactory.getJVM();
            // 获取cpu集合的叠代对象
            Iterator<CPU> cpuIterator = jvm.getProcessAffinity().iterator();
            // 用于保存系统中所有cpu的集合
            List<CPU> systemCpuList = new ArrayList<CPU>();
            while (cpuIterator.hasNext()) {
                CPU cpu = cpuIterator.next();
                systemCpuList.add(cpu);
            }
            // 系统中cpu的个数
            int cpuCount = systemCpuList.size();
            // 需要绑定到jvm的cpu集合
            List<CPU> bindCpuList = new ArrayList<CPU>();
            // 绑定最后一个cpu运行此程序
            int appointCpuIndex = cpuCount - 1;
            bindCpuList.add(systemCpuList.get(appointCpuIndex));
            // 将指定的cpu集合绑定到jvm中
            jvm.suggestProcessAffinity(bindCpuList);
    
            System.out.println("系统中CPU个数:" + cpuCount);
            System.out.println("当前程序指定CPU运行序号:" + appointCpuIndex);
    
            //保持程序不退出
            while (true) {
    
            }
        }
    }
    
    1. 运行结果:
    系统中CPU个数:6
    当前程序指定CPU运行序号:5
    

    在这里插入图片描述
    将指定CPU序号换成3,再次运行:

    int appointCpuIndex = 3;
    bindCpuList.add(systemCpuList.get(appointCpuIndex));
    

    运行结果:

    系统中CPU个数:6
    当前程序指定CPU运行序号:3
    

    在这里插入图片描述

    从以上两次运行结果都可以看出来,代码成功实现了让程序在指定的CPU上运行。

    一颗安安静静的小韭菜。文中如果有什么错误,欢迎指出。
  • 相关阅读:
    ES6 新特性
    基于.NET平台常用的框架整理
    你可能不知道的一些JavaScript 奇技淫巧
    js中apply方法的使用
    数据库中字段类型对应C#中的数据类型
    C# Socket SSL通讯笔记
    Media Types
    JS使用模板快速填充HTML控件数据 --- 自己写组件(0)
    FastDFS的配置、部署与API使用解读(8)FastDFS多种文件上传接口详解
    FastDFS的配置、部署与API使用解读(7)Nginx的FastDFS模块
  • 原文地址:https://www.cnblogs.com/c-Ajing/p/13448329.html
Copyright © 2011-2022 走看看