有谁研究JVM和JAVA内存管理的?

xoHome 发布于 2012/03/24 14:16
阅读 1K+
收藏 1

工作三年,技术积累了三年(纯技术积累三年,因为当前这份工作自由时间比较多),项目也做过了不少,搞过WEB、开发过桌面、做过Android、研究过WAP,目前感觉在个人提升上遇到了瓶颈。

首先说问题:有需求即可实现,但实现不了大牛那样的简练;开发过小框架,但没有开源框架那样标准和优美;研究过底层,但没有形成某应用的体系,自我总结是经验不足,还需要大量的实际项目经验。经验是需要积累,大家都知道实际开发和学习还是有那么点冲突的,所以接下来的学习计划怎么定就是问题了,我接下来的目标是项目架构和设计,我了解过架构师或大牛们的技能点,排除经验和眼界不谈,入口点定位内存管理和系统调优,目前我缺少的是具体的学习计划,想各位提下自己宝贵的意见,谢谢。

OK,前景讲解完毕,接下讲下我个人目前的学习动态:

在书籍方面,相关的书籍我看过或正在看的有:《深入了解Java虚拟机》《深入了解JAVA虚拟机:基础与实践》《基于JAVA分布式实现:基于淘宝架构》《java组件开发》

在实际动手方面,自己原本打算做个解析JAR包来构建UML类图的工具,但随着深入,后来做着做着变成了JAVA反编译工具了(当然,没弄完,在反编译字节码的时候卡壳了)。附带个截图:

经过这个小工具的开发,对JAVA的字节码格式有了一定的了解,但仅此而已,关于内存管理、内存布局等等都还是模模糊糊,对书上说的虽然都懂,可应用的实处就不行了,每到这个时候就感觉上面的书籍写的太浅了。所以问问各位,就我上面所描述的这个阶段,我该如何的去学习,诚恳的请教!

以下是问题补充:

@xoHome:大家看图要仔细啊,别一眼认为是JD啊,界面确实是模仿JD的,发别软件的图来忽悠大家可是要折寿的。。。 (2012/03/24 14:48)
加载中
0
douglarek
douglarek
这个反编译工具你做的?怎么看怎么像JD-GUI啊? 你当我们都是小孩啊?osc不乏java方面的大牛,你这样就没意思了啊?
xoHome
xoHome
额 界面是模仿JD 你仔细看图,界面仅仅是翻译了字段和方法,字节码没有的,我就这里卡壳了 ,要真发个JD的图片上来我可以羞愧的一头撞死了
0
中山野鬼
中山野鬼
我不会。不过给个建议,与其折腾这个,还不如研究linux。特别是服务器的。那玩意比这个值钱。相同技术深度和广度下。
xoHome
xoHome
Linux在用中,通过实际使用来学习;而服务器没条件啊,公司的服务器不是我管的,源码方面研究过tomcat部署,还很浅,值得努力
0
中山野鬼
中山野鬼
建议楼主,如果想折腾linux内核的研究,先从两个点,任选吧。进程管理,和VFS(虚拟文件系统),都是比较好玩,也比较容易验证理解,而且相对比较独立的。和是否在服务器上没有关系。我所谓是服务器,不是服务器上的某些应用,而是基于你的内核的理解,和对linux的整体熟练使用下,在工作中,可以有能力参与必须进行服务器底层模块优化的项目。那确实很值钱。
xoHome
xoHome
非常谢谢你的建议,我去了解下这方面,看看目前阶段适不适合研究这个
0
中山野鬼
中山野鬼

另外说个“找喷”的话。我一直很抵触JAVA的虚拟机。JAVA我只认可他在面向对象方面的贡献。

现在真正有几个系统级的工程项目,真的可以在不同平台上跑?特别是嵌入式系统。达到系统级的,不是说你CPU里面有虚拟机的字节码实现模块(即便是硬件)就能实现的。一个简单的道理,跨操作系统平台,哪怕是同一台PC,基于虚拟机,你能做出调用 directX的游戏效果并在两个OS上都跑起来吗?

对于一次编译,到处运行这本身就是个伪命题。因为,普世的,一定不是特定的。你可以说他适用于任何地方,其代价是,任何地方他用他都不合适。

当然重复一点,不谈虚拟机,JAVA是有很多优秀的,值得使用的地方。

 

xoHome
xoHome
嗯 有同感,明显的JVM在Solaris上的效率上最高(官方说的),而且关于平台特性的方面确实做的不怎么样,但没办法啊,就当是个切入点吧,懂了JVM再学其它的也容易些了。
0
小黑小别姬
小黑小别姬
去淘宝吧  淘宝自己定制jvm的
xoHome
xoHome
我也想,可不现实啊,就算进去了要多久才能混到给定制JVM的程度? 有 这个时间我自己都研究完了 呵呵
0
Monkey
Monkey
说一句实话,只有做c的人才有资格说如何管理jvm的内存,做java的没这个资格说这句话,你再牛都没资格。 
xoHome
xoHome
@Monkey : 我的意思不是怀疑你,而是我实际遇到的问题,一个针对数据库操作的应用程序,每次跑了大半个月就莫名其妙的停止工作了,没有任何日志输出,所以我才这么重视JVM内存管理和调优。别误会
Monkey
Monkey
@xoHome : 我搞了快四年了,纯粹的java,什么数据库,web,都没碰过的。就是纯粹的java应用程序。
xoHome
xoHome
我会C,我也懂汇编,也学过操作系统和编译原理,我也是计算机行业的,但我从事JAVA工作。JVM不是我学不懂,而是想向各位讨教更好的学习方法和路线。另外不知道你开发过长期运行的JAVA桌面系统没有,不懂JVM真的不行啊
0
matthewrod
matthewrod
工作3年,蛮牛的了  我自愧不如
0
Monkey
Monkey
你的问题,我觉得需要去检查一下代码。首先我个人认为java虚拟机不会出现一些在java跑应用的时候出现jvm崩溃的问题,毕竟这个玩意是sun公司长时间的积累出来的, 性能变差是有的。 我曾经也遇到一个问题在windows jvm跑没有问题,但是到了mac的虚拟机必挂,而且是系统崩溃一样的挂,之有一个mac系统的出错信息,最后的结果就是一个声明变量的问题,改成用的时候声明就好了。而且这个问题是mac系统更新之后出来的。所以你的问题我感觉是你写代码的方式触发的。
xoHome
xoHome
@Monkey : 我是根据dump镜像,确定出现问题的时间段,然后结合log和数据库数据来分析的,这块以前没弄过,所以目前还在分析,杯具。主要是问题出现的周期太长了啊,个把月一次。
Monkey
Monkey
@xoHome : 那是搞了一个礼拜,最后闲的蛋疼,到处打log,也不知道咋搞了,有一天忽然发现加上某一条log就不崩溃了。但是去掉就蹦,后来就从低级的地方开始检查。最后才确定是变量生命这个问题。
xoHome
xoHome
代码太多了,又没有错误提醒,只能根据内存状态来判断出问题的位置。虚拟机的内存管理和其它编译型的语言不同,需要的是运行时内存布局的数据来分析,和编程时内存管理不同,所以才需要这块的知识。可能你的是对的,都是经验的总结,认识不同吧。
0
J
JAVA初学者
最近我也在看openjdk,希望可以和你一块聊聊,我QQ: 陆仟陆佰玖拾贰万壹仟肆佰玖拾肆
返回顶部
顶部