脚本宝典收集整理的这篇文章主要介绍了Java线程与Xss,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
jvm系列
Xss与线程个数
Xss越大,每个线程的大小就越大,占用的内存越多,能容纳的线程就越少;Xss越小,则递归的深度越小,容易出现栈溢出 java.lang.StackOverflowError。减少局部变量的声明,可以节省栈帧大小,增加调用深度。
/** * -Xss128K deep of calling = 675 * -Xss256K deep of calling = 1686 * * Xss越大,每个线程的大小就越大,占用的内存越多,能容纳的线程就越少 * Xss越小,则递归的深度越小,容易出现栈溢出 java.lang.StackOverflowError * 减少局部变量的声明,可以节省栈帧大小,增加调用深度 */ public class XSSDemo { PRivate static int count=0; public static void recursion(){ //减少局部变量的声明,可以节省栈帧大小,增加调用深度 long a=1,b=2,c=3,d=4,e=5,f=6,q=7,x=8,y=9,z=10; count++; recursion(); } public static void main(String args[]){ try{ recursion(); }catch(Throwable e){ System.out.println("deep of calling = "+count); e.printStackTrace(); } } }
java线程数决定因素
JVM中可以生成的最大数量由JVM的堆内存大小、Thread的Stack内存大小、系统最大可创建的线程数量(Java线程的实现是基于底层系统的线程机制来实现的,Windows下_beginthreadex,Linux下pthread_create)三个方面影响。
具体数量可以根据Java进程可以访问的最大内存(32位系统上一般2G)、堆内存、Thread的Stack内存来估算。
(MaxprocessMemory - JVMMemory – ReserveDOSMemory) / (ThreadStackSize) = Number of threads
MaxProcessMemory : 进程的最大寻址空间
JVMMemory : JVM内存
ReservedOsMemory : 保留的操作系统内存,如Native heap,JNI之类,一般100多M
ThreadStackSize : 线程栈的大小,jvm启动时由Xss指定
/** * -XX:+PrintFlagsFinal * maxHeapSize 289406976 byte * maxPermSize 85983232 byte * threadStackSize 1024 byte * * JVM中可以生成的最大数量由JVM的堆内存大小、Thread的Stack内存大小、系统最大可创建的线程数量 * (Java线程的实现是基于底层系统的线程机制来实现的,Windows下_beginthreadex,Linux下pthread_create)三个方面影响。 * 具体数量可以根据Java进程可以访问的最大内存(32位系统上一般2G)、堆内存、Thread的Stack内存来估算。 * * (MaxProcessMemory - JVMMemory – ReservedOsMemory) / (ThreadStackSize) = Number of threads * MaxProcessMemory : 进程的最大寻址空间 * JVMMemory : JVM内存 * ReservedOsMemory : 保留的操作系统内存,如Native heap,JNI之类,一般100多M * ThreadStackSize : 线程栈的大小,jvm启动时由Xss指定 * * http://www.rigongyizu.com/jvm-max-threads/ */ public class TestMaxThread { public static final int BATCH_SIZE = 2000; public static void main(String[] args){ List<Thread> threads = new ArrayList<Thread>(); try{ for(int i=0;i<=100*1000;i+= BATCH_SIZE){ long start = System.currentTimeMillis(); createThread(threads,BATCH_SIZE); long end = System.currentTimeMillis(); Thread.sleep(1000); long delay = end - start; System.out.printf("%,d threads: Time to create %,d threads was %.3f seconds %n", threads.size(), BATCH_SIZE, delay / 1e3); } }catch(Throwable e){ System.out.println("After creating "+ threads.size()+" threads"); e.printStackTrace(); } } private static void createThread(List<Thread> threads,int num){ for(int i=0;i<num;i++){ Thread t = new Thread(new Runnable(){ @override public void run() { try{ while (!Thread.interrupted()){ Thread.sleep(1000); } }catch (InterruptedException e){ } } }); t.setDaemon(true); t.setPriorITy(Thread.MIN_PRIORITY); threads.add(t); t.start(); } } }
以上是脚本宝典为你收集整理的Java线程与Xss全部内容,希望文章能够帮你解决Java线程与Xss所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。