Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Model Center   Code  
»áÔ±   
   
 
     
   
 ¶©ÔÄ
  ¾èÖú
JavaÐéÄâ»úÕ»ºÍÄÚ´æÄ£ÐÍ
 
×÷Õߣºchun_soft
  2021  次浏览      27
 2021-4-20
 
±à¼­ÍƼö:
±¾ÎÄÖ÷Òª½éÉÜÈçºÎ½áºÏ×Ö½ÚÂëÖ¸ÁîÀí½âJavaÐéÄâ»úÕ»ºÍÕ»Ö¡£¬²¢½øÐÐÉîÈë·ÖÎöÒÔ¼°¶ÔÄÚ´æÄ£Ð͵ĽéÉܺÍÑéÖ¤,Ï£Íû¶ÔÄúµÄѧϰÓÐËù°ïÖú¡£
±¾ÎÄÀ´×ÔÓÚcsdn£¬ÓÉ»ðÁú¹ûÈí¼þAlice±à¼­¡¢ÍƼö¡£

1¡¢½áºÏ×Ö½ÚÂëÖ¸ÁîÀí½âJavaÐéÄâ»úÕ»ºÍÕ»Ö¡

Õ»Ö¡£ºÃ¿¸öÕ»Ö¡¶ÔÓ¦Ò»¸ö±»µ÷Óõķ½·¨£¬¿ÉÒÔÀí½âΪһ¸ö·½·¨µÄÔËÐпռ䡣

ÿ¸öÕ»Ö¡ÖаüÀ¨¾Ö²¿±äÁ¿±í(Local Variables)¡¢²Ù×÷ÊýÕ»(Operand Stack)¡¢Ö¸ÏòÔËÐÐʱ³£Á¿³ØµÄÒýÓÃ(A reference to the run-time constant pool)¡¢·½·¨·µ»ØµØÖ·(Return Address)ºÍ¸½¼ÓÐÅÏ¢¡£

¾Ö²¿±äÁ¿±í£º·½·¨Öж¨ÒåµÄ¾Ö²¿±äÁ¿ÒÔ¼°·½·¨µÄ²ÎÊý´æ·ÅÔÚÕâÕűíÖУ¬¾Ö²¿±äÁ¿±íÖеıäÁ¿²»¿ÉÖ±½ÓʹÓã¬ÈçÐèҪʹÓõϰ£¬±ØÐëͨ¹ýÏà¹ØÖ¸ÁÆä¼ÓÔØÖÁ²Ù×÷ÊýÕ»ÖÐ×÷Ϊ²Ù×÷ÊýʹÓá£

²Ù×÷ÊýÕ»£ºÒÔѹջºÍ³öÕ»µÄ·½Ê½´æ´¢²Ù×÷ÊýµÄ¡£

¶¯Ì¬Á´½Ó£ºÃ¿¸öÕ»Ö¡¶¼°üº¬Ò»¸öÖ¸ÏòÔËÐÐʱ³£Á¿³ØÖиÃÕ»Ö¡ËùÊô·½·¨µÄÒýÓ㬳ÖÓÐÕâ¸öÒýÓÃÊÇΪÁËÖ§³Ö·½·¨µ÷Óùý³ÌÖеĶ¯Ì¬Á¬½Ó(Dynamic Linking)¡£

·½·¨·µ»ØµØÖ·£ºµ±Ò»¸ö·½·¨¿ªÊ¼Ö´Ðкó£¬Ö»ÓÐÁ½ÖÖ·½Ê½¿ÉÒÔÍ˳ö£¬Ò»ÖÖÊÇÓöµ½·½·¨·µ»ØµÄ×Ö½ÚÂëÖ¸ÁһÖÖÊÇÓö¼ûÒì³££¬²¢ÇÒÕâ¸öÒ쳣ûÓÐÔÚ·½·¨ÌåÄڵõ½´¦Àí¡£

