⑴ java web项目把数据放入内存全局共享的方法有哪些
数据存在 Map 或 ArrayList 变量中,且变量加 static 声明为静态变量。这样所用用户访问这个变量都是同一个对象..
⑵ Java鎬庢牱璇诲嚭鏁版嵁鍚庢案椹诲唴瀛樹腑渚夸簬浠ュ悗鐨勬暟鎹澶勭悊锛
鐢╯tatic淇楗版ゅ彉閲忥紝鑱斿悎Quartz瀹氭椂搴撳畾鏃舵洿鏂版暟鎹锛屾洿鏂版暟鎹鏃剁粰鏁版嵁鍔犻攣锛岃繖鏍峰彲浠ユ棦鑳藉仛鍒板皢鏁版嵁闀夸箙淇濆瓨鍦ㄥ唴瀛樻柟渚跨洿鎺ヨ皟鐢锛屼篃鑳戒繚鎸佹枃浠剁殑鎸佺画鏇存柊
⑶ java如何将从数据库取出的数据预先存入到内存
你要实现的这个可能跟SpringMvc的关系不是很大。
你要达到的目的其实就是在jvm启动的时候把数据库数据加载一份到内存,一个静态变量和一个静态初始化块就可以搞定你的问题,这两者都是在类加载的时候初始化一次,像前面回答的一样,你可以用一个HashMap搞定。稍微具体来说,一个静态变量
public static final Map<key,value> cache=new HashMap<key,value>()
static {
cache=请求数据库操作
}
key你自己加,String还是int都行,value是你数据库的结构,可以写个实体。获取的时候直接cache.get(key)就可以了。
⑷ 在Java类中 如何将一组数据写入内存是通过构造方法吗可以举个例子吗
不懂你的意思?
java不能自己直接操作内存,而且平时的操作也是jvm的内存(虽然JVM的内存来自系统RAM)。你实例化一个类 就是将数据写入内存了
⑸ 在系统启动时,使用java怎么将数据加载到内存数组中
最简单的办法是使用静态变量。变量设置为private的,初始化的时候给变量赋值,其版他方法权若要使用,只能通过get方法取值。这样避免的更改内存中的数据
如:
public class Test{
private static String[] testArgs;
static init(){
给testArgs赋值...
}
public static getArgs(){
return testArgs;
}
}
⑹ java io流是将数据全部加载在内存的流对象里才开始读的吗
是的,但你说的不全。读取有俩种方式,一种是直接读取,一种是先放在缓冲流中版,再一并读取。权内存只是个中转站,在第一种方式中,数据是先加载在内存区,然后又被马上被读取出去。在第二种方式中,它会有个缓冲区,其实也就是个可以重用的内存区,它是先读取完放在缓冲区,然后一并读取出去!
⑺ 你好,java 向数据库添加大量数据时内存溢出 在不改变内存的情况下如何解决 你当时是怎么解决的
比如想将一个1000W数据的数据库表,导出到文件;此时,你要么进行分页,oracle当然用三层包装即可,mysql用limit,不过分页每次都会新的查询,而且随着翻页,会越来越慢,其实我们想拿到一个句柄,然后向下游动,编译一部分数据(如10000行)将写文件一次(写文件细节不多说了,这个是最基本的),需要注意的时候每次buffer的数据,在用outputstream写入的时候,最好flush一下,将缓冲区清空下;接下来,执行一个没有where条件的SQL,会不会将内存撑爆?是的,这个问题我们值得去思考下,通过API发现可以对SQL进行一些操作,例如,通过:PreparedStatement statement = connection.prepareStatement(sql),这是默认得到的预编译,还可以通过设置:PreparedStatement statement = connection.prepareStatement(sql , ResultSet.TYPE_FORWARD_ONLY , ResultSet.CONCUR_READ_ONLY);
来设置游标的方式,以至于游标不是将数据直接cache到本地内存,然后通过设置statement.setFetchSize(200);设置游标每次遍历的大小;OK,这个其实我用过,oracle用了和没用没区别,因为oracle的jdbc API默认就是不会将数据cache到java的内存中的,而mysql里头设置根本无效,我上面说了一堆废话,呵呵,我只是想说,java提供的标准API也未必有效,很多时候要看厂商的实现机制,还有这个设置是很多网上说有效的,但是这纯属抄袭;对于oracle上面说了不用关心,他本身就不是cache到内存,所以java内存不会导致什么问题,如果是mysql,首先必须使用5以上的版本,然后在连接参数上加上useCursorFetch=true这个参数,至于游标大小可以通过连接参数上加上:defaultFetchSize=1000来设置,例如:
jdbc:mysql://xxx.xxx.xxx.xxx:3306/abc?zeroDateTimeBehavior=convertToNull&useCursorFetch=true&defaultFetchSize=1000
上次被这个问题纠结了很久(mysql的数据老导致程序内存膨胀,并行2个直接系统就宕了),还去看了很多源码才发现奇迹竟然在这里,最后经过mysql文档的确认,然后进行测试,并行多个,而且数据量都是500W以上的,都不会导致内存膨胀,GC一切正常,这个问题终于完结了。
⑻ java怎么将生成的文件放入内存
这个要使用到内存流。BufferedOutputStream或者BufferedWriter。
文件的读取和写入都应该会了吧?普通的流读写都是直接从文件中读取或者写入到文件中的,而内存流则是把文件中的内容写入到电脑内存或者是从内存中读取出来。具体的话就是把输出流替换成BufferedOutputStream或者BufferedWriter即可