为什么操作系统都是用c或者c++程序写的,而不用Java呢?

为什么操作系统都是用c或者c++程序写的,而不用Java呢?求高手指教,谢谢。

2

9个回答

java是高级语言 不和底层打交道,比如寄存器。这些都交给java虚拟机了 所以要写操作系统就必须得直接和底层打交到 java好学就是因为少了这部分 缺点也是因为这部分.

3

用C/C++的原因很简单:具有贴近底层硬件的能力。设想使用Java来写操作系统的话,你必须把jvm那一套做在硬件上。

1

只能说是大多数,不是所有的操作系统都用的是C。

原因简单说两点:
1.效率,C的效率比其他语言高,可以达到汇编的80%。相对于解释型的编程语言要快
2.底层,C语言更接近机器底层,使用C指针可以直接访问内存

1

效率问题和兼容型。。。Java 需要环境,C#这个更不用说了。。

1

因为语言设计之初定位就不同。java的特点是oop,执行效率相比较c/c++较低,java开发效率高,适合编写应用和网页。c/c++的特点是指针,能够直接跟内存打交道,适合性能要求较高的场合。某些场合c的性能还不能满足要求的话,可以用更低级的汇编语言。

1

因为java的底层虚拟机就是纯C写的,如果用JAVA写个操作系统,执行的过程就是java-C-汇编-机器指令这样了,就是效率问题,别说操作系统了,就是windows上跑的程序,都几乎没java写的,99%是C++写的,100%的图形处理程序是C++写的

1

Android 用的java 谢谢

0
primary_leraner
primary_feeling 安卓操作系统应该是基于linux的,而linux操作系统是什么语言写的,你应该知道吧。
11 个月之前 回复
hi_chen_xingwang
朕就是这么帅 回复androiosymbian: JX OS
接近 3 年之前 回复
hi_chen_xingwang
朕就是这么帅 回复androiosymbian: 那 Android用C写的
接近 3 年之前 回复
u014559880
androiosymbian 呵呵,不懂别瞎说好吗
接近 3 年之前 回复

老牌的程序,很多功能c已经写好了,用别的语言再写只是重复造轮子,最多在底层是c的基础上 封装自己的语言, 既然别人已经把功能写好了,为什么还要自己用语言重新写系统呢,还有这太绝对了,还有很多事不是c的

0