class Person{
private String name="Jack";
private int age;
private final double salary=100;
private static String address;
private final static String hobby="Programming";

public void say(){
System.out.println("person say...");
}

public static int calc(int op1,int op2){
op1=3;
int result=op1+op2;
return result;
}

public static void order(){
}

public static void main(String[] args){
calc(1,2);
order();
}
}

Compiled from "Person.java" class Person {
...
public static int calc(int, int);
Code:
0: iconst_3 //½«intÀàÐͳ£Á¿3ѹÈë[²Ù×÷ÊýÕ»]
1: istore_0 //½«intÀàÐÍÖµ´æÈë[¾Ö²¿±äÁ¿0]
2: iload_0 //´Ó[¾Ö²¿±äÁ¿0]ÖÐ×°ÔØintÀàÐÍÖµÈëÕ»
3: iload_1 //´Ó[¾Ö²¿±äÁ¿1]ÖÐ×°ÔØintÀàÐÍÖµÈëÕ»
4: iadd //½«Õ»¶¥ÔªËص¯³öÕ»£¬Ö´ÐÐintÀàÐ͵ļӷ¨£¬½á¹ûÈëÕ»
¡¾For example, the iadd instruction (¡ìiadd) adds two int
values together. It requires that the int values to
be added be the top two values of the operand stack,
pushed there by previous instructions. Both of the int values
are popped from the operand stack.
They are added, and their sum is pushed back onto the operand stack.
Subcomputations may be nested on the operand stack,
resulting in values that can be used by the encompassing computation.¡¿
5: istore_2 //½«Õ»¶¥intÀàÐÍÖµ±£´æµ½[¾Ö²¿±äÁ¿2]ÖÐ
6: iload_2 //´Ó[¾Ö²¿±äÁ¿2]ÖÐ×°ÔØintÀàÐÍÖµÈëÕ»
7: ireturn //´Ó·½·¨Öзµ»ØintÀàÐ͵ÄÊý¾Ý
...
}

2¡¢ÉîÈë·ÖÎö

2.1 Õ»Ö¸Ïò¶Ñ

Èç¹ûÔÚÕ»Ö¡ÖÐÓÐÒ»¸ö±äÁ¿£¬ÀàÐÍΪÒýÓÃÀàÐÍ£¬±ÈÈç Object obj=new Object()£¬Õâʱºò¾ÍÊǵäÐ͵ÄÕ»ÖÐÔªËØÖ¸Ïò¶ÑÖеĶÔÏó¡£

2.2 ·½·¨ÇøÖ¸Ïò¶Ñ

·½·¨ÇøÖÐ»á´æ·Å¾²Ì¬±äÁ¿£¬³£Á¿µÈÊý¾Ý¡£Èç¹ûÊÇÏÂÃæÕâÖÖÇé¿ö£¬¾ÍÊǵäÐ͵ķ½·¨ÇøÖÐÔªËØÖ¸Ïò¶ÑÖеĶÔÏó¡£

private static Object obj=new Object();

2.3 ¶ÑÖ¸Ïò·½·¨Çø

·½·¨ÇøÖлá°üº¬ÀàµÄÐÅÏ¢£¬¶ÑÖлáÓжÔÏó£¬ÄÇÔõô֪µÀ¶ÔÏóÊÇÄĸöÀà´´½¨µÄÄØ?

˼¿¼£ºÒ»¸ö¶ÔÏóÔõô֪µÀËüÊÇÓÉÄĸöÀà´´½¨³öÀ´µÄ£¿Ôõô¼Ç¼?Õâ¾ÍÐèÒªÁ˽âÒ»¸öJava¶ÔÏóµÄ¾ßÌåÐÅÏ¢¿©¡£

2.4 Java¶ÔÏóÄÚ´æ²¼¾Ö

Ò»¸öJava¶ÔÏóÔÚÄÚ´æÖаüÀ¨3¸ö²¿·Ö£º¶ÔÏóÍ·¡¢ÊµÀýÊý¾ÝºÍ¶ÔÆëÌî³ä¡£

3¡¢ÄÚ´æÄ£ÐÍ

3.1 ͼ½â

