Java 什么对性能更好?列表,还是从数据库获取信息?

Java 什么对性能更好?列表,还是从数据库获取信息?,java,mysql,performance,Java,Mysql,Performance,因此,我有一个资源有限的服务器。(3Gb内存) 我需要知道的是,用这个更好吗 List<Object> list = new ArrayList<Object>(); void init(){ list = loadListFromDatabase } List List=new ArrayList(); void init(){ list=loadListFromDatabase } 并在需要时将其添加或删除到列表中,或者在需要对象时,每次访问对象时都将其从

因此,我有一个资源有限的服务器。(3Gb内存) 我需要知道的是,用这个更好吗

List<Object> list = new ArrayList<Object>();
void init(){
    list = loadListFromDatabase
}
List List=new ArrayList();
void init(){
list=loadListFromDatabase
}

并在需要时将其添加或删除到列表中,或者在需要对象时,每次访问对象时都将其从数据库中加载?

给您一些建议

如果您有一个像50多个表这样的大型数据库,那么请尽量减少对数据库的访问。
对于低大小的数据库(在您的情况下),数据库访问没有多大关系

但RAM的处理速度比DB-access快

如果您在应用程序中使用多线程,而这些应用程序正在与同一个表(在您的例子中是对象表)进行交互/修改/读取,那么不要去获取内存中的所有数据并进行处理,而是每次都从DB中获取数据

若您的代码是连续的,或者该表是独立的(并没有其他块修改同一个表),那个么立即在内存中获取它并处理它,然后将它存储回db是有效的

您应该考虑的另一个因素是内存大小,如果内存较低(您提到3GB RAM),那么第一个选项是更好的,即每次从db获取。 您所有的应用程序都部署在具有3gb ram的单机上,如果是,请在没有任何负载的情况下查找应用程序的内存消耗,该负载是您的应用程序至少需要的内存量


分析统计数据后,做出相应的决定。

使用后者,因为数据库中对象的数据可能会被另一个事务修改。具体取决于。您的代码通常会访问大多数对象吗?在这种情况下,提前加载可能会更快。或者您的代码只访问少数记录,很少访问?是的,可能是按需加载。不是每个对象都在不断地被访问,而是那些经常被访问的对象。使用列表(我当前的操作方式),我编辑对象,然后将其重新添加到列表瓶颈可能是手动打开连接,即使用
Class.forName(…);获取连接(…)。您应该使用连接池来缩短数据库连接时间并减少内存影响。此外,您可以向数据库表中添加索引,以便更快地获取所需的行。实际上,我使用了“类似”连接池的东西,因此这不是问题,我所有的表都有索引