myślę, że jest to najprawdopodobniej historyczny artefakt, tzn. coś, co zostało zrobione dawno temu z powodów, które nie są już
Jak wskazuje komentarz Curtisku, zasugerowano, aby to naprawić. Ale brzmi to tak, jakby pomysły zostały ustalone z jednej strony, ponieważ wysiłek, aby naprawić, przekracza korzyści. I jest całkiem jasne, że korzyści z naprawienia tej anomalii są znikome ... chyba że tworzysz wiele wątków, które wykonują mało prawdziwą pracę.
RWE (4745629) nie jest już widoczny w Google, ale this mailing list posting przez Davida Holmesa @ Oracle odnosi się do niego:
Xiaobin Lu powiedział, że opierając się na 08/11/10 08:07:
Dzięki za odpowiedź. W przypadku wielu aplikacji dla przedsiębiorstw (takich jak , dla których pracuję), znaczna ilość czasu trafia do tego wątku.setName zadzwoń pod numer , który moim zdaniem znaczącą częścią jest nowa alokacja znaków i kopia tablicy kolorów itp. Więc myślę, że powinniśmy zastanowić się jeszcze raz nad tym, jak możemy efektywnie przechowywać to pole.
Wystąpił RFE tej drodze powrotnej pod koniec 2002 roku:
4745629 (gwint) Thread.setName robi zbędnych alokacje sznurek (nie użytkowania char [])
Początkowy eval w roku 2002 stwierdził:
"Nie mogę sobie wyobrazić, że ma to poważny wpływ na działanie każdego realnego programu . Ponadto zmiana pól w wątku jest problematyczna z powodu do ścisłego związku tej klasy z t on VM. Powiedział, że może to warto zajęcie to w kontekście jakiegoś wątku code-czyszczenia „
Następnie w 2005 roku został zamknięty jako«nie będzie naprawić.»:
” Istnieją zależności na reprezentację i nazwisko jest tablica char w JVM i to RFE należy szacunkiem odrzucone.”
Zmiana zarówno VM i kod Java jest, jak wiadomo, prawdziwy ból współrzędnych, więc nie będzie musiał być pewnym przekonującym dowodem na dowód sup portuj to (zakładając, że można to zmienić). Osobiście zgadzam się z pierwszym evalem powyżej - jeśli setName ma wpływ na ogólną wydajność , to twoje wątki nie mogą wykonywać zbyt wiele prawdziwej pracy i wydaje się, że tworzysz zbyt wiele wątków - więc byłbym zainteresowany zainteresowanym tutaj więcej o kontekście, w którym to występuje.
Czy możesz to potwierdzić z jakimś odnośnikiem? Nic nie widzę w "Thread.java" lub "Thread.c' (w drzewie" rodzimym "), dzięki czemu nazwa jest dostępna dla natywnego kodu. Jeśli byłby dostępny z natywnego kodu, spodziewałbym się, że na końcu pojawi się znak zerowy. Wydaje się to być spekulacją. –
To była świetna odpowiedź, dziękuję. Czy mogę wziąć pod uwagę, że jest to jeden z powodów, dla których java nie jest językiem czysto obiektowym? – kik
@kik: ** cały ** "jest językiem Java czystym językiem OO" pytanie ** jest bezużyteczne **, ponieważ nikt, kto kiedykolwiek go zapytał, nie był w stanie dostarczyć użytecznej definicji tego, co dokładnie czyni "czysty język OO". Bardzo bym chciał, aby mi udowodniono, że się mylę, ale do tej pory tak się nie stało. –