Ò»¿éÊǷǶÑÇø£¬Ò»¿éÊǶÑÇø¡£

¶ÑÇø·ÖΪÁ½´ó¿é£¬Ò»¸öÊÇOldÇø£¬Ò»¸öÊÇYoungÇø¡£ YoungÇø·ÖΪÁ½´ó¿é£¬Ò»¸öÊÇSurvivorÇø(S0+S1)£¬Ò»¿éÊÇEdenÇø¡£ Eden:S0:S1=8:1:1 S0ºÍS1Ò»Ñù´ó£¬Ò²¿ÉÒÔ½ÐFromºÍTo¡£

¸ù¾Ý֮ǰ¶ÔÓÚHeapµÄ½éÉÜ¿ÉÒÔÖªµÀ£¬Ò»°ã¶ÔÏóºÍÊý×éµÄ´´½¨»áÔÚ¶ÑÖзÖÅäÄÚ´æ¿Õ¼ä£¬¹Ø¼üÊǶÑÖÐÓÐÕâô¶àÇøÓò£¬ÄÇÒ»¸ö¶ÔÏóµÄ´´½¨µ½µ×ÔÚÄĸöÇøÓòÄØ?

3.2 ¶ÔÏó´´½¨ËùÔÚÇøÓò

Ò»°ãÇé¿öÏ£¬Ð´´½¨µÄ¶ÔÏ󶼻ᱻ·ÖÅäµ½EdenÇø£¬Ò»Ð©ÌØÊâµÄ´óµÄ¶ÔÏó»áÖ±½Ó·ÖÅäµ½OldÇø¡£

±ÈÈçÓжÔÏóA£¬B£¬CµÈ´´½¨ÔÚEdenÇø£¬µ«ÊÇEdenÇøµÄÄÚ´æ¿Õ¼ä¿Ï¶¨ÓÐÏÞ£¬±ÈÈçÓÐ100M£¬¼ÙÈçÒѾ­Ê¹ÓÃÁË 100M »òÕß´ïµ½Ò»¸öÉ趨µÄÁÙ½çÖµ£¬Õâʱºò¾ÍÐèÒª¶ÔEdenÄÚ´æ¿Õ¼ä½øÐÐÇåÀí£¬¼´À¬»øÊÕ¼¯(Garbage Collect)£¬ ÕâÑùµÄGCÎÒÃdzÆÖ®ÎªMinor GC£¬Minor GCÖ¸µÄÊÇYoungÇøµÄGC¡£

¾­¹ýGCÖ®ºó£¬ÓÐЩ¶ÔÏó¾Í»á±»ÇåÀíµô£¬ÓÐЩ¶ÔÏó¿ÉÄÜ»¹´æ»î×Å£¬¶ÔÓÚ´æ»î×ŵĶÔÏóÐèÒª½«Æä¸´ÖƵ½Survivor Çø£¬È»ºóÔÙÇå¿ÕEdenÇøÖеÄÕâЩ¶ÔÏó¡£

3.3 SurvivorÇøÏê½â

ÓÉͼ½â¿ÉÒÔ¿´³ö£¬SurvivorÇø·ÖΪÁ½¿éS0ºÍS1£¬Ò²¿ÉÒÔ½Ð×öFromºÍTo¡£ ÔÚͬһ¸öʱ¼äµãÉÏ£¬S0ºÍS1Ö»ÄÜÓÐÒ»¸öÇøÓÐÊý¾Ý£¬ÁíÍâÒ»¸öÊǿյġ£

½Ó×ÅÉÏÃæµÄGCÀ´Ëµ£¬±ÈÈçÒ»¿ªÊ¼Ö»ÓÐEdenÇøºÍFromÖÐÓжÔÏó£¬ToÖÐÊǿյġ£ ´Ëʱ½øÐÐÒ»´ÎGC²Ù×÷£¬FromÇøÖжÔÏóµÄÄêÁä¾Í»á+1£¬ÎÒÃÇÖªµÀEdenÇøÖÐËùÓдæ»îµÄ¶ÔÏó»á±»¸´ÖƵ½ToÇø£¬

