理论拾遗补漏--Java中的GC和多线程

            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中对于线程的支持是很完美的。

 

 

你可能感兴趣的:(理论拾遗补漏--Java中的GC和多线程)