Daemon 응용 프로그램을 실행하면 스레드 수는 다른 OS에 따라 다릅니다. 즉 Windows 7에서 코드가 실행될 때 동일한 스레드가 동일한 시간 동안 동일한 코드가 26 개의 스레드를 사용하는 동안 동일한 코드가 실행될 때 15 개의 스레드가 사용됩니다 (코드가 1.5 시간 동안 실행될 때).스레드 수는 OS마다 다릅니다.
참고 : 동일한 프로그램 코드가 두 시스템에서 모두 사용됩니다. 내 의심의 여지가, Windows는 32 비트이고 Mac OS는 64 비트입니다.
스레드 수가 다른 이유는 무엇일까요?
거기에 어떤 도움을 크게 감상 할 수가 .. 당신의 해결과 솔루션을 공유하기위한 여러분 모두 감사합니다. 마침내 Mac에서 데몬의 스레드 덤프를 가져 와서 일부 잠금이 thread에 있는지 확인할 수있었습니다. 그러나 여전히 Mac OS의 스레드 수가 항상 Windows 7 스레드 수보다 낮게 유지 된 이유는 여전히 알지 못합니다. 아래에서 잠금이있는 스레드 덤프를 찾으십시오. 이러한 스레드는 당신이 jstack
하여 스택과 이름을 얻을 수 JVM 프로세스에 의해 생성되는 경우
"DefaultUDPTransportMapping_10.190.146.17/0" - Thread [email protected]
java.lang.Thread.State: RUNNABLE
at java.net.PlainDatagramSocketImpl.receive0(Native Method)
- locked [email protected]
at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136)
- locked [email protected]
at java.net.DatagramSocket.receive(DatagramSocket.java:712)
- locked [email protected]
- locked [email protected]
at org.snmp4j.transport.DefaultUdpTransportMapping$ListenThread.run(DefaultUdpTransportMapping.java:345)
at java.lang.Thread.run(Thread.java:637)
"RMI TCP Accept-0" - Thread [email protected]
java.lang.Thread.State: RUNNABLE
at java.net.PlainSocketImpl.socketAccept(Native Method)
at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
- locked [email protected]
at java.net.ServerSocket.implAccept(ServerSocket.java:453)
at java.net.ServerSocket.accept(ServerSocket.java:421)
at sun.management.jmxremote.LocalRMIServerSocketFactory$1.accept(LocalRMIServerSocketFactory.java:34)
at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369)
at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341)
at java.lang.Thread.run(Thread.java:637)
코드를 보여주십시오. –
스레드를 사용할 수있는 프레임 워크를 사용합니까? 어쩌면 네이티브 코드가 쓰레드를 생성하고 다른 플랫폼에서 반드시 동일하지 않을 수도 있습니다. – zeller
나는 당신의 애플리케이션에 의해 생성 된 실제 쓰레드 수는 같다고 생각 하겠지만 JVM은 구현에 따라 다른 수의 쓰레드를 사용한다. – assylias