FromÇøÖл¹ÄÜ´æ»îµÄ¶ÔÏó»áÓÐÁ½¸öÈ¥´¦¡£

Èô¶ÔÏóÄêÁä´ïµ½Ö®Ç°ÉèÖúõÄÄêÁäãÐÖµ£¬´Ëʱ¶ÔÏó»á±»Òƶ¯µ½OldÇø£¬????Eden????From??ûÓдﵽãÐÖµµÄ ¶ÔÏó»á±»¸´ÖƵ½ToÇø¡£ ´ËʱEdenÇøºÍFromÇøÒѾ­±»Çå¿Õ(±»GCµÄ¶ÔÏó¿Ï¶¨Ã»ÁË£¬Ã»Óб»GCµÄ¶ÔÏó¶¼ÓÐÁ˸÷×ÔµÄÈ¥´¦)¡£

ÕâʱºòFromºÍTo½»»»½ÇÉ«£¬Ö®Ç°µÄFrom±ä³ÉÁËTo£¬Ö®Ç°µÄTo±ä³ÉÁËFrom¡£ Ò²¾ÍÊÇ˵ÎÞÂÛÈçºÎ¶¼Òª±£Ö¤ÃûΪToµÄSurvivorÇøÓòÊǿյġ£

Minor GC»áÒ»Ö±ÖØ¸´ÕâÑùµÄ¹ý³Ì£¬Ö±µ½ToÇø±»ÌîÂú£¬È»ºó»á½«ËùÓжÔÏó¸´ÖƵ½ÀÏÄê´úÖС£

3.4 OldÇøÏê½â

´ÓÉÏÃæµÄ·ÖÎö¿ÉÒÔ¿´³ö£¬Ò»°ãOldÇø¶¼ÊÇÄêÁä±È½Ï´óµÄ¶ÔÏ󣬻òÕßÏà¶Ô³¬¹ýÁËij¸öãÐÖµµÄ¶ÔÏó¡£

ÔÚOldÇøÒ²»áÓÐGCµÄ²Ù×÷£¬OldÇøµÄGCÎÒÃdzÆ×÷ΪMajor GC¡£

3.5 ¶ÔÏóµÄÒ»±²×ÓÀí½â

ÎÒÊÇÒ»¸öÆÕͨµÄJava¶ÔÏó£¬ÎÒ³öÉúÔÚEdenÇø£¬ÔÚEdenÇøÎÒ»¹¿´µ½ºÍÎÒ³¤µÄºÜÏñµÄСÐֵܣ¬ÎÒÃÇÔÚEdenÇøÖÐÍæÁËͦ³¤Ê±¼ä¡£ÓÐ Ò»ÌìEdenÇøÖеÄÈËʵÔÚÊÇÌ«¶àÁË,ÎҾͱ»ÆÈÈ¥ÁËSurvivorÇøµÄ¡°From¡±Çø£¬×Ô´ÓÈ¥ÁËSurvivorÇø,ÎҾͿªÊ¼Æ¯ÁË£¬ÓÐʱºòÔÚ SurvivorµÄ¡°From¡±Çø£¬ÓÐʱºòÔÚSurvivorµÄ¡°To¡±Çø,¾ÓÎÞ¶¨Ëù¡£Ö±µ½ÎÒ18ËêµÄʱºò£¬°Ö°Ö˵ÎÒ³ÉÈËÁË£¬¸ÃÈ¥Éç»áÉÏ´³´³ÁË¡£ÓÚÊÇÎÒ¾ÍÈ¥ÁËÄêÀÏ´úÄDZß,ÄêÀÏ´úÀÈ˺ܶ࣬²¢ÇÒÄêÁ䶼ͦ´óµÄ£¬ÎÒÔÚÕâÀïÒ²ÈÏʶÁ˺ܶàÈË¡£ÔÚÄêÀÏ´úÀÎÒÉú»îÁË20Äê(ÿ´Î GC¼ÓÒ»Ëê)£¬È»ºó±»»ØÊÕ¡£

