m******t 发帖数: 2416 | 1
If a final method does not override any other method, a compiler
may choose to optimize all the calls to this method to be static binding.
A final method must be marked in the bytecode, otherwise a compiler would
not be able to prevent it from being overriden (e.g. when the enclosing
class is located in a jar file) |
|
xt 发帖数: 17532 | 2
That applet plugin *is* a JVM. What do you think
of sth can run Java bytecode? |
|
o***e 发帖数: 30 | 3 people won't use any language other than C# to build .Net app
just like many JVM-based langauges can never gain popularity.
technically it is true that .Net support language variations better
than java; but this is nontheless mainly marketing hype and totally
irrelavant to normal developers.
Sun legally controls java, and MS practically controls C#,
the difference at bytecode level has no effect to language evolution. |
|
t****5 发帖数: 20 | 4
now that's cheating! the reason is related to bytecode format, as I said...
and again, it dosn't say a java impl *must* do that.
well this discussion has become moot:) |
|
g*****g 发帖数: 34805 | 5 我对数据库确实外行,但从java实现的一些数据库,比如Apache Derby来看,
其代码量并不如一个应用服务器,甚至如Spring这样的lightweighted container
大。跟OS完全不在一个量级上。Derby的核心bytecode代码仅在3M左右。固然
数据库实现有多种方式,支持的特性不同,但核心部分显然没有你说的那么复杂。 |
|
g*****g 发帖数: 34805 | 6 No, but Apache Derby is recognized as a RDBMS everywhere, and
Derby core is only 2M bytecode. It can't be rocket science. |
|
w*********e 发帖数: 5286 | 7 那你还不如说有的embedded os很简单就等于linux/windows/unix os kernal也很简单
了。一个极端的例子,linux kernal里面process scheduling最核心的部分也就是100
多行,一个作业量而已,连course project也算不上,按照你的逻辑,os的kernal也挺
简单的,一个course project而已。其他都是你所谓的“外延”么
可以作为stand alone network server 不等于就是一个rdbms了,前面说了,
只有一个很基本的query/data storage功能的东西远远称不上rdbms。
好了多说无益,你可以找本基本的db教科书看看,看看rdbms至少应该包括些什么。当
然了,你可以有自己的rdbms的定义,你也可以认为所谓的kernal rdbms就是2M
bytecode那点东西,前面有网友说了,看问题的角度不一样,我只是觉得你对kernal和
所谓“外延”的定义非常奇怪而已。 |
|
w*********e 发帖数: 5286 | 8 ok, 你的定义(表装数据+sql)能不能称为rdbms kernal我们暂且不论,
就算依据你的定义好了,把什么索引,buffer management, optimizer, statistics,
code generation,全部扔掉, 2M bytecode能支持ANSI SQL的
pipeline execution吗?你对SQL有多少概念?
再一次用你自己的例子,你自己去看看derby,
仅仅就是表装table和sql,derby用了多少code |
|
w*********e 发帖数: 5286 | 9 还什么entire internet,wiki这种可以随便改的上面的一句话也能代表entire
internet了.
说的不好听一点,你对os和rdbms的内核基本上都是一无所知,
我相信你连那derby 那2M bytecode是干什么的也没搞清楚过. |
|
j***i 发帖数: 40 | 10 So you think you can implement all Codd's rules in 2M bytecode(or a course
project, whatever)?
You don't even know the difference between an RDBMS and relational algebra. |
|
k**********a 发帖数: 255 | 11 问题是这样的
我想运行一个已经bytecode file 叫做 game.class 因为这个是别人给我的 所以我没
有它对应的java源文件 只有.class
它是一个有图形界面的游戏 里边有很多image和icon 我也下载下来 import到我的这个
project的folder下面 我好不容易让它运行起来 它确实也运行成功了 但是游戏画面漆
黑一片 同时console提示player已经自动的进行到什么什么程度了 就是看不到image
和Icon的resource
我尝试了很多办法 把那几个image和icon到处copy 可是还是不行 我也没法打开看源代
码 大家有时间建议么
谢谢了 |
|
k***r 发帖数: 4260 | 12 compiler效率在scala中不是priority。我记得看到一篇文章说
作者想把直接compile成bytecode改成compile成java source,
然后用javac。其实scala是wrap java data types,会慢一些,
但因为是statically typed,还是比jython/jruby之类的快很多。
e
java
的e
efficient |
|
q*********u 发帖数: 280 | 13 有几个题还是不太明白
2.What is erasure of Generics
这个what 是不是改成when比较好,因为你的答案里面有一个when compiling java
source to bytecode, then jvm remove the type of generics
5. drawbacks of lazy initialization
不太明白你的答案,能不能解释一下
第11题的话,你的pass by value的确是太安慰我了,不过个人觉得面试的时候,直
接笼统的说pass by value,应该有些补充,比如:
public class XXX{
...
public static void method(A a){
//进入函数后,调用的函数中的参数会被copy, 那么内存中起码有2个指向a
的ref,所以说,本质上是pass by value 没有错。
a.setVar(...); //可以改变a所指向的对象A的值
a = new A(); //这个时候,a 就指向另外一个新建的A了,和函数外的对象
A脱离了; |
|
c******n 发帖数: 4965 | 14 the following code compiles fine under commandline
but it fails in eclipse, with error msg:
....having the same erasure ......
I checked the .class bytecode , it is exactly the same for the 2
methods (except for return and exception), caller code is able to pick
up the differences because javac actually did add annotation about the
generics parameter, so "erasure" is a lie!!!!!
import java.util.Map;
class ffff{
private static Integer fun(Map s) throws Exception {
return null;}
p... 阅读全帖 |
|
|
f*******3 发帖数: 351 | 16 【 以下文字转载自 WashingtonDC 讨论区 】
发信人: Westridge (西岭), 信区: WashingtonDC
标 题: Java开发人员知识点(更新)
发信站: BBS 未名空间站 (Wed Apr 18 00:03:19 2012, 美东)
Java开发人员知识点
1.听说过James Gosling,SUN和Oracle公司。知道网上下载Java的地址,在哪讨论Java
。练习过Java在Windows下的安装和配置。知道Java应用系统中常见的几种license和JCP。了
解bytecode和Java在不同系统下可以轻松移植的原理。
2.懂得基本的Java编程和行命令格式。了解面向对象的编程思路。
几个基本点:Java基本语法和控制结构,命名和代码风格,结构化,对象封装,继承,
抽象,多态,接口,异常处理,堆空间,栈空间,垃圾回收器,static,this,
synchronized,annotations,JUnit,JDBC,JSP/servlet
Java Core APIs: java.lang,java.util,java.io,java.a... 阅读全帖 |
|
r*******n 发帖数: 3020 | 17 我也推荐clojure, 语言非常简练, 表达力非常强;;
语法体系和C, Java之类很不同,所以开始学习有点难度。
确切的说, Clojure不是纯函数式的语言,但是它确实函数式语言,具备函数语言的所
有优点。
但是lz是要脚本语言, 我觉得Clojure不是脚本语言,它没有解释器,而是编译成
bytecode。
所以我觉得如果找脚本语言,我认为Jruby或者Jython最适合不过了, 楼上所说的
performance问题根本就不用担心,因为足够用了。 |
|
r*******n 发帖数: 3020 | 18 我也推荐clojure, 语言非常简练, 表达力非常强;;
语法体系和C, Java之类很不同,所以开始学习有点难度。
确切的说, Clojure不是纯函数式的语言,但是它确实函数式语言,具备函数语言的所
有优点。
但是lz是要脚本语言, 我觉得Clojure不是脚本语言,它没有解释器,而是编译成
bytecode。
所以我觉得如果找脚本语言,我认为Jruby或者Jython最适合不过了, 楼上所说的
performance问题根本就不用担心,因为足够用了。 |
|
c*****a 发帖数: 1638 | 19 zhaoce073发了很多帖子,当然这些都是他自己的心得和大家分享,出发点是好的,但
是很多东西都是错的。看上去zhaoce073就是那种爱自己琢磨的孩子,脑补一大堆未必
正确的思想(老实说,他讲得多数东西都是错的),他属于先看到结果再去找理由的。
实际上很多api的设计是因为实现原因的妥协。很多初入门的朋友估计就被引到歪路上
去了。
随便举2个例子:
http://www.mitbbs.com/article_t/Java/31129077.html
他说:
真正的结构上的美要从包结构上入手
而不是从类这个层次入手解决
整体结构就应该划分清楚
而不是等到类这个层次再来切割
那就很痛苦了
所以整个软件工程就是从大而小的切割
而不是在最低一层也就是类层面上的切割
通俗点说就是先component diagram
再class diagram,结构应该是先总体后部分
enum是第一个坚决淘汰abstract class机制的api
如果说以前的api是还隐晦地表达对abstract class的不满
比如servlet, struts等使用abstract class的框架逐步被市场所淘汰... 阅读全帖 |
|
z*******3 发帖数: 13709 | 20 呵呵,我先不说什么
来
[[[彩蛋醒目]]]
楼主原文中有一个很明显的错误
谁指出来,我给20个包子
看看你们水平到了没有
能不能通过做试验来验证
然后为了防止楼主偷偷改原文
我这里做个备份
“为啥enum不能实现abstract class?因为enum自己是个class,任何enum的定义的底层
实现被自动替换为继承这个类,因为java不支持多继承。所以enum是不能继承任何其他
类的。作为一个例证,enum可以继承enum
2,为啥现在abstract class在框架接口里远没有interface流行。这个当然有
interface更灵活的原因,但是zhaoce073基本都没有说到点子上。最重要的一点是:现
在框架用约定远比以前多了,约定更多意味着框架需要注入更多的逻辑。而目前框架最
流行的逻辑注入方式是拦截,java的proxy机制只支持interface。如果是abstract
class必须通过bytecode weaver来进行,后者会有安全顾虑,很多企业级的server是不
允许的。” |
|
c*****a 发帖数: 1638 | 21 zhaoce073发了很多帖子,当然这些都是他自己的心得和大家分享,出发点是好的,但
是很多东西都是错的。看上去zhaoce073就是那种爱自己琢磨的孩子,脑补一大堆未必
正确的思想(老实说,他讲得多数东西都是错的),他属于先看到结果再去找理由的。
实际上很多api的设计是因为实现原因的妥协。很多初入门的朋友估计就被引到歪路上
去了。
随便举2个例子:
http://www.mitbbs.com/article_t/Java/31129077.html
他说:
真正的结构上的美要从包结构上入手
而不是从类这个层次入手解决
整体结构就应该划分清楚
而不是等到类这个层次再来切割
那就很痛苦了
所以整个软件工程就是从大而小的切割
而不是在最低一层也就是类层面上的切割
通俗点说就是先component diagram
再class diagram,结构应该是先总体后部分
enum是第一个坚决淘汰abstract class机制的api
如果说以前的api是还隐晦地表达对abstract class的不满
比如servlet, struts等使用abstract class的框架逐步被市场所淘汰... 阅读全帖 |
|
z*******3 发帖数: 13709 | 22 呵呵,我先不说什么
来
[[[彩蛋醒目]]]
楼主原文中有一个很明显的错误
谁指出来,我给20个包子
看看你们水平到了没有
能不能通过做试验来验证
然后为了防止楼主偷偷改原文
我这里做个备份
“为啥enum不能实现abstract class?因为enum自己是个class,任何enum的定义的底层
实现被自动替换为继承这个类,因为java不支持多继承。所以enum是不能继承任何其他
类的。作为一个例证,enum可以继承enum
2,为啥现在abstract class在框架接口里远没有interface流行。这个当然有
interface更灵活的原因,但是zhaoce073基本都没有说到点子上。最重要的一点是:现
在框架用约定远比以前多了,约定更多意味着框架需要注入更多的逻辑。而目前框架最
流行的逻辑注入方式是拦截,java的proxy机制只支持interface。如果是abstract
class必须通过bytecode weaver来进行,后者会有安全顾虑,很多企业级的server是不
允许的。” |
|
t***a 发帖数: 416 | 23 如果你看编译好的bytecode, 两处应该都是LDC "Hello!", LDC都是生成一个string
refere
nce, 然后再把这个reference存储给static field或者local variable. 所以如果这么
看结果应该是false
但是jvm对于相同string constant在不同class files这种情况,有个优化,它只
create一个instance, 所以其实两个reference指向了同一个Instance,结果就变成了
true |
|
t***a 发帖数: 416 | 24 如果你看编译好的bytecode, 两处应该都是LDC "Hello!", LDC都是生成一个string
refere
nce, 然后再把这个reference存储给static field或者local variable. 所以如果这么
看结果应该是false
但是jvm对于相同string constant在不同class files这种情况,有个优化,它只
create一个instance, 所以其实两个reference指向了同一个Instance,结果就变成了
true |
|
t***a 发帖数: 416 | 25 可以给eclipse装个asm bytecode的插件,就可以看到java编译好的代码了
就跟以前用TASM一样。。。
register |
|
|
l*******g 发帖数: 82 | 27 你说的是annotation,decorator是设计模式!
annotation的话,建议可以看一下Java Class文件的specification,启示很简单的,
只不过是吧一些annotation,可以动态的转变成字节码bytecode。
不过,我不是很喜欢用annotation做程序。 |
|
w*********n 发帖数: 439 | 28 A compile-time error occurs when
Answer
a.
there’s a syntax error in a Java statement
b.
the Java compiler can’t be located
c.
the class doesn’t contain a main method
d.
bytecodes can’t be interpreted properly |
|
k**********a 发帖数: 255 | 29 【 以下文字转载自 Java 讨论区 】
发信人: kimulatakuya (木村拓哉), 信区: Java
标 题: 求助大家 如何用 Eclipse 给一个project加入image
发信站: BBS 未名空间站 (Thu Aug 27 20:13:09 2009, 美东)
问题是这样的
我想运行一个已经bytecode file 叫做 game.class 因为这个是别人给我的 所以我没
有它对应的java源文件 只有.class
它是一个有图形界面的游戏 里边有很多image和icon 我也下载下来 import到我的这个
project的folder下面 我好不容易让它运行起来 它确实也运行成功了 但是游戏画面漆
黑一片 同时console提示player已经自动的进行到什么什么程度了 就是看不到image
和Icon的resource
我尝试了很多办法 把那几个image和icon到处copy 可是还是不行 我也没法打开看源代
码 大家有时间建议么
谢谢了 |
|
g*****g 发帖数: 34805 | 30 I wouldn't mind using vi for some quick configuration change on a
console. But is there a reason you can't do your development locally
before upload the bytecode to remote machine? |
|
l******e 发帖数: 12192 | 31 感觉你是要问declaration和definition。
C++这样做(其实是继承C的传统),主要是方便发布api,一般都要提供头文件和binar
y的库;而java, c#这些都有虚拟机,编译成bytecode后,类声明都是可见的。
't
implementation
doing |
|
d****p 发帖数: 685 | 32 C++ and C are different things and they should not be compared side by side.
And according to your post, Java programmers should code in bytecode against
specific JVM since there is less high level "syntax" involved.
++ |
|
t*********e 发帖数: 1136 | 33 Thanks for the information. Scala is based on Java bytecode. So there will
be license issue as well, I guess. Ruby is a scripting language, not in the
same category as Java.
SAP can afford to have its own JVM. But it is unlikely they will release it
to public domain. IBM abandoned Apache Harmony, perhaps due to pressure from
Oracle. So it seems to me that the entire Java ecosystem is based mainly on
just one JVM controlled by Oracle. This is scary.
How can the *nix world that values freedom put ... 阅读全帖 |
|
x****u 发帖数: 44466 | 34 很多的javascript代码也是编译后的,针对网络传输进行优化,去掉了注释和变量名,
你应该用它来对比java的bytecode。 |
|
r*********r 发帖数: 3195 | 35 interface 的抽象度更高。implementation 是实现的细节。
从实用上讲,header file 是为了便于compiler 作 type checking.
因为编译过的 binary 里不含type information.
java 的 bytecode 里则存有 type meta data,
所以不用单独的header file |
|
g*****g 发帖数: 34805 | 36 芝麻饼上撒俩葱花改叫葱花饼,可以,但说不是芝麻饼就是大言不惭了。
Java用type erasuse是为了兼容,那么多legacy系统的bytecode可以不编译
就能用。C#这种没人用的语言自然怎么改都可以。 |
|
g*****g 发帖数: 34805 | 37 C# 2.0跟C# 1.0可以在bytecode级别上兼容吗?
这就是我说的,没人用的东西当然怎么改都行。
或者微软才不管你兼不兼容。 |
|
d*****l 发帖数: 300 | 38 android 只是用JAVA语言及API来做开发,因为会JAVA的人实在太多了。而android上并
没有JVM,android应用也不是以java bytecode安装到android
上的,而是dek executable,由一个叫dAlvik的VM执行,DALVIK与JVM完全
两码事,与JAVA完全无关,根本不同的架构。android也只实现了部分的JAVA
API,如进程,线程,IO,网络,UTIL等。ORACL与GOOGLE打了
几年的官司,一根毛都没捞着,法官说API不受产权保护,也没有专利。
ORACLE看着android风生水起,只能干吹胡子瞎瞪眼。 |
|
h********3 发帖数: 2075 | 39 functional language出现得比Java早多了。语言设计太多问题了,成不了气候。首先
设计者就是用数学家的思想去解决一个问题,而非工程师的思想。其次,细节语法问题
太繁琐,比如LISP。光是一层包一层的括号都看死人了,没有可读性。最后,Java拥有
直接上最优秀的虚拟机。有最优秀的一帮人在JVM上做了太多出色的工作。其他任何语
言,包括python在类,都很难接近JVM的效率。网上有很多程序语言的计算效率对比。
除了C/C++,汇编,Fortuan外,python,ruby,php之类语言落后Java都是在2个数量级一
样上。现在大家都在考虑把语言编译成Java bytecode直接上JVM跑,而不自己写虚拟机。 |
|
x****u 发帖数: 44466 | 40 JVM等于是bytecode的执行环境了,理论上说可以跑任何东西。 |
|
c******n 发帖数: 4965 | 41 I see that today a lot of people still pay extra care to change StringA +
StringB into
StringBuffer.append(). but from what I observed from de-compiled bytecode,
A + B does generate StringBuffer.append(),
so I think it's bad in most cases to manually write out StringBuffer.append(
) since javac optimizes it to append() automatically anyway, while writing "
+" for human code reading is much cleaner and nicer to the eye
what do u think? |
|
s*****n 发帖数: 169 | 42 读bytecode 然后执行给出结果。多难? 困难是怎么invoke methods with object
parameters. |
|
s*****n 发帖数: 169 | 43 不错。有明白人。我是开个玩笑。不过我正在做的JVM是直接读bytecode instructions
, 然后执行。不是读源程序。至于为什么要做着个东西,是和research有关。举个例子
,你想做自动测试,必须知道JVM的反馈信息。但是JVM不会给你你想要的信息因为安全
原因。Java reflection, AspectJ 也不行。
有人感兴趣,我可以open source. 合作开公司也许行。目前的版本是Java写的。的确
是在标准jvm里运行自己的jvm运行java 编译过的程序,i.e., xxx.class files。 |
|
l**********n 发帖数: 8443 | 44 我觉得scala在type上有点overdo了。有必要整那么复杂的type system吗?就是为了方
便编译成bytecode? |
|
d****i 发帖数: 4809 | 45 嗯,其实保持语言的简洁易读性还是很重要的,尽管可能看上去代码多一点。像Java 8
里面某些人要仿效其他语言加入的lambda就是一个语法糖绣花枕头,匿名内部类用了这
么多年了不是好好的,偏要加一些虚头花脑fancy的东西,实质上编译出来的bytecode
可能还不如匿名内部类有效。
OOP |
|