1. Java中的垃圾回收
一般有垃圾回收器自动执行,不受控,在内存快耗尽之时进行。
回收的是没有引用的强引用对象,和弱引用和幽灵引用对象,参见:
http://www.infoq.com/cn/articles/cf-java-garbage-references
强制执行system.gc可以垃圾回收,并且每次垃圾回收之时都会去执行finazri方法,但是这里一般只会做C/C++内存的释
2. Java中的引用
简单数据类型的引用被修改,本身不会被修改。
对象的引用被修改,本身会被修改。(String之类的基本对象不可被修改)
clone对象被修改,被clone本身不会修改
3. Java中的进程和线程
JVM是单进程的。一个JVM就是一个进程。因此也会有专家提出以下的意见:
而且,LAMP的部署方式有显著的优势。在多进程架构中,Web服务器和动态语言软件中的故障一般不会使网站垮掉。虽然会有某个进程崩溃,但其他 服务Web请求的进程仍然可以继续运行。这与JVM这种多线程的环境中软件故障包括崩溃和死锁通常都会使系统垮掉,形成了鲜明对比。
这是另一个话题,笨重的JAVA是不是将要被php, ruby这种快速开发语言所代替
但是其实,这个问题也有办法能解决。
在Java中可以通过Runtime.exec来另起进程。
进程之间的通信可以通过RMI,WebService甚至Socket之间通行,另外如果不是实时的话,通过数据库存储数据会比较合适
并且实际上,Java的分布式应用也是热火朝天,并且一直都是多进程的方式。
不过话说回来,在单机的Web服务器上, 比如OC4j, 就只能是单进程的方式运行。
不过这个可以用多节点部署规避
至于多线程其实就没什么好讲的。Java中对于线程的支持是很完美的。