3.6 ³£¼ûÎÊÌâ

ÈçºÎÀí½âMinor/Major/Full GC

Minor GC£ºÐÂÉú´ú

Major GC£ºÀÏÄê´ú

Full GC£ºÐÂÉú´ú+ÀÏÄê´ú

ΪʲôÐèÒªSurvivorÇø?Ö»ÓÐEden²»ÐÐÂð?

Èç¹ûûÓÐSurvivor£¬EdenÇøÃ¿½øÐÐÒ»´ÎMinor GC£¬´æ»îµÄ¶ÔÏó¾Í»á±»Ë͵½ÀÏÄê´ú¡£ ÕâÑùÒ»À´£¬ÀÏÄê´úºÜ¿ì±»ÌîÂú£¬´¥·¢Major GC(ÒòΪMajor GCÒ»°ã°éËæ×ÅMinor GC£¬Ò²¿ÉÒÔ¿´×ö´¥·¢ÁËFull GC)¡£ ÀÏÄê´úµÄÄÚ´æ¿Õ¼äÔ¶´óÓÚÐÂÉú´ú£¬½øÐÐÒ»´ÎFull GCÏûºÄµÄʱ¼ä±ÈMinor GC³¤µÃ¶à¡£Ö´ÐÐʱ¼ä³¤ÓÐʲô»µ´¦£¿Æµ·¢µÄFull GCÏûºÄµÄʱ¼äºÜ³¤£¬»áÓ°Ïì´óÐͳÌÐòµÄÖ´ÐкÍÏìÓ¦ËÙ¶È¡£

¿ÉÄÜÄã»á˵£¬ÄǾͶÔÀÏÄê´úµÄ¿Õ¼ä½øÐÐÔö¼Ó»òÕß½ÏÉÙ¿©¡£¼ÙÈçÔö¼ÓÀÏÄê´ú¿Õ¼ä£¬¸ü¶à´æ»î¶ÔÏó²ÅÄÜÌîÂúÀÏÄê´ú¡£ËäÈ»½µµÍFull GCƵÂÊ£¬µ«ÊÇËæ×ÅÀÏÄê´ú¿Õ¼ä¼Ó´ó£¬Ò»µ©·¢ÉúFull GC£¬Ö´ÐÐËùÐèÒªµÄʱ¼ä¸ü³¤¡£

¼ÙÈç¼õÉÙÀÏÄê´ú¿Õ¼ä£¬ËäÈ»Full GCËùÐèʱ¼ä¼õÉÙ£¬µ«ÊÇÀÏÄê´úºÜ¿ì±»´æ»î¶ÔÏóÌîÂú£¬Full GCƵÂÊÔö¼Ó¡£

ËùÒÔSurvivorµÄ´æÔÚÒâÒ壬¾ÍÊǼõÉÙ±»Ë͵½ÀÏÄê´úµÄ¶ÔÏ󣬽ø¶ø¼õÉÙFull GCµÄ·¢Éú£¬SurvivorµÄԤɸѡ±£Ö¤£¬Ö»Óо­Àú16 ´ÎMinor GC»¹ÄÜÔÚÐÂÉú´úÖдæ»îµÄ¶ÔÏ󣬲ŻᱻË͵½ÀÏÄê´ú¡£

ΪʲôÐèÒªÁ½¸öSurvivorÇø?

×î´óµÄºÃ´¦¾ÍÊǽâ¾öÁËË鯬»¯¡£Ò²¾ÍÊÇ˵Ϊʲôһ¸öSurvivorÇø²»ÐÐ?µÚÒ»²¿·ÖÖУ¬ÎÒÃÇÖªµÀÁ˱ØÐëÉèÖÃSurvivorÇø¡£¼ÙÉ裬ÏÖÔÚÖ»ÓÐÒ»¸öSurvivorÇø,ÎÒÃÇÀ´Ä£ÄâÒ»ÏÂÁ÷³Ì£º

