我是一个java的初学者,我使用java创建了一个应用,在这个应用里面,我启动了一个工作线程,在工作线程中我另外启动了2子工作线程,为甚么在linux下面发现了10个java实例!另外每个实例都占有相同的资源?难道说实在linux下面java的线程处理是采用进程模拟的?如果是这个样子的话我应该怎样来提高自己的应用的性能呢?

解决方案 »

  1.   

    我是一个java的初学者,我使用java创建了一个应用,在这个应用里面,我启动了一个工作线程,在工作线程中我另外启动了2子工作线程,为甚么在linux下面发现了10个java实例!另外每个实例都占有相同的资源?难道说实在linux下面java的线程处理是采用进程模拟的?如果是这个样子的话我应该怎样来提高自己的应用的性能呢?
      

  2.   

    并且内存会不断的增加,使用gc来回收也没有效果!
    在java中那些内存系统是不会自动回收的?
    如果不能自动回收那么我该如何处理?
      

  3.   

    你是强迫GC回收吗?
    可能这是没用的。
    你在你的对像里写finalize() {System.out.println("finalize");}
    再用System.gc()来回收,看看GC有没有真正回收,如果没有回收就是你的所有对象还在用。在java中那些内存系统是不会自动回收的?
    ----他会自动回收的,而且GC是根据内存的使用情况来进行回收的,如果内存不够用GC才启动,因为回收一次要很大的计算量的。
      

  4.   

    我的一个应用要保证7X24运行的,但是在运行28个小时的时候(系统的自我计时和日志来统计的)内存就会不足!系统在运行的时候,如果满负荷运行的话,会产生10000万/秒个对象,在保存在一个静态的Colection中,在下一次运行前清空Colection并且进行GC操作!但是还是会产生系内存溢出,静态的内存在java的文档说是在堆栈中的,据说速度可以快一些,但是内存在随机的增加这是很麻烦的一件事情.
      

  5.   

    我的一个应用要保证7X24运行的,但是在运行28个小时的时候(系统的自我计时和日志来统计的)内存就会不足!系统在运行的时候,如果满负荷运行的话,会产生10000/秒个对象,在保存在一个静态的Colection中,在下一次运行前清空Colection并且进行GC操作!但是还是会产生系内存溢出,静态的内存在java的文档说是在堆栈中的,据说速度可以快一些,但是内存在随机的增加这是很麻烦的一件事情.
    (上面写错了是10000个不是10000万否则什么机器也够呛)
      

  6.   

    java一般是不提倡自己用GC回收垃圾的
    你可以让一个对象为null,如rs=null,就会通知garbage collector去回收掉。一个程序的多个线程,运行的一个程序的多个实例使用的是同一份共享的内存空间和代码,没错啊,所以限程序间的通信就很容易,而进程却不一样,它们要保留数据的多个副本,所以消耗的内存也多,在进程间建产管道进行IPC通信也比较困难。
      

  7.   

    linux下面java的线程处理是采用进程模拟!
    确实! linux 一直没有实现真正的多线程!而是使用 fork() 来模拟多线程的操作的!!!
      

  8.   

    linux+java我看不是很好!至少我的自己做的东西,在windows 2k svr上的性能和远远高于linux下的!