Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Java более всего ассоциируется с махровым энтерпрайзом. Почему программист, который работает в энтерпрайз компании должен вникать в то, как устроен его инструментарий? Ещё раз: почему энтерпрайз специалист должен вникать в устройство используемых инструментов?Он никому ничего не должен. Пока он не пытается стоить из себя эксперта.
Для энтерпрайза он не уместен — есть вендоры, есть best practice, которым надо следовать. Есть планирование и задачи. Если человек много писал энтерпрайз кода, то он выполнял свои служебные обязанности, а ронять ява-машину в служебные обязанности у него явно не входило.Совершенно верно: он Java-программист 2го (ну хорошо, может быть 3его) разряда. Пусть и с 10 годами работы. Какого фига он корчит из себя что-то большее?
Искать «хаккеров для явы» — это оксюморон какой-то.Вау. То есть программисты на Java уже не должны никогда писать задачи, где ресурсы имеют цену? С чего вдруг?
Слесарь 6ого разряда, говорите? А знаете ли вы как вызвать разрушительный резонанс на вашем станке? То есть вообще не знаете и не думали об этом? Да что вы за слесарь такой? Не 6 разряд, точно.Спасибо за понимание. Я не понимаю как у вас токарь превратился слесаря, но суть дела вы передали весьма точно. Да, если токарь не может объяснить как вызвать разрушительный резонанс (или, что практически важнее, не допустить, чтобы оный резонанс возник), то это не 6й разряд уж точно. Я понимаю, что Java-программисту убить JVM несколько сложнее, чем токарю угробить свой станок, но принцип, в общем-то, тот же.
Почему человек, пищущий код на java и знающий стандартную библиотеку насквозь, да ещё хорошо знающий все общеупотребимые нестандартные, почему он должен хоть в зуб ногой по поводу jvm?#@$^%#&^@! Ну вы же, чёрт побери, сами всё прекрасно объяснили: не почему, а для чего — для того, чтобы претендовать на звание специалиста высокого класса, эксперта. Он может прекрасно продолжать работать в своём «энтерпрайзе» и следовать «best practice» (даже не пытаясь понять почему они «best» и когда они перестают быть «best»). Но зачем же приписывать себе квалификацию и заявлять что ты владеешь тем, чем ты не владеешь?
есть best practice, которым надо следовать
public class Recur {
public static void main(String[] argv) {
recur();
}
static void recur() {
Object[] o = null;
try {
while(true) {
Object[] newO = new Object[1];
newO[0] = o;
o = newO;
}
}
finally {
recur();
}
}
}
C:\JavaTools>java Recur
#
# An unexpected error has been detected by Java Runtime Environment:
#
# EXCEPTION_STACK_OVERFLOW (0xc00000fd) at pc=0x000000006dad5c3d, pid=6816, tid
=5432
#
# Java VM: Java HotSpot(TM) 64-Bit Server VM (11.2-b01 mixed mode windows-amd64)
# Problematic frame:
# V [jvm.dll+0x2e5c3d]
#
# An error report file with more information is saved as:
# C:\JavaTools\hs_err_pid6816.log
#
# If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
#
когда я спрашиваю кого-то на сколько баллов он оценивает свое знание С++ и если он отвечает «на 5+», то это очень серьезный повод усомнитьсяПо деситябальной системе?
фибриляция, тромб, спазм миокарда

к OOM тоже может приводить не явная ошибка, а что-то, требующее изучения всего кода и времени жизни каждого объекта.
Все оптимизация что мы делаем на асемблере, актуальны для x86, но не актуальны под реальные процессоры.Вот прям-таки все? А как тогда, собственно, кодеки люди руками на ассемблере пишут?
Но я не могу уронить процессор, не могу!Вот прям-таки и не можете? Совсем никогда и никакой? И даже статью из Wikipedia никогда не читали?
Я пишу на шарпе и приблизительно знаю как работает GC основаный на поколениях. И я не буду никогда оптимизировать свой код для GC. Это проблема создателей GC.Вот нифига ж себе. Как вы это себе представляете? У вас программа тормозит и жрёт память, как не в себя, заказчик «рвёт и мечет», а вы ему так с вызовом так говорите «это проблема создателей GC»? Будете оптимизировать как миленький. Ну то есть если вы эксперт и задача действительно в GC упёрлась. Ну а если вы не эксперт — то с какого перепугу на подобное место претендуете?
Вот нифига ж себе. Как вы это себе представляете? У вас программа тормозит и жрёт память, как не в себя, заказчик «рвёт и мечет», а вы ему так с вызовом так говорите «это проблема создателей GC»? Будете оптимизировать как миленький.
на конференциях рассказывают, что с ростом посещаемости были сильно поражены тому, как сильно удалось расширяться не за счет введения в строй новых серверов, а за счет переписывания кода с учетом работы GC.
Это самая большая ошибка программирования. Написание кода не для людей а для машин.Это было актуально лет 40 назад. В узких областях актуально и сейчас. В биржевой торговле время машины до сих пор время машины стоит много больше времени программиста: лишняя миллисекунда — и конкуренты опередили.
java.lang.Error: Maximum permit count exceeded, связанный с неправильной работой с семафорами и переполнением int. См. тикет.Caused by: java.lang.Error: Maximum permit count exceeded
at java.util.concurrent.Semaphore$Sync.tryReleaseShared(Semaphore.java:197) [rt.jar:1.7.0_45]
at java.util.concurrent.locks.AbstractQueuedSynchronizer.releaseShared(AbstractQueuedSynchronizer.java:1340) [rt.jar:1.7.0_45]
at java.util.concurrent.Semaphore.release(Semaphore.java:431) [rt.jar:1.7.0_45]
at com.mongodb.util.SimplePool.done(SimplePool.java:129) [mongo-java-driver-2.7.3.jar:]
at com.mongodb.util.SimplePool.done(SimplePool.java:103) [mongo-java-driver-2.7.3.jar:]
at com.mongodb.DBTCPConnector$MyPort.done(DBTCPConnector.java:382) [mongo-java-driver-2.7.3.jar:]
at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:181) [mongo-java-driver-2.7.3.jar:]
at com.mongodb.DBTCPConnector.say(DBTCPConnector.java:138) [mongo-java-driver-2.7.3.jar:]
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:261) [mongo-java-driver-2.7.3.jar:]
at com.mongodb.DBApiLayer$MyCollection.insert(DBApiLayer.java:211) [mongo-java-driver-2.7.3.jar:]
at com.mongodb.DBCollection.insert(DBCollection.java:57) [mongo-java-driver-2.7.3.jar:]
at com.mongodb.DBCollection.insert(DBCollection.java:102) [mongo-java-driver-2.7.3.jar:]Клиенты в ярости из-за непонятных проблем с производительностью? «Дайте мне полчаса».
современные языки программирования всё ещё далеки от своих хоть сколько нибудь оптимальных реализаций
Страсть к программированию. Глава 8. Будь специалистом