¸Õ¸Õн¨µÄ¶ÔÏóÔÚEdenÖУ¬Ò»µ©EdenÂúÁË£¬´¥·¢Ò»´ÎMinor GC£¬EdenÖеĴæ»î¶ÔÏó¾Í»á±»Òƶ¯µ½SurvivorÇø¡£ÕâÑù¼ÌÐøÑ­»·ÏÂÈ¥£¬ÏÂÒ»´ÎEdenÂúÁ˵Äʱºò,ÎÊÌâÀ´ÁË£¬´Ëʱ½øÐÐMinor GC£¬EdenºÍSurvivor¸÷ÓÐһЩ´æ»î¶ÔÏó£¬Èç¹û´Ëʱ°ÑEdenÇøµÄ£¬´æ»î¶ÔÏóÓ²·Åµ½SurvivorÇø£¬ºÜÃ÷ÏÔÕâÁ½²¿·Ö¶ÔÏóËùÕ¼ÓеÄÄÚ´æÊDz»Á¬ÐøµÄ£¬Ò²¾Íµ¼ÖÂÁËÄÚ´æË鯬»¯¡£

ÓÀÔ¶ÓÐÒ»¸öSurvivor spaceÊǿյģ¬ÁíÒ»¸ö·Ç¿ÕµÄSurvivor spaceÎÞË鯬¡£

ÐÂÉú´úÖÐEden:S1:S2ΪʲôÊÇ8:1:1?

ÐÂÉú´úÖеĿÉÓÃÄڴ棺¸´ÖÆËã·¨ÓÃÀ´µ£±£µÄÄÚ´æÎª9:1

¿ÉÓÃÄÚ´æÖÐEden:S1ÇøÎª8:1

¼´ÐÂÉú´úÖÐEden:S1:S2 = 8:1:1

4¡¢ÑéÖ¤

4.1 ¶ÑÄÚ´æÒç³ö

³ÌÐò£º

@RestController
public class HeapController {
List list=new ArrayList();
@GetMapping("/heap")
public String heap() throws Exception{
while(true){
list.add(new Person());
Thread.sleep(1);
}
}
}

¼ÇµÃÉèÖòÎÊý±ÈÈç-Xmx20M -Xms20M

ÔËÐнá¹û£º

Exception in thread "http-nio-8080-exec-2" java.lang.OutOfMemoryError: GC overhead limit exceeded

4.2 ·½·¨ÇøÄÚ´æÒç³ö

±ÈÈçÏò·½·¨ÇøÖÐÌí¼ÓClassµÄÐÅÏ¢

4.2.1 asmÒÀÀµºÍClass´úÂë

<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>

public class MyMetaspace extends ClassLoader {
public static List<Class<?>> createClasses() {
List<Class<?>> classes = new ArrayList<Class<?>>();
for (int i = 0; i < 10000000; ++i) {
ClassWriter cw = new ClassWriter(0);
cw.visit(Opcodes.V1_1, Opcodes.ACC_PUBLIC, "Class" + i, null,
"java/lang/Object", null);
MethodVisitor mw = cw.visitMethod(Opcodes.ACC_PUBLIC, "<init>",
"()V", null, null);
mw.visitVarInsn(Opcodes.ALOAD, 0); mw.visitMethodInsn
(Opcodes.INVOKESPECIAL, "java/lang/Object",
"<init>", "()V"); mw.visitInsn(Opcodes.RETURN);
mw.visitMaxs(1, 1);
mw.visitEnd();
Metaspace test = new Metaspace();
byte[] code = cw.toByteArray();
Class<?> exampleClass = test.defineClass("Class" + i, code, 0, code.length);
classes.add(exampleClass);
}
return classes;
}
}

4.2.2 ´úÂë

@RestController
public class NonHeapController {
List<Class<?>> list=new ArrayList<Class<?>>();
@GetMapping("/nonheap")
public String nonheap() throws Exception{
while(true){
list.addAll(MyMetaspace.createClasses());
Thread.sleep(5);
}
}
}

