不想写代码了,给你一个我写过的参考吧,我的这个是每天晚上0点时执行程序,一天只执行一次,效率认为还不错。
创新互联是一家集网站建设,增城企业网站建设,增城品牌网站建设,网站定制,增城网站建设报价,网络营销,网络优化,增城网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
package prepare;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
public class Auto_Prepare extends Thread {
// SimpleDateFormat sdfDate = new SimpleDateFormat("yyyy-MM-dd");// 格式化日期
// SimpleDateFormat sdfTime = new SimpleDateFormat("HH:mm:ss");// 格式化时间
SimpleDateFormat sdfTime_ALL = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");// 格式化时间
public Auto_Prepare() {
}
public void run() {
// TODO Auto-generated method stub
int way = 1;// 选择的方法
System.out.println("选择的方法是:方法" + way);
if (way == 1) {// 用Thread.Sleep()方法实现
while (true) {
int ON_RestTime = 20;// 如果进行了准备工作,线程的睡眠时间,单位:小时
int OFF_RestTime = 59;// 如果不进行准备工作,线程的睡眠时间,单位:分钟
// /////////////////////////////////////////////////////////////格式化时间
Calendar Now = Calendar.getInstance();
String strTime = "现在时刻北京时间:"
+ sdfTime_ALL.format(Now.getTime()) + "----";
if (Now.get(Calendar.HOUR_OF_DAY) == 0) {
// 即当时间是0点时,开始执行下列语句
System.out.println("abcdefghijklmnopqrstuvwxyz");
System.out.println("Auto_Prepare.java====" + strTime
+ "开始准备所有数据...");
Date SHDate = Now.getTime();// 执行准备工作前的时间
PrepareData(Now);// 执行准备工作
Now = Calendar.getInstance();// 现在的时间
long RunTime = Now.getTime().getTime() - SHDate.getTime();// 准备数据消耗的时间
int hr = (int) RunTime / 1000 / 60 / 60;
int mr = (int) RunTime / 1000 / 60 - hr * 60;
int sr = (int) RunTime / 1000 - hr * 60 * 60 - mr * 60;
System.out.println("Auto_Prepare.java====现在时刻北京时间:"
+ sdfTime_ALL.format(Now.getTime())
+ "----准备工作运行时间为:" + hr + "小时" + mr + "分" + sr
+ "秒。");
Now = Calendar.getInstance();// 现在的时间
long SleepTime = ON_RestTime * 60 * 60 * 1000
+ (24 - ON_RestTime) * (60 - OFF_RestTime) * 60
* 1000 - RunTime;
// 加(24-ON_RestTime)*(60-OFF_RestTime)分钟的目的
// 是消除一天中有四次睡眠OFF_RestTime分钟造成的误差。
int hs = (int) SleepTime / 1000 / 60 / 60;
int ms = (int) SleepTime / 1000 / 60 - hs * 60;
int ss = (int) SleepTime / 1000 - hs * 60 * 60 - ms * 60;
System.out.println("Auto_Prepare.java====现在时刻北京时间:"
+ sdfTime_ALL.format(Now.getTime())
+ "----所有数据准备完毕,线程睡眠:" + hs + "小时" + ms + "分" + ss
+ "秒。");
try {
Auto_Prepare.sleep(SleepTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} else {// 不是0点,睡眠OFF_RestTime分钟
Date SHDate = Now.getTime();
Now = Calendar.getInstance();
long RunTime = Now.getTime().getTime() - SHDate.getTime();// 程序运行消耗的时间
int hr = (int) RunTime / 1000 / 60 / 60;
int mr = (int) RunTime / 1000 / 60 - hr * 60;
int sr = (int) RunTime / 1000 - hr * 60 * 60 - mr * 60;
System.out
.println("Auto_Prepare.java====现在时刻北京时间:"
+ sdfTime_ALL.format(Now.getTime())
+ "----程序运行时间为:" + hr + "小时" + mr + "分"
+ sr + "秒。");
Now = Calendar.getInstance();// 现在的时间
long SleepTime = OFF_RestTime * 60 * 1000 - RunTime;
int hs = (int) SleepTime / 1000 / 60 / 60;
int ms = (int) SleepTime / 1000 / 60 - hs * 60;
int ss = (int) SleepTime / 1000 - hs * 60 * 60 - ms * 60;
System.out.println("Auto_Prepare.java====现在时刻北京时间:"
+ sdfTime_ALL.format(Now.getTime())
+ "----时间不是0点,不做准备工作,线程睡眠:" + hs + "小时" + ms + "分"
+ ss + "秒。");
try {
Auto_Prepare.sleep(SleepTime);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}// while(true)
} else if (way == 2) {
}
}
private void PrepareData(Calendar now) {
//准备工作,即你需要让程序处理的事情
}
}
其实首先你可以先使用监控内存工具,来监控下,如果内存消耗不是很大,其实就不用那么麻烦了。如果实在要加个内存监控程序,可以使用Runtime中的MaxMemory、TotalMemory、FreeMemory来实现。注意这些都是JVM的内存,请不要和系统的内存混淆。另外如果要实时监控,必须还得弄个线程类。大致思路是这样,至于内存溢出,你可以设定一个内存阈值,比如说15%的剩余内存设置,就报内存即将溢出的错误。
Hyperic HQ集成了强大的监测和管理功能,它有开源版本,您可以直接使用它用来对web服务器进行监控。
如果您想自己写代码实现,Hyperic HQ提供了一个服务器各种性能指标采集的API,这个API包本身提供了各种平台(linux/MAC/window等)的兼容。
可以学习软件包 java.lang.management
提供管理接口,用于监视和管理 Java 虚拟机以及 Java 虚拟机在其上运行的操作系统。
ClassLoadingMXBean
用于 Java 虚拟机的类加载系统的管理接口。
CompilationMXBean
用于 Java 虚拟机的编译系统的管理接口。
GarbageCollectorMXBean
用于 Java 虚拟机的垃圾回收的管理接口。
MemoryManagerMXBean
内存管理器的管理接口。
MemoryMXBean
Java 虚拟机内存系统的管理接口。
MemoryPoolMXBean
内存池的管理接口。
OperatingSystemMXBean
用于操作系统的管理接口,Java 虚拟机在此操作系统上运行。
RuntimeMXBean
Java 虚拟机的运行时系统的管理接口。
ThreadMXBean
Java 虚拟机线程系统的管理接口。
更多请访问(bug315)
售后响应及时
7×24小时客服热线数据备份
更安全、更高效、更稳定价格公道精准
项目经理精准报价不弄虚作假合作无风险
重合同讲信誉,无效全额退款