日期:2014-05-20  浏览次数:20581 次

java几个郁闷的考题
1、jdk 6可以管理到多少线程?A 100左右 B 1000左右 C 10000 左右 。如果一个应用需要使用大量的内存,您有两种方式,第一,使用64位系统,让JDk寻址到4G以上内存;第二,软件采用分布式,使用多个JVM。请分析两种方式的利弊


2. JDK 1.6 的新特性,您使用过哪些,你觉得哪些特性在您负责的哪些项目中是起到关键作用的?


------解决方案--------------------
引用楼主 topgun 的帖子:
1、jdk 6可以管理到多少线程?A 100左右 B 1000左右 C 10000 左右 。如果一个应用需要使用大量的内存,您有两种方式,第一,使用64位系统,让JDk寻址到4G以上内存;第二,软件采用分布式,使用多个JVM。请分析两种方式的利弊


2. JDK 1.6 的新特性,您使用过哪些,你觉得哪些特性在您负责的哪些项目中是起到关键作用的?

------解决方案--------------------
因为工作的原因,目前只用到了JDK5的新特性,而未用1。6的。
至于线程管理。
以我的开发经验,一个大的系统,也不可能使用超过200个线程的情况。
所以,1K和10K这种情况,几乎不可能出现。
如果楼主的程序中,非要那么多的线程才能解决问题的话,不妨找到问题的瓶颈在何处,更改先有算法以解决问题。
其次是内存的问题。
内存爆掉的问题,一般会是由数据库操作而引起的,这种情况下,可以通过释放缓存、将数据分批查询处理等方法来解决。
程序启动后,所加载的信息,一般是不会超过800M的,留下200M左右的空间,作为程序处理数据的缓存空间,一般情况下是能够解决问题的。
就看楼主有没有实力将程序的数据缓存空间控制在200M左右或以内的范围内。
当然,在面向对象的编程理念中,线程处理所涉及到得对象,某种意义上,也可以称为缓存。
------解决方案--------------------
根据这篇文档, 线程的栈空间默认大小为256kb(on Intel for 1.3 and 1.4 32-bit VMs), 假设JVM的地址空间为4gb, 两者相除, 一个JVM最多能容纳的线程约为16000。当然考虑到其它因素, 例如堆也要消耗地址空间, 栈空间大小可设置(最小64kb)等等, 这不是一个确切的数字. 但数量级在10000应该是没问题的。在google上能够搜到的一些线程数接近10000的案例案例.
------解决方案--------------------
呵呵,线程数量跟内存没关系,它消耗的是cpu时间,内存消耗只是取决于你线程里面消耗的内存大小,1000与10000都有可能,就看你的cpu性能了。1000以上的我都遇到过,就是普通的pc服务器。我相信大多数的java开发人员不会用到这么多的线程了。

至于分布式和64区别:分布式优点就是性能上的提升,条件允许的话可以弄N多个,也可以将系统中的应用单独分离(ejb,wtc,webservice等等),缺点就是维护麻烦,成本高(这点要考虑客户的感受了),64的呢,大体上相反,关键要看你系统是不是会达到内存峰值。

1。6特性,你可以直接回答没用过 ,因为常规java 开发你根本用不到新特性。比如监控,derby,scripting等。你说你用了些什么,可能你用了你也不知道。