ÉèÖÃMetaspaceµÄ´óС£¬±ÈÈç-XX:MetaspaceSize=50M -XX:MaxMetaspaceSize=50M

ÔËÐнá¹û£º

java.lang.OutOfMemoryError: Metaspace
at java.lang.ClassLoader.defineClass1(Native Method) ~[na:1.8.0_191]
at java.lang.ClassLoader.defineClass(ClassLoader.java:763) ~[na:1.8.0_191]

4.3 ÐéÄâ»úÕ»

4.3.1 ´úÂëÑÝʾStackOverFlow

public class StackDemo {
public static long count=0;
public static void method(long i){
System.out.println(count++);
method(i);
}
public static void main(String[] args) {
method(1);
}
}

ÔËÐнá¹û£º

4.3.2 Àí½âºÍ˵Ã÷

Stack SpaceÓÃÀ´×ö·½·¨µÄµÝ¹éµ÷ÓÃʱѹÈëStack Frame(Õ»Ö¡)¡£ËùÒÔµ±µÝ¹éµ÷ÓÃÌ«ÉîµÄʱºò£¬¾ÍÓпÉÄܺľ¡Stack Space£¬±¬³öStackOverflowµÄ´íÎó¡£

-Xss128k£ºÉèÖÃÿ¸öÏ̵߳ĶÑÕ»´óС¡£JDK 5ÒÔºóÿ¸öÏ̶߳ÑÕ»´óСΪ1M£¬ÒÔǰÿ¸öÏ̶߳ÑÕ»´óСΪ256K¡£¸ù¾ÝÓ¦ÓõÄÏß³ÌËùÐèÄÚ´æ´óС½øÐе÷Õû¡£ÔÚÏàͬÎïÀíÄÚ´æÏ£¬¼õСÕâ¸öÖµÄÜÉú³É¸ü¶àµÄÏ̡߳£µ«ÊDzÙ×÷ϵͳ¶ÔÒ»¸ö½ø³ÌÄÚµÄÏß³ÌÊý»¹ÊÇÓÐÏÞÖÆµÄ£¬²»ÄÜÎÞÏÞÉú³É£¬¾­ÑéÖµÔÚ3000~5000×óÓÒ¡£

Ïß³ÌÕ»µÄ´óСÊǸöË«Èн££¬Èç¹ûÉèÖùýС£¬¿ÉÄÜ»á³öÏÖÕ»Òç³ö£¬ÌرðÊÇÔÚ¸ÃÏß³ÌÄÚÓеݹ顢´óµÄÑ­»·Ê±³öÏÖÒç³öµÄ¿ÉÄÜÐÔ¸ü´ó£¬Èç¹û¸ÃÖµÉèÖùý´ó£¬¾ÍÓÐÓ°Ïìµ½´´½¨Õ»µÄÊýÁ¿£¬Èç¹ûÊǶàÏ̵߳ÄÓ¦Ó㬾ͻá³öÏÖÄÚ´æÒç³öµÄ´íÎó¡£

 

 
   
2021 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]
 
×îÐÂÎÄÕÂ
JavaÐéÄâ»ú¼Ü¹¹
JVM¡ª¡ªJavaÐéÄâ»ú¼Ü¹¹
JavaÈÝÆ÷Ïê½â
Java½ø½×--ÉîÈëÀí½âArrayListʵÏÖÔ­Àí
Java²¢·¢ÈÝÆ÷£¬µ×²ãÔ­ÀíÉîÈë·ÖÎö
×îпγÌ
java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
SpringBoot&Cloud¡¢JavaSSM¿ò¼Ü
Spring Boot Åàѵ
³É¹¦°¸Àý
¹úÄÚÖªÃûÒøÐÐ Spring+SpringBoot+Cloud+MVC
±±¾© Java±à³Ì»ù´¡ÓëÍøÒ³¿ª·¢»ù´¡
±±¾© Struts+Spring
»ªÏÄ»ù½ð ActiveMQ Ô­Àí
ijÃñº½¹« Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