static 是靜態(tài)聲明,所以會先執(zhí)行Employee.id的時候,會先執(zhí)行static的腳本,就是id 的默認賦值和靜態(tài)塊的執(zhí)行,即打印那個static_block
10余年的兩當網站建設經驗,針對設計、前端、開發(fā)、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。全網整合營銷推廣的優(yōu)勢是能夠根據用戶設備顯示端的尺寸不同,自動調整兩當建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優(yōu)雅布局與設計,從而大程度地提升瀏覽體驗。創(chuàng)新互聯建站從事“兩當網站設計”,“兩當網站推廣”以來,每個客戶項目都認真落實執(zhí)行。
所以流程是。賦值id,打印static_block;那上面的代碼就是打印static_block 和Main:0
jsp中插入java代碼叫做scriptlet,卸載%%之間。
簡要參考代碼如下:
%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%
%
String a1 ="";
String a2 = "";
long s = 0;
a1 = request.getParameter("a1");
a2 = request.getParameter("a2");
String outs="";
if(a1!=null !a1.trim().equals("") a2!=null !a2.trim().equals("")){
try{
s = Long.parseLong(a1)+Long.parseLong(a2);
outs = String.valueOf(s);
}catch(Exception ex){
outs="您輸入的不是有效數字!";
}
}
if(a1==null||a2==null) {
a1 ="";
a2 = "";
}
%
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
html
head
給你一個前幾天才幫人寫的
“計算整錢兌零”。程序要求用戶輸入一個雙精度數代表總元數,就會列出總值與其等價的1元幣、二角五分幣、5分幣和1分幣的數目。程序報告的數目是1元幣的最大數、其次是二角五分幣的最大數,等等,依此類推。只顯示非零的單位。對單個單位顯示單數單詞,對多于一個單位的顯示復數單詞
import java.util.Scanner;
public class MoneyCalculate {
public static void main(String[] args) {
int max100 = 0;
int max25 = 0;
int max5 = 0;
int max1 = 0;
double money = getMoneyFromInput();
String str = String.valueOf(money).trim();
String[] ary = str.split("\\.");
max100 = Integer.parseInt(ary[0]);
if(ary.length == 2){
int fen = Integer.parseInt(ary[1]);
if(ary[1].trim().length() == 1){
fen = Integer.parseInt(ary[1]) * 10;
}
max25 = fen / 25;
if(fen % 25 != 0){
fen = fen % 25;
}else{
fen = 0;
}
max5 = fen / 5;
max1 = fen % 5;
}
StringBuilder sb = new StringBuilder(money + " = ");
if(max100 != 0){
sb.append(max100);
sb.append("*1 ");
}
if(max25 != 0){
sb.append(max25);
sb.append("*0.25 ");
}
if(max5 != 0){
sb.append(max5);
sb.append("*0.05 ");
}
if(max1 != 0){
sb.append(max1);
sb.append("*0.01 ");
}
System.out.println(sb.toString());
}
private static double getMoneyFromInput() {
Scanner scanner = new Scanner(System.in);
return scanner.nextDouble();
}
}
-----------
2.49
2.49 = 2*1 1*0.25 4*0.05 4*0.01
-----------
2.5
2.5 = 2*1 2*0.25
-----------
37.23
37.23 = 37*1 4*0.05 3*0.01
-----------------
123.569
123.569 = 123*1 22*0.25 3*0.05 4*0.01
看注釋:
import java.awt.GridLayout;
import javax.swing.*;
public class LoadForm extends JFrame{
private JPanel jpanel1;
private JTextField jtext1;
private JPasswordField password;
private JLabel jlable1;
private JLabel jlable2;
private JButton button1;
private JButton button2;
public LoadForm()
{
super("商品管理系統(tǒng)");
this.setLayout(null);
GridLayout layout=new GridLayout(3,3,10,10);//這句保留
jpanel1=new JPanel();
//jpanel1.setLayout(null);//jpanel1的布局不能為空
jlable1=new JLabel("用戶名");
jlable2=new JLabel("密 碼");
jtext1=new JTextField();
password=new JPasswordField();
button1=new JButton("確定");
button2=new JButton("取消");
jpanel1.add(jlable1);
jpanel1.add(jtext1);
jpanel1.add(jlable2);
jpanel1.add(password);
jpanel1.add(button1);
jpanel1.add(button2);
//this.add(jpanel1);//寫法錯誤
this.setContentPane(jpanel1);//設置jpanel1為Frame的內容面版
this.setBounds(200,200,100,100);
//this.setSize(200,200);
this.setVisible(true);
}
//main方法測試
public static void main(String args[]){
new LoadForm();
}
}
第一階段 通過jdk的GC輸出進行測試
可以在 JAVA_OPTS增加以下參數打開jdk的GC輸出日志:
-verbose:gc -XX:+PrintGCDetails -XX:+HeapDumpOnOutOfMemoryError
打開輸出日志,jdk會在每一次的垃圾回收時打印相關日志
第二階段 通過jmap命令
jmap命令可以獲得運行中的jvm的堆的快照,從而可以離線分析堆,以檢查內存泄漏,檢查一些嚴重影響性能的大對象的創(chuàng)建,檢查系統(tǒng)中什么對象最多,各種對象所占內存的大小等等
第三階段 通過Eclipse Memory Analyzer 分析工具來分析
Eclipse Memory Analyzer是一種快速的,功能豐富的Java堆分析工具,以下簡稱MAT,可以幫助查找內存泄露,并減少內存消耗。 這個工具可以對由堆轉儲產生的數以億計的對象進行分析,一旦堆轉儲被解析,可以在打開他的一瞬間,立即得到保留大小的單一對象,提取記錄詳細的信息,查看為什么這些對象對象資料沒有被釋放掉。使用這些功能的報告,可以對這些對象進行跟蹤,找到內存泄露嫌疑人,也可以得到系統(tǒng)的性能指數,幫助優(yōu)化系統(tǒng)。
jvm與tomcat內存設置
linix系統(tǒng)平臺大并發(fā)量下tomcat5.5優(yōu)化策略(2009-03-11 12:45:24)
標簽:linux tomcat5.5 優(yōu)化策略 it 分類:java
在部署系統(tǒng)后,為了增加系統(tǒng)并發(fā)量,系統(tǒng)響應速度,做了一些工作;遂整理如下。
1、修改server.xml文件
Connector port="80" protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
maxThreads="1000" minSpareThreads="75" maxSpareThreads="300"
enableLookups="false" redirectPort="8443" acceptCount="200"
connectionTimeout="50000" disableUploadTimeout="true"/
主要修改了maxThreads、acceptCount。
引用
Google資料說“如果要加大并發(fā)連接數,應同時加大這兩個參數。web server允許的最大連接數還受制于操作系統(tǒng)的內核參數設置,通常Windows是2000個左右,Linux是1000個左右?!?/p>
2、增加tomcat啟動初始內存設置;catalina.sh – 增加了參數內存設置
內存為2G情況:
JAVA_OPTS="-server -Xms1500M -Xmx1500M -Xss256K -Djava.awt.headless=true -XX:PermSize=64M -XX:MaxPermSize=128m"
(補充:-Dfile.encoding=utf8 加入這個,是設置文件寫入的編碼方式)
引用
Heap Size 最大不要超過可用物理內存的80%,一般的要將-Xms和-Xmx選項設置為相同
堆內存分配
JVM初始分配的內存由-Xms指定,默認是物理內存的1/64;JVM最大分配的內存由-Xmx指定,默認是物理內存的1/4。默認空余堆內存小于40%時,JVM就會增大堆直到-Xmx的最大限制;空余堆內存大于70%時,JVM會減少堆直到-Xms的最小限制。因此服務器一般設置-Xms、-Xmx相等以避免在每次GC 后調整堆的大小。
非堆內存分配
JVM使用-XX:PermSize設置非堆內存初始值,默認是物理內存的1/64;由XX:MaxPermSize設置最大非堆內存的大小,默認是物理內存的1/4。
JVM內存限制(最大值)
首先JVM內存限制于實際的最大物理內存,假設物理內存無限大的話,JVM內存的最大值跟操作系統(tǒng)有很大的關系。簡單的說就32位處理器雖然可控內存空間有4GB,但是具體的操作系統(tǒng)會給一個限制,這個限制一般是2GB-3GB(一般來說Windows系統(tǒng)下為1.5G-2G,Linux系統(tǒng)下為2G-3G),而64bit以上的處理器就不會有限制了。
-Djava.awt.headless=true
Java在圖形處理時調用了本地的圖形處理庫。在利用Java作圖形處理(比如:圖片縮放,圖片簽名,生成報表)時,如果運行在windows上不會出問題。如果將程序移植到Linux/Unix上的時候有可能出現圖形不能顯示的錯誤。提示信息:"Can't connect to X11 window server"這是由于Linux的圖形處理需要一個X Server服務器。解決辦法就是設置參數。
Xss:每個線程的Stack大小。Stack的大小限制著線程的數量。如果Stack過大就好導致內存溢漏。-Xss參數決定Stack大小,例如-Xss1024K。如果Stack太小,也會導致Stack溢漏。
Tomcat 怎么增加內存?
轉載修改方法開始
打開bin目錄,找到catalina.bat(windows系統(tǒng))或catalina.sh(linux系統(tǒng)),在前邊一堆的#號注釋結束之后增加如下配置
windows的:
set CATALINA_OPTS="-server -Xms256m -Xmx256m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m"
linux的:
JAVA_OPTS=='-server -Xms256m -Xmx256m -XX:PermSize=64M -XX:MaxNewSize=256m -XX:MaxPermSize=128m'
轉載修改方法 結束
懸賞:3 發(fā)布時間:2008-08-14 提問人:rihoonet (初級程序員)
獵頭職位: 北京: 北京知名手機網站誠聘java高級程序員
報錯:java.lang.OutOfMemoryError: Java heap space
TOMCAT版本 5.5.23
曾試過的方法。
/tomcat/bin/catalina.bat 加上下面的命令:
set JAVA_OPTS=-Xms32m -Xmx1024m --這樣啟動不了了。。奇怪。
采納的答案
2008-08-14 小瘋子 (資深程序員)
Java代碼
set JAVA_OPTS=-Xms32m -Xmx1024m %JAVA_OPTS%
set JAVA_OPTS=-Xms32m -Xmx1024m %JAVA_OPTS%, 要引用原來的JAVA_OPTS, 不然把原來的覆蓋了.
增加Tomcat虛擬內存大小
--------------------------------------------------------------------------------
JVM的大小設置(unix平臺tomcat):調整 $ CATALINA _HOME \bin\catalina.sh文件。
elif [ "$1" = "start" ] ; then
shift
touch "$CATALINA_BASE"/logs/catalina.out
if [ "$1" = "-security" ] ; then
echo "Using Security Manager"
shift
"$_RUNJAVA" $JAVA_OPTS $CATALINA_OPTS \
-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
-Djava.security.manager \
-Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \
-Dcatalina.base="$CATALINA_BASE" \
-Dcatalina.home="$CATALINA_HOME" \
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
org.apache.catalina.startup.Bootstrap "$@" start \
"$CATALINA_BASE"/logs/catalina.out 21
else
"$_RUNJAVA" $JAVA_OPTS -Xms1024m -Xmx1024m $CATALINA_OPTS \
-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
-Dcatalina.base="$CATALINA_BASE" \
-Dcatalina.home="$CATALINA_HOME" \
-Djava.io.tmpdir="$CATALINA_TMPDIR" \
org.apache.catalina.startup.Bootstrap "$@" start \
"$CATALINA_BASE"/logs/catalina.out 21
fi
注意紅色部分–Xms1024m –Xmx1024m,這句話表示jvm的最小值為1024M,最大1024M,這個部分的調優(yōu)需要根據web服務器主機硬件配置不同而調整,初始化堆的大小執(zhí)行了虛擬機在啟動時向系統(tǒng)申請的內存的大小。一般而言,這個參數不重要。但是有的應用程序在大負載的情況下會急劇地占用更多的內存,此時這個參數就是顯得非常重要,如果虛擬機啟動時設置使用的內存比較小而在這種情況下有許多對象進行初始化,虛擬機就必須重復地增加內存來滿足使用。由于這種原因,我們一般把-Xms和-Xmx設為一樣大,而堆的最大值受限于系統(tǒng)使用的物理內存。一般使用數據量較大的應用程序會使用持久對象,內存使用有可能迅速地增長。當應用程序需要的內存超出堆的最大值時虛擬機就會提示內存溢出,并且導致應用服務崩潰。因此一般建議堆的最大值設置為可用內存的最大值的80%。
JVM的大小設置(windows平臺tomcat):
1)停掉現在的Tomcat服務(假設已經啟動)
net stop "Apache Tomcat 4.1"
2)卸載Tomcat服務
tomcat.exe -uninstall "Apache Tomcat 4.1"
3)重新配置啟動參數
tomcat.exe -install "Apache Tomcat 4.1" "%JAVA_HOME%\jre\bin\server\jvm.dll" -Djava.class.path="%CATALINA_HOME%\bin\bootstrap.jar;%JAVA_HOME%\lib\tools.jar" -Dcatalina.home="%CATALINA_HOME%" -Xrs -Xmx512m -Xms512m -start org.apache.catalina.startup.Bootstrap -params start -stop org.apache.catalina.startup.Bootstrap -params stop -out "%CATALINA_HOME%\logs\stderr.log"
4)在服務中重新啟動Tomcat服務,完成配置。
其中紅色部分也是調整jvm的大小的地方。調整原則同上。
另外:查看jvm的方法:$webapp\cache.jsp。需要提醒的是,通過這個頁面能看出大概的jvm使用數量大小,通常實際的jvm大小要比頁面顯示的偏大些。
-----------------------------------------------------------------------------------
秦敏:rem Set JVM Memery Size
set JAVA_OPTS=-Xms800m -Xmx1024m
-----------------------------------------------------------------------------------
windows中大家都知道,JAVA程序啟動時都會JVM都會分配一個初始內存和最大內存給這個應用程序。這個初始內存和最大內存在一定程度都會影響程序的性能。比如說在應用程序用到最大內存的時候,JVM是要先去做垃圾回收的動作,釋放被占用的一些內存。
所以想調整Tomcat的啟動時初始內存和最大內存就需要向JVM聲明,一般的JAVA程序在運行都可以通過中-Xms -Xmx來調整應用程序的初始內存和最大內存:
如:java -Xms64m -Xmx128m a.jar.
tomcat的啟動程序是包裝過的,不能直接使用java -X..... tomcat.*來改變內存的設置。在Tomcat在改變這個設置
有兩種方法:
1. 就需要在環(huán)境變量中加上TOMCAT_OPTS, CATALINA_OPTS兩個屬性,
如 SET CATALINA_OPTS= -Xms64m -Xmx512m;
ms是最小的,mx是最大,64m, 512m分別是指內存的容量.
2. 修改Catalina.bat文件
在166行“rem Execute Java with the applicable properties ”以下每行
%_EXECJAVA% %JAVA_OPTS% %CATALINA_OPTS% %DEBUG_OPTS% -Djava.endorsed.dirs="%JAVA_ENDORSED_DIRS%" -classpath "%CLASSPATH%" -Dcatalina.base="%CATALINA_BASE%" -Dcatalina.home="%CATALINA_HOME%" -Djava.io.tmpdir="%CATALINA_TMPDIR%" %MAINCLASS% %CMD_LINE_ARGS% %ACTION% 中的%CATALINA_OPTS% 替換成-Xms64m -Xmx512m(把四行內的%CATALINA_OPTS%都替換掉,包括兩邊的%)
___________________________________________________________________________________________
Tomcat本身不能直接在計算機上運行,需要依賴于硬件基礎之上的操作系統(tǒng)和一個java虛擬機。您可以選擇自己的需要選擇不同的操作系統(tǒng)和對應的JDK的版本(只要是符合Sun發(fā)布的Java規(guī)范的),但我們推薦您使用Sun公司發(fā)布的JDK。確保您所使用的版本是最新的,因為Sun公司和其它一些公司一直在為提高性能而對java虛擬機做一些升級改進。一些報告顯示JDK1.4在性能上比JDK1.3提高了將近10%到20%。
可以給Java虛擬機設置使用的內存,但是如果你的選擇不對的話,虛擬機不會補償??赏ㄟ^命令行的方式改變虛擬機使用內存的大小。如下表所示有兩個參數用來設置虛擬機使用內存的大小。
參數
描述
-Xms
JVM初始化堆的大小
-Xmx
JVM堆的最大值
這兩個值的大小一般根據需要進行設置。初始化堆的大小執(zhí)行了虛擬機在啟動時向系統(tǒng)申請的內存的大小。一般而言,這個參數不重要。但是有的應用程序在大負載的情況下會急劇地占用更多的內存,此時這個參數就是顯得非常重要,如果虛擬機啟動時設置使用的內存比較小而在這種情況下有許多對象進行初始化,虛擬機就必須重復地增加內存來滿足使用。由于這種原因,我們一般把-Xms和-Xmx設為一樣大,而堆的最大值受限于系統(tǒng)使用的物理內存。一般使用數據量較大的應用程序會使用持久對象,內存使用有可能迅速地增長。當應用程序需要的內存超出堆的最大值時虛擬機就會提示內存溢出,并且導致應用服務崩潰。因此一般建議堆的最大值設置為可用內存的最大值的80%。
Tomcat默認可以使用的內存為128MB,在較大型的應用項目中,這點內存是不夠的,需要調大。
Windows下,在文件/bin/catalina.bat,Unix下,在文件/bin/catalina.sh的前面,增加如下設置:
JAVA_OPTS='-Xms【初始化內存大小】 -Xmx【可以使用的最大內存】'
需要把這個兩個參數值調大。例如:
JAVA_OPTS='-Xms256m -Xmx512m'
表示初始化內存為256MB,可以使用的最大內存為512MB。
另外需要考慮的是Java提供的垃圾回收機制。虛擬機的堆大小決定了虛擬機花費在收集垃圾上的時間和頻度。收集垃圾可以接受的速度與應用有關,應該通過分析實際的垃圾收集的時間和頻率來調整。如果堆的大小很大,那么完全垃圾收集就會很慢,但是頻度會降低。如果你把堆的大小和內存的需要一致,完全收集就很快,但是會更加頻繁。調整堆大小的的目的是最小化垃圾收集的時間,以在特定的時間內最大化處理客戶的請求。在基準測試的時候,為保證最好的性能,要把堆的大小設大,保證垃圾收集不在整個基準測試的過程中出現。
如果系統(tǒng)花費很多的時間收集垃圾,請減小堆大小。一次完全的垃圾收集應該不超過 3-5 秒。如果垃圾收集成為瓶頸,那么需要指定代的大小,檢查垃圾收集的詳細輸出,研究 垃圾收集參數對性能的影響。一般說來,你應該使用物理內存的 80% 作為堆大小。當增加處理器時,記得增加內存,因為分配可以并行進行,而垃圾收集不是并行的。
Tomcat 5常用優(yōu)化和配置
1、JDK內存優(yōu)化:
Tomcat默認可以使用的內存為128MB,Windows下,在文件{tomcat_home}/bin/catalina.bat,Unix下,在文件{tomcat_home}/bin/catalina.sh的前面,增加如下設置:
JAVA_OPTS='-Xms[初始化內存大小] -Xmx[可以使用的最大內存]
一般說來,你應該使用物理內存的 80% 作為堆大小。
2、連接器優(yōu)化:
在tomcat配置文件server.xml中的配置中,和連接數相關的參數有:
maxThreads:
Tomcat使用線程來處理接收的每個請求。這個值表示Tomcat可創(chuàng)建的最大的線程數。默認值200。
acceptCount:
指定當所有可以使用的處理請求的線程數都被使用時,可以放到處理隊列中的請求數,超過這個數的請求將不予處理。默認值10。
minSpareThreads:
Tomcat初始化時創(chuàng)建的線程數。默認值4。
maxSpareThreads:
一旦創(chuàng)建的線程超過這個值,Tomcat就會關閉不再需要的socket線程。默認值50。
enableLookups:
是否反查域名,默認值為true。為了提高處理能力,應設置為false
connnectionTimeout:
網絡連接超時,默認值60000,單位:毫秒。設置為0表示永不超時,這樣設置有隱患的。通??稍O置為30000毫秒。
maxKeepAliveRequests:
保持請求數量,默認值100。
bufferSize:
輸入流緩沖大小,默認值2048 bytes。
compression:
壓縮傳輸,取值on/off/force,默認值off。
其中和最大連接數相關的參數為maxThreads和acceptCount。如果要加大并發(fā)連接數,應同時加大這兩個參數。web server允許的最大連接數還受制于操作系統(tǒng)的內核參數設置,通常Windows是2000個左右,Linux是1000個左右。
3、tomcat中如何禁止和允許列目錄下的文件
在{tomcat_home}/conf/web.xml中,把listings參數設置成false即可,如下:
...
listings
false
...
4、tomcat中如何禁止和允許主機或IP地址訪問
...
allow="*.mycompany.com,"/
deny="192.168.1.*"/
...
這是我們服務器的配置,具體文件不能給你,因為涉及到公司機密,所以那一行我給你,我拷貝下來了
JAVA_OPTS='-server -Xms512m -Xmx768m -XX:NewSize=128m -XX:MaxNewSize=192m -XX:SurvivorRatio=8'