javabean 里面屬性過多會導致 (超過800多個)
使用@Data注解
發現是@Data注解 中 @ToString 導致
反編譯后:
StackOverflowError在程序棧空間耗盡時拋出,通常是深度遞歸導致。StackOverflowError繼承了VirtualMachineError類,后者表示JVM已被破壞或資源耗盡。更進一步,VirtualMachineError繼承自Error類,應用程序不應該捕獲這種嚴重的錯誤。不要再throw語句里面拋出這樣的錯誤,因為這些錯誤是不應該發生的異常條件。StackOverflowError從Java 1.0版本就已存在。
StackOverflowError構造函數
StackOverflowError()
和StackOverflowError(String s)
,后者的String參數指明了拋出錯誤的類名
The StackOverflowError in Java
當一個函數被Java程序調用的時候,就會在調用棧上分配棧幀。
棧幀包含被調用函數的參數、局部變量和返回地址。
返回地址指示了當函數執行完畢之后下一步該執行哪里。如果創建棧幀時沒有內存空間,JVM就會拋出StackOverflowError。
每個get方法都要分配棧幀
解決方法:
1.
手寫toString方法
toSting方法里不使用get
StringBuilder大小為合適的值,apend字段
/* * StringBuffer與StringBuilder有什么區別 * StringBuilder是JDK5增加的一個新類,功能幾乎與StringBuffer相同。區別在於StringBuffer是線程安全的, * 多個線程同時操作StringBuffer時,能保證同步,而Stringbuilder是線程非安全的。如果只在單線程環境下使用,StringBuilder * 的效率會更高 */
2.也可以調整也可以Xss 大小
-Xss:規定了每個線程虛擬機棧及堆棧的大小,一般情況下,256k是足夠的,此配置將會影響此進程中並發線程數的大小。
-Xms:表示初始化JAVA堆的大小及該進程剛創建出來的時候,他的專屬JAVA堆的大小,一旦對象容量超過了JAVA堆的初始容量,JAVA堆將會自動擴容到-Xmx大小。
-Xmx:表示java堆可以擴展到的最大值,在很多情況下,通常將-Xms和-Xmx設置成一樣的,因為當堆不夠用而發生擴容時,會發生內存抖動影響程序運行時的穩定性。
3.800多個屬性,是否可以從業務上規避