谢谢各位,很有收获。。。

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
为什么游戏引擎大多选择使用 C++ 而不是 C 开发?
作者:crazybie链接:https://www.zhihu.com/question/26591038/answer/89407866来源:知乎著作权归作者所有,转载请联系作者获得授权。在育碧干这么些年,我也来顺便说一下。先说说几个案例吧1 id soft是业界知名的游戏先驱,在前几代游戏开发上几乎全部都是纯C(doom系列等等),卡尔马克是3D图形界响当当的明星。最近几代也开始转C++。他的
操作系统内核为啥用C语言?(C语言特点)
世界上绝大部分的操作系统内核都是用C语言编写的,然而这是为什么喃?rn这个问题我们就必须结合C语言的特点了!rnrnrnC语言有三大特点:rnrnrn1 非常好的可移植性rn可移植性就是指与软件从某一环境转移到另一环境下的难易程度。也就是更换不同体系结构的软/硬件平台,修改的代码越少越好。因为不同机器的C语言源码(主要是函数库中的函数名和其参数)都是差不多的,所以C语言的可移植性好。rnrnrn2
为什么java需要配置环境,而c/c++不需要
如果我们要运行java程序,我们的电脑上就必须有java环境,即JRE(包含了JAVA虚拟机和一些库包);如果我们要开发java程序,就必须有JDK(包含了JRE和开发工具,所以下载了JDK,就不需要下载JRE了)。为什么我们需要java环境呢?还要配置环境变量呢?njava是一个跨平台性的语言。跨平台就是在一个计算机上编译的字节码文件可以复制到任何一个安装了java环境的计算机上直接使用。n我...
java中字符串的拼接使用StringBuffer而不使用String的理由
java中字符串的拼接使用StringBuffer而不使用String的理由
Linux内核工程导论——内核为何使用C语言
C与C++的对比无数人说过,都说C效率高,但很多人做过实验如果C++不适用RTTI,C++的效率也不会低太多(25%左右)。还有人说C++强大的STL,但是对效率讲究点的话那个真的不能用,具体我后面说。一般大部分人的心态是,学C++出身的,就经常吐槽linux的C代码乱的一塌糊涂,各种敏捷,面向对象原则,代码不如C++精简,连个STL或者boost都用不上,等软件工程相关问题都是被他们吐槽的重灾区
c语言为什么scanf要取地址printf不用呢?
我的猜测是n因为要引入指针的概念就必须引入地址的概念n而scanf这种赋值类的 就好像存东西也需要寄存柜的号码一样吧 也需要“地址”n不过scanf这种取地址应该也是可以交给机器判断的,比如数组名本身是指针型的,本身就是地址,就不用取地址了n而其他非指针类型的变量名就要取地址,为什么没有这样做呢。。如果scanf不取地址,而是用和地址一样大小的int型数据代替地址的话能顺利赋值吗?试一下先n源代码...
30天自制操作系统------用C语言编写应用程序
一、攻击(3)rnrn破坏操作系统可以从内存上下手,使得操作系统无法正常工作。定时器对于操作系统也是非常重要的,因为很多中断都是依赖于定时器的,没有定时器,光标就不会闪烁,任务也无法切换,整个操作系统就好像瘫痪了一般。rn所以我们可以通过修改定时器的中断频率来攻击操作系统,因为操作系统的中断频率=主频/中断周期,CPU的主频是不可修改的,所以我们可以通过修改中断周期来修改中断频率,将中断周期设的大
纯C语言设计的线程,让单片机不用操作系统的情况下,支持线程和事件
C语言项目中用到的一些技巧,写出来与大家分享。nn情形一nn碰到过这样的需求:nn1) 检测到某种事件时,让1号灯闪烁三次(亮100ms,灭200ms),再关掉灯;nn2) 2号灯是运行指示灯,需要亮一秒,灭一秒,一直重复下去;nn如何实现呢?nn如果有操作系统,开多个线程去做,代码写起来会非常完美。nn但如果不用操作系统,只有一个线程,该怎么办呢?nn nn情形二nn硬件资源必须互斥访问:nn多...
蓝桥杯——最小公倍数
为什么1小时有60分钟,而不是100分钟呢?这是历史上的习惯导致。但也并非纯粹的偶然:60是个优秀的数字,它的因子比较多。事实上,它是1至6的每个数字的倍数。即1,2,3,4,5,6都是可以除尽60。 我们希望寻找到能除尽1至n的的每个数字的最小整数。 不要小看这个数字,它可能十分大,比如n=100, 则该数为:69720375229712477164533808935312303556800 请...
同是高级语言人C语言可以编写51单片机程序,JAVA却不能?
从事嵌入式开发多年,C语言和Java两种编程语言都拿来做过项目,凡是没有那么绝对,不同的编程语言适用于不同的编程场景,对于单片机来讲运行个操作系统就已经是很奢侈的事情,再让运行java的虚拟机还让人玩不,一旦涉及到操作系统或者java的虚拟机基本上已经超乎单片机的范畴了,单片机再次扩展化就是嵌入式开发了,运行个操作系统或者java虚拟机也不是什么很难的事情。nnnn术业有专攻,对于单片机而言应用场...
为什么尽量不用using namespace std
c++库中的类和函数都是在命名空间std里面声明的,但为什么尽量不用using name std呢?rn因为不管你是否需不需要,这个命名空间std都会导出命名空间的所有名称,这与命名空间的初衷相矛盾。rn你可以这样写:rnusing std::cin;rnusing std::cout;rnusing std::endl;rn《注:由于iostream里面也有string函数,且string是在命
用scanf而不用cin的情况
scanf是格式化输入,printf是格式化输出。ncin是输入流,cout是输出流。效率稍低,但书写简便。n效率低的原因可以自行百度。n数据量大的题目最好一开始就用scanf,printf写,不要等超时了再回来改。n举例。nn从零开始的异世界生活nnTime Limit: 2000 ms Memory Limit: 65536 KiBnProblem Descriptionn486 作为有史以来...
奇葩链表使用方法之 不用结构体来达成链表
n如果不用结构体,用double类型变量,整数放内存区地址,小数点后用用户的值,是否也能构成链表咧?~发现完全是可行的#include "stdio.h"n#include "stdlib.h"nnmain()n{n double *now,*head,*next;n int i,temp;n head = now = (double*)malloc(sizeof(double));n next ...
一句话 分析 JAVA8 HashMap中用红黑树而不是AVL树的原因
前几天看算法新解有感 mark一下n红黑树牺牲了一些查找性能 但其本身并不是完全平衡的二叉树。因此插入删除操作效率略高于AVL树nAVL树用于自平衡的计算牺牲了插入删除性能,但是因为最多只有一层的高度差,查询效率会高一些。n参考文章:https://www.jianshu.com/p/37436ed14cc6nn...
为什么不用代码写代码
Unity提供了强大的编辑器拓展功能。做unity开发的时候往往很多时间不是在写代码,而是在scene场景和inspector面板调数据。nn于是我想现在为什么目前没有一款名气大的工具可以针对写代码拓展呢,用代码来编辑代码,用代码来管理代码。在自己编写代码的同时,也编写一些写代码的程序,边写边运行。 ...
为什么不用JDBC,而选择Hibernate和Mybatis持久层框架
JDBC简介nn为什么会出现Mybatis和Hibernate两个人持久层框架nn在学习java的时候,我们操作数据库的步骤:nn注册驱动;n 获取数据库连接;n 拼接sql语句,设置sql参数;n 执行sql语句;n 处理sql语句;n 处理sql返回结果;n 关闭执行语句和数据库连接;n实例:nnnnprivate static Connection getConn() {n Strin...
什么是SpringIOC?为什么要用IOC而不是New来创建实例
什么是SpringIOC?为什么要用IOC而不是New来创建实例?rnrnrnrn1.背景介绍rnrn什么是spring: rn 2002年,Rod Johnson在《Expert One-on-One J2EE Design and Development》书中首次推出了Spring框架雏形interface21框架。到现在将近20年了。最早Spring是为了解决企业级应用开发的复杂性而创建的。但是归根究底它...
【操作系统实验报告】文件读入与导出
(1)实验内容: 使用系统调用,用C或C++写一个程序,实现如下功能:从一个文件中读出数据,写入另一个文件中。 要求: 具有良好的交互性 使用者可输入源文件和目的文件的路径和文件名。 具有完善的错误处理机制 针对可能出现的各种错误,要有相应的错误提示输出,并作相应处理。 在Linux操作系统上调试并运行 (2)实验目的: 通过实验,加深对系统调用概念的理解,了解其实现机制以及使用方式。 通过在Linux操作系统上编写和调试简单程序,进一步熟悉Linux操作系统的使用,初步掌握linux环境下的C或C++编译和调试工具,为进一步理解和学习Linux操作系统的内核结构和核心机制作准备。
从玩游戏到写外挂,C语言/C++程序员大神是怎样做到的!
n n n 今天和大家分享一下我自己的C语言学习的过程,与大家共勉。嗯,由于我本人水平有限,出现错误在所难免,希望大家看到后能够指出来,以便大家共同进步。nnnnnnC语言是面向过程的,而C++是面向对象的这些是C/C++能做的服务器开发工程师、人工智能、云计算工程师、信息安全(黑客反黑客)、大数据 、数据平台、嵌入式工程师、流媒体服务器、数据控解、图像处理、音频视频...
数据库索引为什么不用hash表而用b+树
n n n 1.hash表只能匹配是否相等,不能实现范围查找nselect * from xx where id > 23; 这时就没办法索引了n2.当需要按照索引进行order by时,hash值没办法支持排序nselect * from xx order by score desc;如果score为建立索引的字段,hash值没办法辅助排序。n3.组合索引可以...
为什么JDK源码中,无限循环大多使用for(;;)而不是while(true)?
nn反编译工具之后是这样的:nn nnnn知乎的解答如下(https://www.zhihu.com/question/52311366)nn下面是在vs2013中编译的结果:nnwhile (true) 编译前nn nnnwhile (true); nnn编译后nn nnnmov eax,1 ntest eax,eax nje wmain+29h njmp ...
如何用C语言编写死循环
解法1 nwhile(1) { } n解法2 nfor(; ; ) { } n解法3 用goto nLoop: n …. n goto Loop;
不用keil,命令行编译51单片机的C语言程序
最近学习51单片机编程,C语言的,刚入手,好难啊,记录一点刚开始做出来的东西,以备后用。n我个人习惯,不喜欢安装文件,所以就各种找办法,最后还真让我找到了,参考这个文章http://www.cnblogs.com/gleam/archive/2012/02/14/2350990.html。n原作者说写了批处理命令,不过没有贴,好吧,求人不如求自己,自己写吧,肯定没有人家的好用,不过聊胜于无。代码如下
JAVA_SE基础——57.有了包之后类与类之间的访问使用import语句
代码1访问代码2n代码1:nclass Demo3 {n public static void main(String[] args) {n Demo4 a = new Demo4();n a.print();n }n}n代码2:nclass Demo4{n public void print(){n System.out.println("这个是Dmeo4的print方法...");
操作系统-生产者与消费者问题的C语言实现
1.模拟用信号量机制实现生产者和消费者问题。 2.设计报告内容应说明: ⑴ 课程设计目的与功能; ⑵ 需求分析,数据结构或模块说明(功能与框图); ⑶ 源程序的主要部分; ⑷ 运行结果与运行情况分析; ⑸ 自我评价与总结:
不用加减符号实现加减法
今天有群友发了一个问题,要求不用加减符号(包括负号)来实现加减法。rn 分析一下,先看最简单的情况,假设1+1,按二进制算的话结果是10,可以看到从右往左的第一位变为0,第二位由于进位变为1。rn 第1位的值有4种,0+0=0、1+0=1、0+1=1、1+1=0,这正好符合“异或”的情况。rn 第2位的值来自于第一位的进位加上本身的值,进位...
C语言实现贪心算法——装箱问题
一、代码nnnn n//装箱问题;n#include<stdio.h>n#include<malloc.h>n#define V 10 //一个箱子所能装的最大体积;nn//物品信息;ntypedef struct n{n int gnum; //物品编号;n int gv; //物品体积;n}Goods;nn//物品链;ntypedef struct Node...
C++为什么要用引用而不是指针
我相信有很多刚学完C,再学C++的人都会有个疑惑,引用是干嘛的,为什么不用指针?rnrnrn首先,引用 跟 指针 在作用上没有太多区别,作用都是 当遇到较大的 对象(变量)作为函数的 形参 传递时,用引用或指针可以节省内存的开销,因为他不像按值传递那样,rn额外要创建临时变量。rnrnrn既然这样,那为什么C++要用引用呢?rn引用是一段内存的别名,引用的大小跟所代表的变量的大小是一样的,而指针他
操作系统c语言模拟页面调度实验(存储管理实验)
c语言,运行成功,比较基础,模拟存储管理(页面调度),页面淘汰算法采用先进先出(FIFO)
我们为什么不用c++写网页?
要回答这个问题首先要明确题主对于写网页的定义。一个网页往往包含前端、后端两部分。前端负责页面的呈现,后端负责数据的处理,可以大概的理解成前端是人的衣服,而后端是人的五脏六腑。1前端前端的话主要是采用html+css+javascript这样的组合。html有点像word里面的操作,告诉浏览器,哪里是题目,哪里是正文。然后用css去定义这些标题,正文,链接的样式。而JavaScript则让这些内容能
为什么用Runnable而不用Thread
Runnable和Thread都可以实现run方法,但一个是接口,一个是类,前者可以无限地创建Thread进行run,而后者进行一次run之后就无法再次run。注意:Thread执行了start之后不可以再次执行start!rn因此,要实现线程能重复运行,如果采用XXX extends Thread,那么每次运行都必须new一个XXX,这十分损耗资源;如果使用XXX implements Runn
基于STM32从零写操作系统系列---使用C语言
如有不详细的描述、错误或疑问,欢迎留言!!!nn基于STM32从零写操作系统系列---前言与目录nn目的 nn C语言,相对于汇编有更好的可读性,便于维护等优点。下面实验将使用C语言实现点亮LED灯。C语言与硬件是紧密连在一起的,结合芯片中的flash和sram,简单了解C语言。nn要求nn1.有一定的C语言基础nn2.了解编译链接脚本nn3.了解stm32F103的硬件结构nn实验源代码在这下载...
for循环的条件判断中为什么用'!='而不用'<'
感学原作者分享,原文地址:http://blog.csdn.net/njnu_mjn/article/details/7648730nn翻阅《C++ Primer中文版(第4版)》,里面出现的for大多都是类似如下的循环:nnnnnn[cpp] viewn plain copynnn print?nnnnvectorint> ivec(10);  nfor (ve
为何推荐使用 class 而不用 id 来定义样式
为何推荐使用 class 而不用 id 来定义样式1、相对于class选择器,id选择器的权重实在太重了(100),这在一些项目中会造成灾难性的样式污染,以及权重陷阱。2、id在文档内必须是唯一的,而样式很多具有复用性。3、至于为什么大多数js使用id作为钩子,主要因为js通过id查询dom的速度是最快的。4、其实class的诞生就是为了样式服务。id 更倾向于方便为脚本服务。5、大公司的分工比较细
爬虫 第三篇 (语言选择python还是java还是其他)
爬虫目前主要开发语言为java、python、c++ n有些公司也用go语言(杭州某互联网金融公司)nn对于一般的信息采集需要,各种语言差别不大。nnnc、c++ n搜索引擎无一例外使用C\C++ 开发爬虫,猜想搜索引擎爬虫采集的网站数量巨大,对页面的解析要求不高,部分支持javascriptnpython n网络功能强大,模拟登陆、解析javascript,短处是网页解析 npython写起程序
嵌入式系统中的死循环C语言写法,while(1)和for(;;)区别
一般for(;;){}性能更优nfor(;;){}n这两个;;空语句,编译器一般会优掉的,直接进入死循环nwhile(1){}n每循环一次都要判断常量1是不是等于零,在这里while比for多做了这点事n不过从汇编的角度来说,都是一样的代码。nn...
java错题集
题1、以下申明合法的是:n   A、default string s;n   B、public final static native int w();n   C、abstract double d;n   D、bstract final double hyperbolicCosine();n选第二个Bndefault不能修饰属性;nabstract不能修饰属性;nabstract
为什么在检测颜色信息时往往用HSV空间而不用RGB空间呢?
为什么在检测颜色信息时往往用HSV空间而不用RGB空间呢?nn答:因为RGB通道并不能很好地反映出物体具体的颜色信息  比如红色在HSV空间中H维度的范围为0~10和160~180 你跟我说在RGB中它的范围是什么呢?nn-------------------------------------------图像处理开发资料、图像处理开发需求、图像处理接私活挣零花钱,可以搜索公众号&quot;qxsf321&quot;...
自上而下的编程方法
自上而下的编程方法是正规编程设计的基础。我们现在向大家介绍这些在图 3.1 说n明的步骤细节。步骤如下:nnnn1.清晰地陈述你所要解决的问题n编写的程序大多数情况下要满足一些感觉上的需要, 但这种需要不一定能够被人清晰地表达出来。例如,用户需要一个解线性方程组的表达式。像这样的要求就不够清楚,程序员就很难编出一个使他满意的程序。他必须弄清楚要有多少问题需要解决?在这些方程式中有没有对
linuxc语言信号量爸爸女儿儿子橘子苹果问题资源共享
linux系统c语言实现爸爸儿子女儿简单消费者问题苹果橘子拿与放问题, 资源共享,线程互斥,使用简单的无名信号量解决
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 为什么学习java呢 为什么写java学习笔记