一个问题,比较底层,关于JDK与JVM的关系

bloodrate 2008-01-31 04:47:40
今天我突然想弄明白硬件设备上的文件是怎么读取的,然后顺着JDK的SRC查看InputStream的源文件,查到最后一部发现许多native函数没有实现,我料想这些函数就是JDK与JVM的通讯接口,JVM在系统里是JVM.DLL,我猜想JVM是C写成的,那么NATIVE函数就是JNI技术?不是传说中JNI技术影响跨平台性的么?怎么基类函数都是用JNI调用底层资源?到底NATIVE和JVM是怎么一种调用关系?
...全文
329 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
diamond_fish 2008-02-01
  • 打赏
  • 举报
回复
就是这样啊,跨平台是因为jdk把操作系统相关的东西都封装了。native的实现不同操作系统不同
bloodrate 2008-02-01
  • 打赏
  • 举报
回复
这么说的话,如果我想做一个写入文件的操作,在我的代码里写一堆native,完全可以不调用JDK中的FileOutputStream就能实现。
anglela 2008-02-01
  • 打赏
  • 举报
回复
JAVA技术交流与学习:45633778

技术交流,共同进步!!
codeartisan 2008-02-01
  • 打赏
  • 举报
回复
不同平台的jvm都不一样,具体实现当然不一样。反正java程序是运行在jvm上的,只要调用的接口一样就行了。
老紫竹 2008-02-01
  • 打赏
  • 举报
回复
你自己写的native代码,比如用C,可以访问任何你能访问的资源,包括JVM不能访问的。
所以,如果你提供了各个平台的native代码的话,同样你的java程序也是跨平台的啦。
bloodrate 2008-02-01
  • 打赏
  • 举报
回复
奥是这样啊,那实际上JVM把native的函数复写了,而操作系统不认识native,实际上程序里写native也是JVM级别代码而不是直接去调用windows api,其实也不会影响跨平台性吧,只不过是直接访问了虚拟机而已
老紫竹 2008-02-01
  • 打赏
  • 举报
回复
JNI 是java调用native的接口,java的代码当然是跨平台了,但是那个native可就不是跨平台啦。
你可以用c/delphi/c++/等其它语言来书写。
dracularking 2008-02-01
  • 打赏
  • 举报
回复
我的理解是因为JDK里的方法有通用的JVM来支持 而扩展后的native就没有了
自己写native等于是在JVM层面修改代码
老紫竹 2008-02-01
  • 打赏
  • 举报
回复
因为JDK调用的native都在JVM里面啊!!! 哈哈!!!
所以SUN针对每一个操作系统都提供了对应的JVM.也就提供了对应native的实现。
我们只要安装了JVM就可以了!

所以,你也可以这么做。

bloodrate 2008-02-01
  • 打赏
  • 举报
回复
如果自己写native据说就破坏了跨平台性了,但是JDK也是普通的JAVA程序JDK里也是直接写native,为什么调用JDK里的方法就不破坏跨平台性?
dracularking 2008-02-01
  • 打赏
  • 举报
回复
可以想象成要连接口径大小不一的水管
用一端接口相同(接Java代码) 一端口径大小不一以能配合不同口径的转接器(各种平台JVM)
老紫竹 2008-02-01
  • 打赏
  • 举报
回复
我的代码里写一堆native

可以,当然每个操作系统的native都不一样,你得每一种可能用到的操作系统都写一个才行。

这也就是为什么JVM要区分操作系统的原因。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