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多个属性,是否可以从业务上规避