2014-07-22 7 views
2

https://developer.android.com/guide/practices/verifying-apps-art.html#Stack_Size통합 스택은

이 문서는 ART 네이티브 자바를위한 통합 스택을 가지고 있다고 말한다. 그게 무슨 뜻인지 말해 줄래? 스레드의 스택 크기는 생성 될 때만 정의 할 수 있다는 것을 알고 있습니다. Java 코드에서 Thread 클래스의 생성자를 사용하거나 원시 코드에서 pthread API를 사용한다. 그래서 통합 스택이 응용 프로그램의 동작에 어떤 영향을 미치는지 이해할 수 없습니다. 좋은 자습서 나 스 니펫을 던져주세요 StackOverflowError는 통합 스택의 결과입니다.

+0

"예"로 무엇을 의미하는지 모르겠습니다. 응용 프로그램에서 만든 스레드에 대해 스택 크기를 명시 적으로 설정합니까? 모를 경우 대답은 "아니오"입니다. 그렇지 않다면, 걱정할 것이 아무것도없는 것 같습니다. 또는 ART를 사용하는 기기에서 앱을 실행할 때 스택 관련 오류가 발생 했습니까? – Michael

+0

그 예는 코드 스 니펫이 통합 스택에서 StackOverflowError를 던졌습니다. Java에서 스택 크기를 명시 적으로 지정했지만 ART에 문제가 없습니다. 주석달라고 감사드립니다. – korg

+0

디버깅하려는 오류의 원인이되는 코드가 있다고 하시겠습니까? 그렇다면 링크가 아닌 질문에 게시하십시오. 아니면 어떤 종류의 코드가 그렇게 할 수 있는지에 대한 아이디어를 묻는 것입니까? –

답변

2

Dalvik에서 각 스레드는 네이티브 코드와 Java 코드를위한 두 개의 별도 스택을 가지고 있습니다. ART에서 각 스레드는 원시 코드와 Java 코드 모두에 대해 하나의 스택을가집니다. 스레드 (네이티브 또는 자바)의 어딘가에 스레드를 만들고 스택 크기를 지정하면이 크기가 두 코드 환경 모두에서 공유되므로 이에 맞게 조정해야합니다.

+0

도움 주셔서 감사합니다. 내가 이해하지만, 어떤 종류의 구현이 StackOverflowError를 발생시키는 지 알지 못한다. – korg

+0

ART에서 java.lang.Thread에 의해 생성 된 스택 크기는 작은 스택 크기가 지정된 경우에도 Thread :: FixStackSize에 의해 항상 1MB보다 큽니다. 그래서 나는 java.lang.Thread에 의한 스레드가 ART (Dalvik에는 없다)에서만 StackOverflow에 들어 가지 않으므로 구글이 말하는 것을 이해하지 못한다고 생각한다; "Java에서는 명시 적 스택 크기를 지정하는 Thread 생성자에 대한 호출을 검토합니다. 예를 들어 StackOverflowError가 발생하면 크기를 늘려야합니다." – korg

+0

그러나 1 MB보다 큰 크기를 지정하고 여전히 모든 것을 사용할 수 있습니까? 그 고정 된 크기의 것을위한 소스를 게시 할 수 있습니까? 감사합니다 – UnTraDe