以小的和大的启动堆栈内存配置Tomcat JVM,都会引发网页响应时间超出Java VM堆栈的最大值的某种问题(如果需要堆栈也跟着增长)。因为Tomcat正在提供响应时会占用大量的时间重新分配内存,所以如果您不希望性能出现类似的问题,一定要让-Xms和Xmx开关值就是所需内存的相同大小,从而保证JVM在操作过程中从不需要重新分配堆栈内存。
在调用驻留于CATALINA_HOME/bin的Tomcat脚本之前,可以设置JAVA_OPTS环境变量值,以设置这些JVM启动的任意开关。将JAVA_OPTS设置成包含任意开关、以空格分开的字符串。
为了可以连接远程调试器,且想阻调试模式启动Tomcat JVM,那么可以按如下方式设置JAVA_OPTS环境变量:
JAVA_OPTS="-Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n"
以上语句允许您通过Tomcat主机上的8000端口连接一个JPDA远程调试器客户端(例如,任何Java IDE),并调试Tomcat JVM中运行的任何代码。您可随意定制所喜欢的端口号。
如果想通过JMX远程客户端连接到Tomcat以实现本地管理和,或监控,请使用下列设置:
JAVA_OPTS="-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jxremote.ssl=false
-Dcom.sun.managerment.jmxremote.authenticate=false"
这些设置允许您在同一台运行Tomcat的机器上使用JMX控制台(如JDK自带的jconsole),如果想远程使用JMX控制台,则使用下列这些设置:
JAVA_OPTS="-Dcom.sun.management.jmxremote.port=8080
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxmote.password.file=/path/to/pw/file"
这些设置允许您从另一台机器上用TCP 8008端口连接到Tomcat JVM上。您也可以设置-Dcom.sun.management.jmxremote.authenticate=truen,然后在JMX远程口令文件中设置-Dcom.sun.management.jmxmote.password.file=/path/to/pw/file路径,从而只有您及您授权的用户可以连接到Tomcat JVM上。
//这是JDK提供的栈import java.util.Stack
public class UsingStack {
public static void main(String[] args) {
//构造栈对象,使用类型限制,只能存储Integer数据
Stack<Integer>s = new Stack<Integer>()
//1、2、3依次入栈
s.push(1)
s.push(2)
s.push(3)
//3、2、1依次出栈
System.out.println(s.pop())
System.out.println(s.pop())
System.out.println(s.pop())
}
}
//这是我写的顺序结构的栈
import java.util.EmptyStackException
import java.util.Vector
public class UsingStack{
public static void main(String[] args){
//构造栈对象,使用类型限制,只能存储Integer数据
MyStack<Integer>s = new MyStack<Integer>()
//1、2、3依次入栈
s.push(1)
s.push(2)
s.push(3)
//3、2、1依次出栈
System.out.println(s.pop())
System.out.println(s.pop())
System.out.println(s.pop())
}
}
/**
* 栈类
* @author developer_05
* @param <T>
*/
class MyStack<T>extends Vector<T>{
/**
* 构造方法
*/
public MyStack(){
}
/**
* 入栈方法
* @param item 待入栈的元素
* @return 返回入栈的元素
*/
public T push(T item) {
addElement(item)
return item
}
/**
* 出栈方法(同步处理)
* @return 返回出栈元素
*/
public synchronized T pop() {
T obj
int len = size()
if (len == 0)
throw new EmptyStackException()
obj = elementAt(len - 1)
removeElementAt(len - 1)
return obj
}
/**
* 判断栈是否为空的方法
* @return 返回true(栈空)或false(栈非空)
*/
public boolean empty() {
return size() == 0
}
private static final long serialVersionUID = 1L
}
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)